故障案例--binlog_format不为row模式下关于时区设置的一个坑
2016-07-21 18:21
447 查看
故障现象
有个需求从北美的机房A的DB1为主,北美机房B的DB2为从,建立主从关系。A机房为UTC时区,B机房为PDT时区,结果由于system_time_zone由DB所在的linux时区决定,而这个不可擅自更改,采用了修改time_zone的方式来迂回解决,但是发现主从的时间数据依旧不一致。复现方法
============这是主库的测试============mysql> show variables like '%zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
mysql> use test
Database changed
mysql> create table test(id int,curren_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(123,'2016-06-22 13:00:00');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+---------------------+
| id | curren_date |
+------+---------------------+
| 123 | 2016-06-22 13:00:00 |
+------+---------------------+
1 row in set (0.00 sec)
mysql> insert into test(id) values(321);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+---------------------+
| id | curren_date |
+------+---------------------+
| 123 | 2016-06-22 13:00:00 |
| 321 | 2016-06-22 09:17:47 |
+------+---------------------+
2 rows in set (0.00 sec)
姜建剑 17:19:04
============这是从库==============
mysql> select * from test;
+------+---------------------+
| id | curren_date |
+------+---------------------+
| 123 | 2016-06-22 20:00:00 |
+------+---------------------+
1 row in set (0.00 sec)
mysql> select * from test;
+------+---------------------+
| id | curren_date |
+------+---------------------+
| 123 | 2016-06-22 20:00:00 |
| 321 | 2016-06-22 09:17:47 |
+------+---------------------+
2 rows in set (0.00 sec)
mysql> show variables like '%zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | PDT |
| time_zone | +00:00 |
+------------------+--------+
2 rows in set (0.00 sec)
原因分析
当插入的数值为时间戳时,两边的数据是一致的;当插入的数据为时间字符串时,两边的数据差了7个小时,查看binlog后发现是在binlog_format为mixed下时,在从库上插入这个时间字符串时,会根据这个时间字符串做一个时区转换。解决措施
可以的话,保证两边的system_time_zone一致,这样就不用调整time_zone了,数据也可以为完全一致;不行的话,将binlog_format改为row
相关文章推荐
- Poj 3615 Cow Hurdles【Floyd】
- RxJava 详解
- 【宽搜】XMU 1039 Treausure
- MySQL 请选择合适的列! 转载(http://www.cnblogs.com/baochuan/archive/2012/05/23/2513224.html)
- CSS3新增基础属性
- Mysql与Oracle区别
- 第16章 例行性工作(crontab)
- Volley请求简单登录API
- androidStudio没有httpclient的解决办法
- php模拟登陆
- StackExchange.Redis
- HDOJ 1164Eddy's research I(质因数分解)
- 图文详解 Git 的使用场景
- spark wordcount 实例
- new、delete与malloc、free
- Android View 点击事件的分发机制
- Java 多线程:Lock接口(接口方法分析,ReentrantLock,ReadWriteLock 3ff8
- ios PJSIP(PJSUA)
- CodeForces 604A Uncowed Forces
- Leetcode 342. Power of Four (Easy) (cpp)