实验环境: Centos7 虚拟机两台, Mysql5.7,
1.安装Mysql: 两台机器都安装。(有必要的话关闭防火墙)
2.主节点配置:
1) 创建用户:
create user '用户名'@'192.168.1.%' identified by '密码';
2)分配权限:
grant replication slave on *.* to '用户名'@'192.168.1.%' identified by '密码';
3)开启binlog日志:
查看是否开启: show variables like 'log_bin'; (默认关闭)
编辑/etc/my.cnf 添加如下配置:
server-id=1 # 节点名 多节点不能重复
log-bin=/var/lib/mysql/mysql-bin # 开启bin_log 指定文件名
重启: systemctl restart mysqld
会生成mysql-bin.000001文件和mysql-bin.index文件
连接mysql
查看binlog日志: show binlog events; (show binlog events in 'mysql-bin.000001';)
刷新日志文件,产生新的日志文件: flush logs;
查看当前使用的日志文件: show master status;
查看所有日志文件: show master logs;
清空所有日志文件(谨慎操作): reset master;
通过日志还原数据:
mysqlbinlog /var/lib/mysql/mysql-bin.000001 | mysql -uroot -p
mysqlbinlog /var/lib/mysql/mysql-bin.000001 --start-position 4 --stop-position 1626 | mysql -uroot -p
(position可以从show binlog evnents获取)
3.从节点配置:
1)编辑/etc/my.cnf 添加如下配置:
server-id=2 # 节点之间不能重复
relay-log=/var/lib/mysql/relay-bin # 从节点日志
2)修改mysql server-uuid:
编辑 /var/lib/mysql/auto.cnf (保证每个节点都不一样)
3)重启从节点
4)指定主节点ip,端口,用户...
登录mysql指定master:
change master to master_host='主节点ip',master_port=3306,master_user='用户名',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=0;
5)重启从节点
查看从节点状态: show slave status;
Slave_IO_Running和Slave_SQL_Running两个字段都是Yes表示正常
注: 从节点通过binlog日志文件同步数据,如果binlog日志中没有的操作将不能同步。
4.测试
在主节点上创建数据库,创建表,插入数据,再到从节点上查看是否同步过来。