Mysql主从复制
主从机制实现原理
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); (2) slave将master的binary log events拷贝到它的中继日志(relay log); (3) slave重做中继日志中的事件,将改变反映它自己的数据。
主库配置
修改[mysqld]
[mysqld] server-id=1 -- 给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号 log-bin=mysql-bin -- 启动二进制日志名称
查看日志,File是二进制日志文件名,Position 是日志开始的位置。这两个参数后面要用的到
SHOW MASTER STATUS; show master status;
重启mysql服务
主库中添加账号使从库使用
-- 设置赋值权限 grant replication slave on *.* to 'chaoge'@'192.168.178.130'; --检查授权账号的权限 show grants for chaoge@'192.168.178.130';
从库配置
[mysqld] server-id=3
重启数据库
systemctl restart mariadb 或者 systemctl restart mysql
检查Slava从数据库中的参数
show variables like 'log_bin'; --OFF show variables like 'server_id';
配置赋值参数, Slave从数据库连接Master主库的配置
change master to master_host='192.168.178.129', -- 主库ip master_user='chaoge', -- 主库用户 master_password='redhat', -- 主库密码 master_log_file='mysql-bin.000001', -- 上面主库查出来的那个File master_log_pos=575; -- -- 上面主库查出来的那个Position
启动从库同步开关
start slave;
查看复制状态
show slave status\G;
检查Slave_IO_Running和Slave_SQL_Running两个参数, 都是yes说明可以了
错误排查
按照顺序一般是遇不到问题的, 我自己在测试中遇到了一个问题是主库防火墙没有关, Slave_IO_Running总显示Connecting