CentOS 7下源码安装MySQL 5.6

本文转载,并非原创。

准备工作

运行环境

确认你的安装版本

下载MySQL

安装MySQL

准备安装环境

编译和安装

配置MySQL

单实例配置

单实例配置方法

添加防火墙

启动MySQL

重启MySQL

多实例配置

什么是多实例

多实例配置方法

创建启动文件

初始化数据库

配置防火墙

启动MySQL

登陆MySQL

重启MySQL

准备工作

运行环境

本文的运行环境如下

系统版本

CentOS7最小化安装:

Linux version 3.10.0-123.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Mon Jun 30 12:09:22 UTC 2014

mysql版本

mysql-5.6.25

确认你的安装版本

mysql分为开发版本和稳定版本(GA),开发版本拥有最新的特性,但是并不稳定,也没有完全经过测试,可能存在严重的bug,而稳定版本是经过了长时间的测试,消除了具有已知的bug,其稳定性和安全性都得到一定的保障。

对于一个mysql的版本号如:mysql-5.6.1-m1,这个版本号意味着什么呢?
1.对于5.6.1的解释:第一个数字5代表了文件格式,第二个数字6代表了发行级别,第三个数字1代表了版本号。更新幅度较小时,最后的数字会增加,出现了重大特性更新时,第二个数字会增加,文件格式改变时,第一个数字会增加 
2.对于m1的解释:这是用来表明这个mysql版本的稳定性级别的,如果没有这个后缀,那么这个版本就是一个稳定版(GA);如果这个后缀是mN(例如m1,m2)格式,表明了这个版本加入了一些经过彻底测试的新特性,可以认为这是一个试生产的模具;如果这个后缀是rc,表明了这是一个候选版本,已经修改了已知的重要bug,但是没有经过足够长时间的使用来确认所有的bug已经被修复。

一旦选择了版本号,就要选择使用哪个发行版,你可以使用二进制发行版如RPM包或Zip压缩包等,但是如果你要实现如下的功能,就要选择源码安装(本文正是选择源码安装的方式):
1.l把mysq安装到指定位置 
2.l使用mysql的一些特性(标准的二进制版本中并没有这些特性)如:TCP封包支持,调试mysql 
3.二进制版本中默认支持所有的字符集,但你可以在编译安装源码时指定字符集,从而使得安装的mysql更小

下载mysql

在这里下载mysql:http://dev.mysql.com/downloads/mysql/

我选择的是这个:

CentOS 7下源码安装MySQL 5.6

CentOS 7下源码安装MySQL 5.6

下载完后需要检查文件的MD5,以确认是否从官网下载的原版本(以防被人篡改过该软件)

我从windows下载后上传到linux后,使用md5sum命令来检查:

[root@localhost src]# md5sum mysql-5.6.25.tar.gz 
37664399c91021abe070faa700ecd0ed mysql-5.6.25.tar.gz

可以看出,与上图中的MD5是一致的,如果不一致,就要更换一个镜像地址来下载mysql。

安装mysql

准备安装环境

首先检查是否已经安装过mysql:

[root@localhost src]# rpm -qa | grep mysql

有的话就卸载掉以前安装的mysql:

[root@localhost src]# rpm -e --nodeps xxx(xxx是搜索结果)

并删除所有的相关文件:

/etc/my.cnf

编译和安装

安装编译代码所需要的包

[root@localhost src]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio
[root@localhost src]# yum install libaio libaio-devel -y
[root@localhost src]# yum install perl-Data-Dumper -y
[root@localhost src]# yum install net-tools -y

解压安装包并编译安装

[root@localhost src]# tar xvf mysql-5.6.25.tar.gz
[root@localhost src]# cd mysql-5.6.25
[root@localhost mysql-5.6.25]#cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

CentOS 7下源码安装MySQL 5.6

编译成功

[root@localhost src]# make && make install

至此,mysql安装完成

配置mysql

检查系统是否已经有mysql用户,如果没有则创建

[root@localhost mysql-5.6.25]# cat /etc/passwd | grep mysql
[root@localhost mysql-5.6.25]# cat /etc/group | grep mysql

创建mysql用户(但是不能使用mysql账号登陆系统)

[root@localhost mysql-5.6.25]# groupadd mysql -s /sbin/nologin
[root@localhost mysql-5.6.25]# useradd -g mysql mysql

修改权限

[root@localhost mysql-5.6.25]# chown -R mysql:mysql /usr/local/mysql

至此,mysql安装完毕

下面有两种配置方式,推荐按照多实例配置的方式

单实例配置

单实例配置方法

进入安装路径

[root@localhost mysql-5.6.25]# cd /usr/local/mysql

进入安装路径,执行初始化配置脚本,创建系统自带的数据库和表

[root@localhost mysql]# scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

注:在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置!

注意:在CentOS 7版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。

在使用"yum update"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。

添加防火墙

[root@localhost mysql]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@localhost mysql]# firewall-cmd --reload

启动mysql

添加服务,拷贝服务脚本到init.d目录,并设置开机启动

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysql
[root@localhost mysql]# chkconfig mysql on
[root@localhost mysql]# service mysql start --启动MySQL

查看mysql是否启动成功

[root@localhost mysql]# netstat -lntp | grep 3306

如果mysql没有启动成功,到目录/usr/local/mysql/data下查看错误日志

[root@localhost data]# tail localhost.localdomain.err (localhost.localdomain是主机名)

如果没有生成日志目录,则mysql安装没有成功(再重新编译安装一次)

重启mysql

首先杀死mysql进程

[root@localhost 3306]# pkill mysqld

然后检查是否已经杀死mysql进程

[root@localhost 3306]# netstat -lntp | grep 3306

此时shell没有任何输出,表明已经杀死了mysql进程

然后重启mysql并再次检查是否启动成功

[root@localhost 3306]# service mysql start
[root@localhost 3306]# netstat -lntp | grep 3306

多实例配置

什么是多实例

简单地说,就是在一台机器上开启多个不同的服务端口,运行多个mysql服务进程,这些服务进程通过不同socket监听不同服务端口来提供各自的服务。

这些mysql多实例公用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件,在提供服务时,多实例在逻辑上看起来是各自独立的,多个实例之间根据配置文件的设定值,来取得相关服务器的硬件资源

多实例配置方法

在本文中,通过在mysql上开启两个端口(3306和3307来配置多实例,因为下面的主从同步要使用这两个端口来模拟)

创建目录(log目录是存放mysql日志的地方)

[root@localhost mysql]# mkdir -p /data/{3306,3307}/data
[root@localhost mysql]# mkdir -p /data/{3306,3307}/log

在/data/3306中新建my.cnf

[root@localhost mysql]# cd /data/3306
[root@localhost mysql]# vi my.cnf

把如下内容拷贝到该文件中

[client]
port = 3306
socket = /data/3306/mysql.sock

[mysqld]
port=3306
socket = /data/3306/mysql.sock
pid-file = /data/3306/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id=1
#log-bin=mysql-bin
#log-bin-index= mysql-bin.index

# LOGGING
log_error=/data/3306/log/mysql-error.log
slow_query_log_file=/data/3306/log/mysql-slow.log
slow_query_log=1

同样地,在/data/3307中新建my.cnf

[root@localhost mysql]# cd /data/3307
[root@localhost mysql]# vi my.cnf

把如下内容拷贝到该文件中(把上面的3306改为3307,还有server-id的值)

[client]
port = 3307
socket = /data/3307/mysql.sock

[mysqld]
port=3307
socket = /data/3307/mysql.sock
pid-file = /data/3307/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3307/data
server-id=3
#log-bin=mysql-bin
#log-bin-index= mysql-bin.index

# LOGGING
log_error=/data/3307/log/mysql-error.log
slow_query_log_file=/data/3307/log/mysql-slow.log
slow_query_log=1

检查一下目录结构,看看有没有把文件放错地方

