数据库主从复制
原理
-
1.主库数据更新写入会写入二进制日志文件binlog
-
2.从库的I/O线程读取主库的二进制日志并将数据变更写入自己的中继日志Relay log
-
3.从库的sql线程读取中继日志Relay log
-
4.从库重做中继日志中的事件实现主从同步
准备工作
-
准备两台centos7虚拟机,192.168.129.66(主机),192.168.129.99(从机)
-
安装好MySQL,并关闭两台机器的防火墙
主机配置
-
1.修改配置文件/etc/my.cnf
#开始二进制日志 log-bin=mysql-bin #mysql服务id,保证整个集群环境中唯一,默认为1 server-id=1
-
2.重启MySQL服务器
systemctl restart mysqld
-
3.登录MySQL,创建远程连接的账号,并授予主从复制权限
#创建itcase用户,并设置密码,该用户能要在任意主机上连接mysql服务 create user 'itcase'@'%' identified with mysql_native_password by 'Nebula@123'; #为用户分配权限 grant replication slave on *.* to 'itcase'@'%';
-
4.通过指令查看二进制日志目录
show master status\G; 记下file和position的信息
-
主机配置完成
从机配置
-
1.修改配置文件/etc/my.cnf
#开启中继日志 relay-log=mysql-relay #MySQL服务id号,和主机不一样就行了 server-id=2
-
2.重启MySQL服务器
systemctl restart mysqld
-
3.登录mysql,设置主库配置
change master to master_host = '192.168.129.66', #主机的ip地址 master_user = 'itcase', #主机设置的用户 master_password = 'Nebula@123', #主机设置用户的密码 master_log_file = 'binlog.000005', #主机使用show master status\G,后file的内容 master_log_pos = 844; #主机使用show master status\G,后position的内容
-
4.启动slave服务,并查看状态
start slave; show slave status\G;
-
常见报错
ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first. 错误3021 (HY000):这个操作不能在一个运行的io线程上执行;首先运行停止IO_THREAD通道"。 需要关闭从机的slave stop slave;