linux之mysql57二进制日志主从复制
1 两台mysql 一台主一台从
2 主服务器配置
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
sync-binlog=1 写入操作同步 默认为 1
innodb_flush_log_at_trx_commit=1 默认为1
server-id其他机器不能重复,log-bin二进制日志是将更改主服务器复制到从服务器的基础
sync-binlog默认1, innodb_flush_log_at_trx_commit=1默认1
binlog-ignore-db=performance_schema,sys 不同步那些库
binlog-do-db=yumeko 同步那些库
systemctl restart mysqld 重启mysql服务
2 在主创建用于复制的用户
create user 'root'@'%.example.com' identified by 'password'; 创建用于复制的用户
grant replication slave on *.* to 'root'@'%' identified by 'Yumeko213@'; 赋予权限
flush privileges; 刷新权限
flush tables with read lock ; 它会阻止 表的COMMIT操作 InnoDB。
unlock tables; 释放锁
show master status; 查看 master 状态 在从服务器设置关联时候用到 master_log_file 和 master_log_pos
3 在从服务器配置
[mysqld]
vim etc/my.cnf
server-id=2
relay_log=mysql-relay-bin
read_only=1 不是必须 可动态设置
relay_log中继日志从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器
show variables like '%relay%';查看relay的所有相关参数
read_only只读 一般在从服务器 动态设置 SET @@GLOBAL.read_only = ON;
systemctl restart mysqld 重启服务器
show slave status; 查看 slave 状态 开始为空
stop slave; 关闭从库
设置关联 master_log_file 和 master_log_pos 是 主库 show master status中的 file 和 Position
change master to master_host='192.168.106.132',master_port=3306,master_user='root',master_password='Yumeko213@',master_log_file='mysql-bin.000001',master_log_pos=154;
start slave; 开启从库
show slave status \G 查看 slave 状态
4 注意事项
(1)Slave_IO_Running: NO
Fatal error: The slave I
/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
原因是克隆的问题在从库
find -name auto.cnf 查询命令找此auto.cnf修改uuid即可:
service mysqld restart 重新启动mysql
stop slave;
start slave;
show slave status \G;
(2)Slave_SQL_Running: No 在从库
stop slave;
set global SQL_SLAVE_SKIP_COUNTER=1;
start slave;
show slave status \G;
5 多从库是 先备份数据 在 做从库
mysqldump --help
mysqldump --all-databases > mysql_backup_all.sql