[root@localhost 3307]# tree /data
/data
├── 3306
│ ├── data
│ ├── log
│ └── my.cnf

└── 3307
│ ├── data
│ ├── log
│ └── my.cnf

创建启动文件

在/data/3306中新建mysql启动文件

[root@localhost mysql]# cd /data/3306
[root@localhost mysql]# vi mysql

把如下内容拷贝到该文件中

#!/bin/sh
port=3306
mysql_user="root"
mysql_pwd=""
CmdPath="/usr/local/mysql/bin"

#startup function

function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
}

#stop function

function_stop_mysql()
{
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
}

#restart function

function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}

case $1 in
start)
function_start_mysql
;;

stop)
function_stop_mysql
;;

restart)
function_restart_mysql
;;
*)

printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

同理,在/data/3307中新建mysql启动文件

[root@localhost mysql]# cd /data/3307
[root@localhost mysql]# vi mysql

把如下内容拷贝到该文件中

#!/bin/bash

port=3307
mysql_user="root"
mysql_pwd=""
CmdPath="/usr/local/mysql/bin"

#startup function

function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
}

#stop function

function_stop_mysql()
{
printf "Stoping MySQL...\n"

${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
}

#restart function

function_restart_mysql()
{
printf "Restarting MySQL...\n"

function_stop_mysql
sleep 2
function_start_mysql
}

case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

修改文件拥有者和权限

[root@localhost 3307]# chown -R mysql:mysql /data

[root@localhost 3307]# find /data -name mysql -exec chmod 700 {} \;

添加mysql启动路径

[root@localhost 3307]# echo 'export PATH=$PATH:/usr/local/mysql/bin' >>/etc/profile

[root@localhost 3307]# source /etc/profile

[root@localhost 3307]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

可以看到mysql路径已经添加到了启动路径中

初始化数据库

[root@localhost scripts]# cd /usr/local/mysql/scripts

[root@localhost scripts]# ./mysql_install_db --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data

[root@localhost scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data

配置防火墙

[root@localhost scripts]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success

[root@localhost scripts]# firewall-cmd --zone=public --add-port=3307/tcp --permanent
success

[root@localhost scripts]# firewall-cmd --reload
success

启动mysql

分别启动两个端口

[root@localhost scripts]# /data/3306/mysql start
Starting MySQL...

[root@localhost scripts]# /data/3307/mysql start
Starting MySQL...

[root@localhost scripts]# netstat -lntp | grep 330
tcp6 0 0 :::3306 :::* LISTEN 33556/mysqld
tcp6 0 0 :::3307 :::* LISTEN 34204/mysqld

可以看到两个端口都已经启动成功

登陆mysql

刚安装完的mysql是没有登陆密码的

[root@localhost scripts]# mysql -S /data/3306/mysql.sock

如果不成功,检查/data/3306/log目录下的mysql-error.log日志,逐一排除错误

如果登陆成功,下面就修改登录密码(不建议在shell环境下修改密码,否则别人只要查看命令历史就能看到密码(前提是你没有情况命令历史))

mysql> update mysql.user set password=password("123456") where user='root';
mysql> flush privileges;

同理,使用上面的方法修改3307的登陆密码

要把上面更改后的密码写回到mysql的启动文件中(否则每次启动、关闭、重启mysql都要输入密码)

[root@localhost 3306]# sed -i 's/mysql_pwd=\"\"/mysql_pwd=\"123456\"/g' /data/3306/mysql
[root@localhost 3306]# sed -i 's/mysql_pwd=\"\"/mysql_pwd=\"123456\"/g' /data/3307/mysql

注意把上面的123456改为设置的密码

重启mysql

[root@localhost 3306]# /data/3306/mysql restart
[root@localhost 3306]# netstat -lntp | grep 330
tcp6 0 0 :::3306 :::* LISTEN 35430/mysqld

可以看到3306端口重启成功,同理可以重启3307端口

至此,mysql-5.6.25在CentOS7上安装完毕

上一篇:Android Native crash分析工具


下一篇:Android的生命周期学习