一、系统环境
Ubuntu 14.04 64位
MySQL 5.7.17 64位 源码编译安装
已实现mysqld_multi设定好的三个mysql服务,见教程:http://www.linuxdiyf.com/linux/29835.html
在Ubuntu系统中使用mysqld_multi单机实现主从复制的配置如下表:
角色 | IP | 操作系统 | MySQL版本 | 端口 |
---|---|---|---|---|
master | 127.0.0.1 | Ubuntu 14.04 | 5.7.17 | 3306 |
slave | 127.0.0.1 | Ubuntu 14.04 | 5.7.17 | 3307 |
slave | 127.0.0.1 | Ubuntu 14.04 | 5.7.17 | 3308 |
二、登陆master服务器,设置复制的账户,并授予REPLICATION SLAVE权限
mysqld_multi --defaults-extra-file=/etc/my.cnf start 1-3
mysql -uroot -P 3306 -h 127.0.0.1
mysql> grant replication slave on *.* to 'hailin'@'*' identified by '123456';
三、拷贝数据
(假如是你完全新安装mysql主从服务器,这个一步就不需要。因为新安装的master和slave有相同的数据。当前实验为完全新安装。)
关停Master服务器,将Master中的数据拷贝到从服务器中,使得Master和slave中的数据同步,并且确保在全部设置操作结束前,禁止在Master和slave服务器中进行写操作,使得两数据库中的数据一定要相同!
四、配置master
接下来对master进行配置,编辑/etc/my.cnf。包括打开二进制日志,指定唯一的servr ID。
[mysqld1]
port=3306
basedir=/usr/local/mysql
datadir=/home/MysqlData1
socket=/home/MysqlData1/mysql1.sock
user=mysql
log-bin = /home/MysqlData1/log-bin
max_binlog_size=500M
server-id = 1
#skip-grant-tables
重启master并登录,运行SHOW MASTER STATUS,输出如下:
四、配置slave
slave的配置与master类似,你同样需要关闭slave的MySQL。并编辑/etc/my.cnf。
[mysqld2]
port=3307
basedir=/usr/local/mysql
datadir=/home/MysqlData2
socket=/home/MysqlData2/mysql2.sock
user=mysql
server-id = 2
relay-log=/home/MysqlData2/relay-log
#skip-grant-tables
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们没有开启二进制日志。relay_log配置中继日志。
接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。启动slave:
mysqld_multi --defaults-extra-file=/etc/my.cnf start 2
登陆slave后执行:
mysql> stop slave;
mysql> CHANGE MASTER TO
-> MASTER_HOST='127.0.0.1',
-> MASTER_USER='hailin',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='bin-log.000002',
-> MASTER_LOG_POS=463;
mysql> start slave;
运行SHOW SLAVE STATUS查看输出结果:
在这里主要是看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。
你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:
在master上输入show processlist\G;