centos6.8下mysql5.6源码安装并实现主从同步
2016-07-14 14:12
731 查看
mysql源码下载:
http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz
http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz
上一篇文章的mysql主从同步基于mysql-5.1版本,基于yum安装的,mysql版本较低,然而发现mysql-5.1.7之后,主从配置有了变化,master-host等配置属性在mysql-5.1.7之后不再使用,所以如果还是这么配置会报错,接下来学习mysql-5.6.21的源码指定目录安装。
本来是下载了mysql-5.7.13的最新版本进行安装,但是安装过程中遇到了很多问题,一开始预编译出问题,后来编译阶段出问题,所以建议如果要安装5.7版本的mysql,最好centos版本是7以上的版本,所以后来就重新下载了5.6.21这个版本安装,就可以了。
环境:centos6.8+mysql-5.6.21
一:mysql源码安装
1.准备安装环境
首先检查是否已经安装过mysql:
[root@dzy src]# rpm -qa | grep mysql
有的话就卸载掉以前安装的mysql:
[root@dzy src]# rpm -e –nodeps xxx(xxx是搜索结果)
并删除所有的相关文件:
/etc/my.cnf
这里我centos6.8查出一个包,但是通过rpm -e –nodeps xxx命令没有移除,提示不存在的安装包,我就没有理会,继续接下来的步骤
2.编译和安装
安装编译代码所需要的包
[root@dzy src]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio
[root@dzy src]# yum install libaio libaio-devel -y
// 下面两个是centos7才能安装
[root@dzy src]# yum install perl-Data-Dumper -y
[root@dzy src]# yum install net-tools -y
3.创建目录
创建安装目录
mkdir /usr/local/ mysql
创建数据目录
mkdir /usr/local/ mysql/data
创建源码存放目录
mkdir /usr/local/src
4.创建mysql用户组和mysql用户
检查系统是否已经有mysql用户,如果没有则创建
[root@dzy mysql-5.6.21]# cat /etc/passwd | grep mysql
[root@dzy mysql-5.6.21]# cat /etc/group | grep mysql
创建mysql用户(但是不能使用mysql账号登陆系统)
[root@dzy mysql-5.6.21]# groupadd mysql
[root@dzy mysql-5.6.21]# useradd -g mysql -s /sbin/nologin mysql
5.授予目录用户权限
[root@dzy mysql-5.6.21]# chown -R mysql:mysql /usr/local/mysql
6.下载mysql-5.6.21版本
[root@dzy mysql-5.6.21]# cd /usr/local/src
[root@dzy src]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz
[root@dzy src]#tar -zxvf mysql-5.6.21.tar.gz
[root@dzy src]#cd mysql-5.6.21
7.解压安装包并编译安装
[root@dzy src]# tar xvf mysql-5.6.21.tar.gz
[root@dzy src]# cd mysql-5.6.21
[root@dzy mysql-5.6.21]#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
如果没有出现error错误,并提示Buid files have been written to :/usr/local/src/mysql-5.6.21则表示编译成功
[root@dzy src]# make && make install
至此,mysql安装完成
cd /usr/local/mysql 目录去查看如下图:
二:配置mysql实例
1.单实例配置(我没做实验了)
单实例配置方法
进入安装路径
[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
2.多实例配置
什么是多实例
简单地说,就是在一台机器上开启多个不同的服务端口,运行多个mysql服务进程,这些服务进程通过不同socket监听不同服务端口来提供各自的服务。
这些mysql多实例公用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件,在提供服务时,多实例在逻辑上看起来是各自独立的,多个实例之间根据配置文件的设定值,来取得相关服务器的硬件资源
多实例配置方法
在本文中,通过在mysql上开启两个端口(3306和3307来配置多实例,因为下面的主从同步要使用这两个端口来模拟)
创建目录(log目录是存放mysql日志的地方)
[root@dzy mysql]# mkdir -p /data/{3306,3307}/data
[root@dzy mysql]# mkdir -p /data/{3306,3307}/log
修改文件拥有者和权限
[root@localhost 3307]# chown -R mysql:mysql /data
[root@localhost 3307]# find /data -name mysql -exec chmod 700 {} \;
在/data/3306中新建my.cnf
[root@dzy mysql]# cd /data/3306
[root@dzy 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@dzy 3306]# cp my.cnf /data/3307/my.cnf
修改3307的my.cnf文件中的3306变成3307
server-id=2
检查一下目录结构,看看有没有把文件放错地方
[root@dzy 3307]# tree /data
/data
├── 3306
│ ├── data
│ ├── log
│ └── my.cnf
└── 3307
│ ├── data
│ ├── log
│ └── my.cnf
这个命令我的系统没安装,所以没呈现,自己查看一下就可以了。
创建启动文件
在/data/3306中新建mysql启动文件
[root@dzy mysql]# cd /data/3306
[root@dzy 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@dzy mysql]# cd /data/3307
[root@dzy 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
添加mysql启动路径的环境变量
[root@dzy 3307]# echo ‘export PATH=$PATH:/usr/local/mysql/bin’ >>/etc/profile
[root@dzy 3307]# source /etc/profile
[root@dzy 3307]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
初始化数据库
[root@dzy scripts]# cd /usr/local/mysql/scripts
[root@dzy scripts]# ./mysql_install_db –defaults-file=/data/3306/my.cnf –user=mysql –basedir=/usr/local/mysql –datadir=/data/3306/data
[root@dzy scripts]# ./mysql_install_db –defaults-file=/data/3307/my.cnf –user=mysql –basedir=/usr/local/mysql –datadir=/data/3307/data
启动mysql
分别启动两个端口
[root@dzy scripts]# /data/3306/mysql start
Starting MySQL…
[root@dzy 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@dzy 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.21在CentOS6.8上安装完毕
三:主从配置
建议关闭防火墙来测试:
service iptables stop;
用户授权
登陆mysql
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
mysql>grant all on . to user3306@192.168.0.3 identified by ‘root’;
mysql>select user,host,password from mysql.user;
查看是否授权
同一个主机上的两个实例也可以实现主从同步
[root@dzy 3306]#vi /data/3306/my.cnf
开启二进制日志如下图
[root@dzy 3306]#vi /data/3307/my.cnf
重启mysql
[root@dzy 3306]# /data/3306/mysql restart
[root@dzy 3306]# /data/3307/mysql restart
查看是否开启日志
登陆3306端口
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
通过mysql指令来查看bin-log日志是否开启
mysql>show variables like “%log_bin%”
log_bin的值为on则为开启。
查看二进制文件
mysql>show master status;
登陆3307端口,开启主从库的同步
[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot
mysql>change master to master_host = ‘192.168.0.3’,master_user=’user3306’,
master_password=’root’,master_log_file=’mysql-logbin-3306.000003’,
master_log_pos=431;
mysql>start slave;
开启同步
查看是否开启成功
mysql>show slave status \G;
如果红框里的值都是yes,则开启成功。
注意:在执行开启同步的语句时,有一个master_log_file的属性值配置,如果在3306主库执行flush logs,二进制文件回变更会不会影响主从同步呢,经过实验,是不影响的。
这里说一下,如果要实现添加从库,从库的起始数据应该从主库copy一份,为了保证主库与从库数据保持一致必须涉及到读锁和写锁的锁定
1.主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)
mysql> flush tables with read lock;
2.查看主数据库的状态(并记录下File字段名称和Position字段的值,在配置从服务器时有用到,同步从该文件开始的指定位置开始同步)
mysql> show master status;
3.创建主数据库的快照文件
[root@dzy 3306]#mysqldump -uroot -proot -h127.0.0.1 -P3306 –all-databases –triggers –routines –events >>/root/all.sql
4.解锁主数据库的锁表操作
mysql> unlock tables;
5.在从数据库服务器上导入第七步创建的快照文件到从数据库中
[root@dzy 3306]# mysql -uroot -proot -h127.0.0.1 -P3306 < /root/all.sql
6.在从数据库服务器上设置主数据库服务器向从数据库服务器同步
// 以上1,2,3,4步可以用
mysql>mysqldump -uroot -proot test -l(开启读锁) -F(从当前开启flush logs) >/root/all.sql
这语句来代替,之后在回到5,6最后两步骤。
验证同步(这里我就直接在从库建个相应的表做一下测试):
登陆
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
mysql>insert into test3306 values(6);
[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot
如上图所示,主库插入一个6后,从库也就相应的插入6
这里我也把这个多实例当从库,跟另一个主机的单实例mysql主库做了主从同步,也是可以的,注意,在从库切换主库同步的时候,从库一定要关闭当前的同步
stop slave;
以上的mysql多实例源码安装大多来源于以下文章,感谢博主的分享学习:
http://www.linuxidc.com/Linux/2015-06/119354.htm
http://www.linuxidc.com/Linux/2014-12/110752.htm
http://www.linuxidc.com/Linux/2014-06/103752.htm
http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz
http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz
上一篇文章的mysql主从同步基于mysql-5.1版本,基于yum安装的,mysql版本较低,然而发现mysql-5.1.7之后,主从配置有了变化,master-host等配置属性在mysql-5.1.7之后不再使用,所以如果还是这么配置会报错,接下来学习mysql-5.6.21的源码指定目录安装。
本来是下载了mysql-5.7.13的最新版本进行安装,但是安装过程中遇到了很多问题,一开始预编译出问题,后来编译阶段出问题,所以建议如果要安装5.7版本的mysql,最好centos版本是7以上的版本,所以后来就重新下载了5.6.21这个版本安装,就可以了。
环境:centos6.8+mysql-5.6.21
一:mysql源码安装
1.准备安装环境
首先检查是否已经安装过mysql:
[root@dzy src]# rpm -qa | grep mysql
有的话就卸载掉以前安装的mysql:
[root@dzy src]# rpm -e –nodeps xxx(xxx是搜索结果)
并删除所有的相关文件:
/etc/my.cnf
这里我centos6.8查出一个包,但是通过rpm -e –nodeps xxx命令没有移除,提示不存在的安装包,我就没有理会,继续接下来的步骤
2.编译和安装
安装编译代码所需要的包
[root@dzy src]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio
[root@dzy src]# yum install libaio libaio-devel -y
// 下面两个是centos7才能安装
[root@dzy src]# yum install perl-Data-Dumper -y
[root@dzy src]# yum install net-tools -y
3.创建目录
创建安装目录
mkdir /usr/local/ mysql
创建数据目录
mkdir /usr/local/ mysql/data
创建源码存放目录
mkdir /usr/local/src
4.创建mysql用户组和mysql用户
检查系统是否已经有mysql用户,如果没有则创建
[root@dzy mysql-5.6.21]# cat /etc/passwd | grep mysql
[root@dzy mysql-5.6.21]# cat /etc/group | grep mysql
创建mysql用户(但是不能使用mysql账号登陆系统)
[root@dzy mysql-5.6.21]# groupadd mysql
[root@dzy mysql-5.6.21]# useradd -g mysql -s /sbin/nologin mysql
5.授予目录用户权限
[root@dzy mysql-5.6.21]# chown -R mysql:mysql /usr/local/mysql
6.下载mysql-5.6.21版本
[root@dzy mysql-5.6.21]# cd /usr/local/src
[root@dzy src]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz
[root@dzy src]#tar -zxvf mysql-5.6.21.tar.gz
[root@dzy src]#cd mysql-5.6.21
7.解压安装包并编译安装
[root@dzy src]# tar xvf mysql-5.6.21.tar.gz
[root@dzy src]# cd mysql-5.6.21
[root@dzy mysql-5.6.21]#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
如果没有出现error错误,并提示Buid files have been written to :/usr/local/src/mysql-5.6.21则表示编译成功
[root@dzy src]# make && make install
至此,mysql安装完成
cd /usr/local/mysql 目录去查看如下图:
二:配置mysql实例
1.单实例配置(我没做实验了)
单实例配置方法
进入安装路径
[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
2.多实例配置
什么是多实例
简单地说,就是在一台机器上开启多个不同的服务端口,运行多个mysql服务进程,这些服务进程通过不同socket监听不同服务端口来提供各自的服务。
这些mysql多实例公用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件,在提供服务时,多实例在逻辑上看起来是各自独立的,多个实例之间根据配置文件的设定值,来取得相关服务器的硬件资源
多实例配置方法
在本文中,通过在mysql上开启两个端口(3306和3307来配置多实例,因为下面的主从同步要使用这两个端口来模拟)
创建目录(log目录是存放mysql日志的地方)
[root@dzy mysql]# mkdir -p /data/{3306,3307}/data
[root@dzy mysql]# mkdir -p /data/{3306,3307}/log
修改文件拥有者和权限
[root@localhost 3307]# chown -R mysql:mysql /data
[root@localhost 3307]# find /data -name mysql -exec chmod 700 {} \;
在/data/3306中新建my.cnf
[root@dzy mysql]# cd /data/3306
[root@dzy 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@dzy 3306]# cp my.cnf /data/3307/my.cnf
修改3307的my.cnf文件中的3306变成3307
server-id=2
检查一下目录结构,看看有没有把文件放错地方
[root@dzy 3307]# tree /data
/data
├── 3306
│ ├── data
│ ├── log
│ └── my.cnf
└── 3307
│ ├── data
│ ├── log
│ └── my.cnf
这个命令我的系统没安装,所以没呈现,自己查看一下就可以了。
创建启动文件
在/data/3306中新建mysql启动文件
[root@dzy mysql]# cd /data/3306
[root@dzy 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@dzy mysql]# cd /data/3307
[root@dzy 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
添加mysql启动路径的环境变量
[root@dzy 3307]# echo ‘export PATH=$PATH:/usr/local/mysql/bin’ >>/etc/profile
[root@dzy 3307]# source /etc/profile
[root@dzy 3307]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
初始化数据库
[root@dzy scripts]# cd /usr/local/mysql/scripts
[root@dzy scripts]# ./mysql_install_db –defaults-file=/data/3306/my.cnf –user=mysql –basedir=/usr/local/mysql –datadir=/data/3306/data
[root@dzy scripts]# ./mysql_install_db –defaults-file=/data/3307/my.cnf –user=mysql –basedir=/usr/local/mysql –datadir=/data/3307/data
启动mysql
分别启动两个端口
[root@dzy scripts]# /data/3306/mysql start
Starting MySQL…
[root@dzy 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@dzy 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.21在CentOS6.8上安装完毕
三:主从配置
建议关闭防火墙来测试:
service iptables stop;
用户授权
登陆mysql
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
mysql>grant all on . to user3306@192.168.0.3 identified by ‘root’;
mysql>select user,host,password from mysql.user;
查看是否授权
同一个主机上的两个实例也可以实现主从同步
[root@dzy 3306]#vi /data/3306/my.cnf
开启二进制日志如下图
[root@dzy 3306]#vi /data/3307/my.cnf
重启mysql
[root@dzy 3306]# /data/3306/mysql restart
[root@dzy 3306]# /data/3307/mysql restart
查看是否开启日志
登陆3306端口
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
通过mysql指令来查看bin-log日志是否开启
mysql>show variables like “%log_bin%”
log_bin的值为on则为开启。
查看二进制文件
mysql>show master status;
登陆3307端口,开启主从库的同步
[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot
mysql>change master to master_host = ‘192.168.0.3’,master_user=’user3306’,
master_password=’root’,master_log_file=’mysql-logbin-3306.000003’,
master_log_pos=431;
mysql>start slave;
开启同步
查看是否开启成功
mysql>show slave status \G;
如果红框里的值都是yes,则开启成功。
注意:在执行开启同步的语句时,有一个master_log_file的属性值配置,如果在3306主库执行flush logs,二进制文件回变更会不会影响主从同步呢,经过实验,是不影响的。
这里说一下,如果要实现添加从库,从库的起始数据应该从主库copy一份,为了保证主库与从库数据保持一致必须涉及到读锁和写锁的锁定
1.主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)
mysql> flush tables with read lock;
2.查看主数据库的状态(并记录下File字段名称和Position字段的值,在配置从服务器时有用到,同步从该文件开始的指定位置开始同步)
mysql> show master status;
3.创建主数据库的快照文件
[root@dzy 3306]#mysqldump -uroot -proot -h127.0.0.1 -P3306 –all-databases –triggers –routines –events >>/root/all.sql
4.解锁主数据库的锁表操作
mysql> unlock tables;
5.在从数据库服务器上导入第七步创建的快照文件到从数据库中
[root@dzy 3306]# mysql -uroot -proot -h127.0.0.1 -P3306 < /root/all.sql
6.在从数据库服务器上设置主数据库服务器向从数据库服务器同步
// 以上1,2,3,4步可以用
mysql>mysqldump -uroot -proot test -l(开启读锁) -F(从当前开启flush logs) >/root/all.sql
这语句来代替,之后在回到5,6最后两步骤。
验证同步(这里我就直接在从库建个相应的表做一下测试):
登陆
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot
[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot
mysql>insert into test3306 values(6);
[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot
如上图所示,主库插入一个6后,从库也就相应的插入6
这里我也把这个多实例当从库,跟另一个主机的单实例mysql主库做了主从同步,也是可以的,注意,在从库切换主库同步的时候,从库一定要关闭当前的同步
stop slave;
以上的mysql多实例源码安装大多来源于以下文章,感谢博主的分享学习:
http://www.linuxidc.com/Linux/2015-06/119354.htm
http://www.linuxidc.com/Linux/2014-12/110752.htm
http://www.linuxidc.com/Linux/2014-06/103752.htm
相关文章推荐
- linux ubuntu16.04 LTS 32 bit安装android studio
- IT--linux--排错--log
- linux expect自动登录ssh,ftp
- 使用 udev 高效、动态地管理 Linux 设备文件
- 关于find命令
- CentOS启用sudo,禁用root远程登录
- centos7下lamp的分布式安装
- centos下lnmp的安装
- Linux启动提示Kernel panic - not syncing: Attempted to kill init解决办法
- centos 安装 phalcon
- 进程的虚拟地址划分
- linux学习8:文件权限
- Linux 中 mysql 的主从复制配置
- linux终端快捷键
- 在 Linux 上管理加密密钥的最佳体验
- Linux用户态程序计时方式详解
- LINUX最大线程数及最大进程数
- Linux date命令详解
- Qt Weekly #23: Qt 5.5 enhancements for Linux graphics and input stacks(翻译)
- linux④: