MySQL 双向备份的实现方法
MySQL双向备份也被称为主主备份,即两个MySQL服务都是Master,其中任意一个服务又是另一个服务的Slave。
准备
服务器
MySQL服务器 | 版本 | IP地址 |
---|---|---|
masterA | 5.6.41 | 192.168.1.201 |
masterB | 5.6.41 | 192.168.1.202 |
注:备份的MySQL服务器版本尽量保持一致,不同的版本可能二进制日志格式不兼容。
具体操作
注意
操作过程中注意两边数据的一致!!!
masterA配置
my.cnf
[mysqld] #服务器唯一标识 server-id=1 #二进制日志文件名 log-bin=mysql-bin #需要备份的数据库,多个数据库用,分隔 binlog-do-db=piumnl #需要复制的数据库,多个数据库用,分隔 replicate-do-db=piumnl #中继日志文件名 relay_log=mysqld-relay-bin #手动启动同步服务,避免突然宕机导致的数据日志不同步 skip-slave-start=ON #互为主从需要加入这一行 log-slave-updates=ON #禁用符号链接,防止安全风险,可不加 symbolic-links=0 #可不加 #resolve-[Warning]SlaveSQL:Ifacrashhappensthisconfigurationdoesnotguaranteethattherelayloginfowillbeconsistent,Error_code:0 master-info-repository=table relay-log-info-repository=table relay-log-recovery=1 #可不加 #禁用dns解析,会使授权时使用的域名无效 skip-host-cache skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
masterB配置
my.cnf
#不再解释各个配置项 [mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=piumnl replicate-do-db=piumnl relay_log=mysql-relay-bin skip-slave-start=ON log-slave-updates=ON symbolic-links=0 #resolve-[Warning]SlaveSQL:Ifacrashhappensthisconfigurationdoesnotguaranteethattherelayloginfowillbeconsistent,Error_code:0 master-info-repository=table relay-log-info-repository=table relay-log-recovery=1 skip-host-cache skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
创建备份用户
masterA&masterB都要创建备份用户:
createuser'rep'@'%'identifiedby'rep';#创建一个账户 grantreplicationslaveon*.*to'rep'@'%';#授予该账户对任意数据库任意表的主从备份权限
备注:
- Linux下MySQL对root@%用户关闭了grant_priv权限,所以如果是远程登录会出现授权失败的情况
- 此处备份用户帐号和密码可不一致,此处为了简化操作使用一样的帐号和密码
重启服务器
重启服务器
开启备份
masterA
查看masterB状态
showmasterstatus\G; #此处需要关注File和Position值
开启备份
stopslave;
#master_log_file就是第一步操作的File值 #master_log_pos就是第一步操作的Position值 changemastertomaster_host=,master_user= ,master_port= ,master_password= ,master_log_file='mysql-log.000003',master_log_pos=154; startslave;
查看结果
showslavestatus\G; #查看最重要的两项,两个都必须为Yes,有一个为No都要去查看错误日志文件,看看什么地方存在问题 #Slave_IO_Running:Yes #Slave_SQL_Running:Yes
masterB
反向重复masterA的操作
测试
分别在masterA和masterB中插入数据,并查看另一台服务器是否及时出现预期的数据
问题
MySQLSlaveFailedtoOpentheRelayLog
这应该是中继日志出现问题,可尝试如下操作
stopslave; flushlogs; startslave;
Gotfatalerror1236frommasterwhenreadingdatafrombinarylog
从主库中拉取日志时,发现主库的mysql_bin.index文件中的第一个文件不存在。
#进行如下操作重置 #如果二进制日志或中继日志有其他作用,请勿进行如下操作 resetmaster; resetslave; flushlogs;
使用 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
进行插入、更新和删除操作,将不会进行备份(这是巨坑)!!!
热门推荐