您的位置:首页 > 数据库 > MySQL

Ubuntu 14.04下 MySQL实现单机主从复制

2017-04-06 16:15 260 查看

Ubuntu 14.04下 MySQL 5.7.17实现单机主从复制

一、系统环境

Ubuntu 14.04 64位

MySQL 5.7.17 64位 源码编译安装

已实现mysqld_multi设定好的三个mysql服务,见教程http://blog.csdn.net/uphailin/article/details/69389207

在Ubuntu系统中使用mysqld_multi单机实现主从复制的配置如下表:

角色IP操作系统MySQL版本端口
master127.0.0.1Ubuntu 14.045.7.173306
slave127.0.0.1Ubuntu 14.045.7.173307
slave127.0.0.1Ubuntu 14.045.7.173308

二、登陆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;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: