文档章节

在linux上使用源代码安装MySQL

阿信sxq
 阿信sxq
发布于 2014/05/28 10:38
字数 1708
阅读 279
收藏 10

    由于工作和学习方面的原因,经常使用linux,前段时间折腾了几次linux上源代码方式安装mysql,期间也参考了网友的各种介绍,现在总结如下,方便自己以后查看,也方便其他人学习使用。

1 环境

    linux:CentOS 6.5/6.3 x86/x86_64均实验过

2 准备

    这里进行介绍所需要的软件或工具版本有:

        MySQL:mysql-5.5.37.tar.gz,cmake:cmake-2.8.12.2.tar.gz

    这些都可以到相应的官网下载,版本无关紧要,重要的是过程和方法。

    还要为linux安装gcc和gcc-c++以及ncurses-devel和由此产生的依赖,直接使用yum进行安装

yum install gcc gcc-c++ ncurses-devel

安装完后就可以进行正式的安装了。

3 安装cmake

将下载好的cmake-2.8.12.2.tar.gz上传到linux上,然后解包

tar -zxvf cmake-2.8.12.2.tar.gz

进入解压出来的目录,然后按照要求运行安装命令(中间可能要等一会儿)

cd cmake-2.8.12.2
./boostrap
make
make install

这样就把cmake装好了,之后就可以安装MySQL了。

4 准备mysql用户和组以及目录

groupadd mysql 
useradd -g mysql mysql 

cd /usr/local
mkdir mysql
cd mysql
mkdir data
mkdir log
cd ..
chown -R mysql:mysql mysql

这样就创建了mysql的用户和用户组,也创建了安装的相关目录。这里的目录可以修改,但是要和接下来的安装配置相对应。

5 安装mysql

将下载的mysql-5.5.37.tar.gz上传到linux上,解压缩包

tar -zxvf mysql-5.5.37.tar.gz

进入源代码目录

cd mysql-5.5.37

使用cmake配置编译文件

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/usr/local/mysql/data \
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DENABLED_LOCAL_INFILE=1

这里面的目录要和之前准备的目录关联,如果提示出错的话还要删除cmake的缓存文件,修正错误,然后重新配置。

配置成功后就可以编译安装了,中间要等一段时间

make
make install

6 mysql的安装后配置

修改文件权限

chmod +w /usr/local/mysql/
chown -R mysql:mysql /usr/local/mysql/

查看链接库的情况

ls /usr/local/mysql/lib

输出可能是这个样子的

libmysqlclient.a libmysqlclient_r.so.18.0.0 libmysqlservices.a
libmysqlclient_r.a libmysqlclient.so plugin
libmysqlclient_r.so libmysqlclient.so.18
libmysqlclient_r.so.18 libmysqlclient.so.18.0.0

要创建一个链接文件,如果具体的输出不一样,对应更改

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

进入源代码目录下面的配置文件目录

cd support-files/

复制相关配置文件

cp my-small.cnf /etc/my.cnf 
cp mysql.server /etc/rc.d/init.d/mysql

初始化安装,

/usr/local/mysql/scripts/mysql_install_db \
    --basedir=/usr/local/mysql \
    --datadir=/usr/local/mysql/data \
    --user=mysql

为文件添加可执行权限

chmod +x /etc/init.d/mysql

修改配置文件,

vi /etc/init.d/mysql 
    找到修改为
        basedir=/usr/local/mysql
        datadir=/usr/local/mysql/data

    mysqld_pid_file_path=/usr/local/mysql/log/mysql.pid

为mysql服务添加开机自动启动

chkconfig --add mysql
chkconfig --level 345 mysql on

具体的启动“等级”根据需要修改

前面都正确的话现在就可以启动服务了,

service mysql start

接下来是权限方面的配置

7 mysql的权限和用户配置

为可执行文件添加链接

ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
ln -s /usr/local/mysql/bin/mysql /usr/bin

这样就可以直接使用mysql和mysqladmin命令了,其他的根据需要再添加。

设置root用户(这个root是mysql的root用户)密码

mysqladmin -uroot password '你的密码'

接下来使用刚才的密码登录mysql

mysql -uroot -p
(接下来会要求输入你的密码)

登陆成功后就可以配置具体的权限了,接下来的操作都是在“mysql>”提示符下进行的,表示已登录mysql。

use mysql
mysql> select user,password from user;

查询当前已有的账户,可以看到有很多没有密码的用户,这是需要删除的,

delete from user where password='';

mysql> select user,password from user;

这样就会删除了空密码用户,然后在查看用户列表,就会发现只有一个用户了。

当前的用户还不能在除服务器外的机器上登录,这显然是不应该的,添加root用户远程拥有所有权限

