今天接到一需求,说要在国际间为MySQL建立复制。这其实没什么的,网络环境再差,MySQL也是可以应对的。但偏偏出现时区问题的错误
今天接到一需求,说要在国际间为MySQL建立复制。这其实没什么的,网络环境再差,MySQL也是可以应对的。但偏偏出现时区问题的错误!
错误如下:
[Warning] Slave I/O: Get master clock failed with error: Lost connection to MySQL server during query, Error_code: 2
[Warning] Slave I/O: Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again, log '1.000001' at position 48920, Error_code: 1597
slave 无法获得master的clock,MySQL time_zone 变量默认等于=SYSTEM 即采用系统的时区。修改时区方式:set global time_zone='+00:00' 或者 set global time_zone='-11:00';单纯的修改DB的时区,可以能会造成本地程序混乱,,最终决定修改系统的时区。这个问题交给了我们的运维(crontab的时区也要搞定),后来重启DB搞定
在这里简单总结下建立复制注意事项:
1、server_id 要唯一
2、binlog 和 relay_log 名字要自定义。不能采用 hostname.log(采用修改系统hostname时可能造成数据库无法启动)
3、数据库时区要一致
4、对专门复制用的用户 要在master和slave上同时建立账号(方便故障切换,为以后自动化做准备)
5、对于在slave端进行数据库过滤的时候,建议使用:replicate__wild_do_table(这样对于statement 模式的复制 不用考虑是否使用use 语句的影响。可参考: