MySQL主从复制原理
复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。
从上层来看,复制分成三步:
- Master 主库在事务提交时,会把数据变更作为时间 Events 记录在二进制日志文件 Binlog中。
- 主库推送二进制日志文件 Binlog 中的日志事件到从库的中继日志 Relay Log 。
- slave重做中继日志中的事件,将改变反映它自己的数据。
MySQL 复制的优点:
- 主库出现问题,可以快速切换到从库提供服务。
- 可以在从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力。
- 可以在从库中执行备份,以避免备份期间影响主库的服务。
主机ip 172.16.208.211
从机ip 172.16.208.212
1 修改主机mysql配置文件 vi /etc/my.cnf
添加以下配置
[mysqld]
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=blog
#设置logbin格式
binlog_format=STATEMENT
2 修改从机mysql配置文件 vi /etc/my.cnf
添加以下配置
[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3 重启mysql服务,主机,从机都要重启
systemctl restart mysqld
4 配置主机
# 创建同步数据的账户,并且进行授权操作
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'ProphetClouds.com2017';# 刷新权限
flush privileges;# 查询master的状态,记录下File和Position的值,执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
show master status;
5 配置从机
# 指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。
CHANGE MASTER TO MASTER_HOST='172.16.208.211',
MASTER_USER='slave',
MASTER_PASSWORD='ProphetClouds.com2017',
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=982;# 启动同步
START SLAVE;# 停止同步
STOP SLAVE;# 查看同步状态,出现下面的截图,就成功了
SHOW SLAVE STATUS;
6 开始测试,注意上面的步骤都完成后,才开始创建库,创建表,增删改查等,可以发现已经可以实现同步了
注意:1 如果已经有数据库,并有表和表记录的话,自行baidu解决,后期我可能也会研究研究
2 不要在从机上做增删改等操作,这里不是 双机热备,操作主机就行了
如果操作失败,可能是mysql的server_uuid相同导致,以下操作在从机上操作
参考博文 https://blog.csdn.net/dsl59741/article/details/107361800
1 登陆到mysql客户端,先停止复制
# 停止同步
STOP SLAVE;
2 停止 从库的Mysql服务,删除掉auto.cnf文件,再开启从库Mysql服务
[root@localhost ~]# systemctl stop mysqld #关闭mysql[root@localhost ~]# rm -rf /var/lib/mysql/auto.cnf #删除从库auto.cnf文件[root@localhost ~]# systemctl start mysqld #启动从库mysqld服务
3 再重新运行上面的步骤4和步骤5