Master -server配置
1.关闭防火墙
systemctl stop firewalld.service
2.停掉mysql
systemctl stop mysqld.service
3.开启binlog
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
4.启动mysql
systemctl start mysqld.service
5.登录mysql,并创建用户
mysql -uroot -p
CREATE USER 'slave'@'192.168.11.128' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.11.128';
或者
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Slave-server配置
1.停掉mysql
systemctl stop mysqld.service
2.修改my.cnf
vim /etc/my.cnf
[mysqld]
server-id=2
3.启动mysql
systemctl start mysqld.service
4.登录mysql
mysql -uroot -p
5.在Master中执行,查询Master状态
mysql> show master status
6.Slave中设置Master信息
change master to master_host='192.168.11.128', master_user='slave', master_password='slave', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=155, master_connect_retry=30;
注意:如果该线程在运行,停掉slave io线程
STOP SLAVE IO_THREAD FOR CHANNEL '';
说明:
master_log_file='mysql-bin.000001' #指定Slave从哪个日志文件开始读复制数据(Master上执行命令的结果的File字段)
master_log_pos=1797 # 从哪个POSITION号开始读(Master上执行命令的结果的Position字段)
master_user='slave' # 用于同步数据的用户(在Master中授权的用户)
master_password='123456' # 同步数据用户的密码
master_host='192.168.11.128' # Master的IP地址
7.查看主从同步状态
在Slave中执行命令
mysql> show slave statusG;
可看到Slave_IO_State为空, Slave_IO_Running和Slave_SQL_Running是No,表明Slave还没有开始复制过程。相反Slave_IO_Running和Slave_SQL_Running是Yes表明已经开始工作了
8.开启主从同步
在Slave中执行命令
# 开启同步
start slave;
9.检查主从复制通信状态
mysql> show slave statusG;
Slave_IO_State #从站的当前状态
Slave_IO_Running: Yes #读取主程序二进制日志的I/O线程是否正在运行
Slave_SQL_Running: Yes #执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
Seconds_Behind_Master #是否为0,0就是已经同步了
必须都是 Yes
如果不是原因主要有以下 4 个方面:
1、网络不通
2、密码不对
3、MASTER_LOG_POS 不对 ps
4、mysql 的 auto.cnf server-uuid 一样(可能你是复制的mysql)
vim /var/lib/mysql/auto.cnf
[auto]
server-uuid=6b831bf3-8ae7-11e7-a178-000c29cb5cbc # 按照这个16进制格式,修改server-uuid,重启mysql即可
10. 测试
(1.)在 Master-Server 创建测试库
mysql> CREATE DATABASE `replication_wwww.ymq.io`;
mysql> use `replication_wwww.ymq.io`;
mysql> CREATE TABLE `sync_test` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
(2.)在 Slave-Server 查看是否同步过来
mysql> show databases;
mysql> use replication_wwww.ymq.io
mysql> show tables;
其他常用命令
查看主服务器的运行状态
mysql> show master status;
查看从服务器主机列表
mysql> show slave hosts;
获取binlog文件列表
mysql> show binary logs;
只查看第一个binlog文件的内容
mysql> mysql> show binlog events;
查看指定binlog文件的内容
mysql> mysql> show binlog events in 'mysql-bin.000001';
启动从库复制线程
mysql> START SLAVE;
停止从库复制线程
mysql> STOP SLAVE;