grant all privileges on *.* to root@'%' identified by '你的密码' with grant option;

具体的场景下,如果要对权限进行限制,则需要修改具体的语句。

为每一个数据库创建单独的用户并分配全显示很有必要的,下面就是创建一个名为recruitdba的用户,并分配权限为所有主机操作recruit数据库的所有权限

CREATE USER 'recruitdba'@'%' IDENTIFIED BY 'recruitdba';
grant all privileges on recruit.* to recruitdba@'%' identified by 'recruitdba' with grant option;
flush privileges;

至此,mysql的安装和配制就完成了,具体的环境下有一些不一样的就需要灵活变通了

8 额外配置

有些时候会发现linux的防火墙会阻挡mysql的数据包,所以要添加防火墙规则

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT

 service iptables save 进行保存
service iptables restart重启

这样设置之后按道理说就应该正确了,但事实上从其他主机访问还是有问题,测试发现是防火墙的问题,

使用iptables -L -n查看到的这两条的顺序应该是这样

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:3306

但是结果却是这样

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:3306

就是这两条的顺序有问题

Chain INPUT (policy ACCEPT)
…… 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306

先拒绝,再允许,就允许不了了,

使用

 vi /etc/sysconfig/iptables

调整着两条记录的顺序,这样来的实在点,调整过后重启防火墙就行了




© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 225
博文 82
码字总数 72407
作品 1
成都
后端工程师
私信 提问
Chapter 2 安装 和升级 MySQL

2.1 通用安装向导 2.1.1 决定安装那个版本 的mysql 2.1.2 如何获取 MySQL 2.1.3 安装布局 Layouts(布局) 2.1.4 编译指定特性Compiler-Specific Build Characteristics 2.2 在Unix/Linux平台使...

维和步兵
06/10
0
0
在虚拟机Linux系统上手工编译安装Mysql

在虚拟机Linux系统上手工编译安装Mysql 1、 首先将mysql-5.5.24.tar.gz源代码包准备好,解压到虚拟机Linux的/opt文件夹下。 2、 通过yum仓库安装需要的基础工具,主要包括(gcc 、 gcc-c++ ...

xiaoyaokeyx
04/20
0
0
在阿里云服务器(ECS)上从零开始搭建nginx服务器

本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器。阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验馆去体验(半个月有...

androidguy
06/29
0
0
apache2、mysql4与php4整合安装

一、系统环境 本系统为:Red Hat Linux----Advanced Server release 2.1AS 此安装也适合与Red Hat Linux 9.0 二、安装 2.1、源代码(请自行下载,版本相差不远关系不大) mysql-4.x.tar.gz ht...

范堡
2009/05/06
195
0
mysql读写分离(MySQL Proxy 安装和使用)

一、必备软件: 1、LUA 可以去LUA的官方下载:www.lua.org 2、MySQL Proxy 这里有好多二进制版本。 http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/ 或者去MYSQL官方下载源代码。 3、...

晨曦之光
2012/03/09
211
0

没有更多内容

加载失败,请刷新页面

加载更多

微信开发--测试账号相关

1、微信公众平台选择代码开发后,其平台上的部分功能会不可用 可在开发者工具中选择开通测试账号,进行相关的功能调试(测试账号出微信支付不可调试外,其他功能基本上都可以调试) 2、测试账号...

Code辉
1分钟前
0
0
Nginx配置upstream实现负载均衡

使用Nginx配置upstream实现负载均衡: 1. 在http节点下,添加upstream节点。 upstream test { server 192.168.1.100:8080; server 192.168.1.101:8081; } 2. 将server节点下的location节点中......

littlemesieV
3分钟前
0
0
库存系统实现

前言 最近在重构之前系统中的库存处理逻辑。 老的系统中库存处理逻辑只是一个类里面的几个方法,同时是直连DB操作,有缓存处理,但是在数据一致性保障上并没有特别的可靠。 随着运营投入的越...

春哥大魔王的博客
3分钟前
0
0
如何对网站进行归档

我最近深入研究了网站归档,因为有些朋友担心遇到糟糕的系统管理或恶意删除时失去对放在网上的内容的控制权。这使得网站归档成为系统管理员工具箱中的重要工具。事实证明,有些网站比其他网站...

linuxprobe16
12分钟前
0
0
VMware前路难测,多个厂家群雄逐鹿

在人们高谈Salesforce、亚马逊等新兴云计算厂商取得的成就时,以VMware、HPE和Cisco为代表的老牌厂商也在进行着自己的转型和变化,而且还取得一定的进展。以VMware为例,虚拟机巨头公布了第二...

linux-tao
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部