MySQL双向备份也被称为主主备份,即两个MySQL服务都是大师,其中任意一个服务又是另一个服务的奴隶。
服务器
MySQL服务器 版本 IP地址 masterA 5.6.41 192.168.1.201 masterB 5.6.41 192.168.1.202
注:备份的MySQL服务器版本尽量保持一致,不同的版本可能二进制日志格式不兼容。
<强>注意强>
操作过程中注意两边数据的一致! ! !
<强> masterA配置强>
my . cnf中所做
(mysqld) #服务器唯一标识 服务器id=1 #二进制日志文件名 log-bin=mysql-bin #需要备份的数据库,多个数据库用,分隔 binlog-do-db=piumnl #需要复制的数据库,多个数据库用,分隔 replicate-do-db=piumnl #中继日志文件名 relay_log=mysqld-relay-bin #手动启动同步服务,避免突然宕机导致的数据日志不同步 skip-slave-start=对 #互为主从需要加入这一行 log-slave-updates=对 #禁用符号链接,防止安全风险,可不加 符号链接=0 #可不加 #解决-[警告]奴隶SQL:如果崩溃发生这种配置不保证继电器日志信息一致,Error_code: 0 master-info-repository=表 relay-log-info-repository=表 relay-log-recovery=1 #可不加 #禁用dns解析,会使授权时使用的域名无效 skip-host-cache skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION STRICT_TRANS_TABLES
<强> masterB配置强>
my . cnf中所做
#不再解释各个配置项 (mysqld) 服务器id=2 log-bin=mysql-bin binlog-do-db=piumnl replicate-do-db=piumnl relay_log=mysql-relay-bin skip-slave-start=对 log-slave-updates=对 符号链接=0 #解决-[警告]奴隶SQL:如果崩溃发生这种配置不保证继电器日志信息一致,Error_code: 0 master-info-repository=表 relay-log-info-repository=表 relay-log-recovery=1 skip-host-cache skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION STRICT_TRANS_TABLES >之前<>强创建备份用户强>
masterA,masterB都要创建备份用户:
创建用户“代表”@“%”被“代表”;#创建一个账户 格兰特复制奴隶> 显示主状态\ G; #此处需要关注文件和位置值 >之前开启备份
停止奴隶;
# master_log_file就是第一步操作的文件值 # master_log_pos就是第一步操作的位置值 修改主master_host=& lt; master_hostname>, master_user=& lt; rep_username>, master_port=& lt; master_port>, master_password=& lt; rep_password> mysql-log master_log_file=薄?00003年,master_log_pos=154; 开始奴隶;查看结果
显示奴隶状态\ G; #查看最重要的两项,两个都必须为是的,有一个为不都要去查看错误日志文件,看看什么地方存在问题 # Slave_IO_Running:是的 # Slave_SQL_Running:是的masterB
反向重复masterA的操作
分别在masterA和masterB中插入数据,并查看另一台服务器是否及时出现预期的数据
<强> MySQL奴隶未能打开继电器日志强>
这应该是中继日志出现问题,可尝试如下操作
停止奴隶; 刷新日志; 开始奴隶;<强>有致命错误1236年从主读取数据从二进制日志强>
从主库中拉取日志时,发现主库的mysql_bin。索引文件中的第一个文件不存在。
#进行如下操作重置 #如果二进制日志或中继日志有其他作用,请勿进行如下操作 重置的主人; 重置的奴隶; 刷新日志;<强> & lt; database>灵活;table> 强>
使用& lt; database>灵活;table>进行插入,更新和删除操作,将不会进行备份(这是巨坑)! ! !
MySQL双向备份的实现方法