故障案例--binlog_format不为row模式下关于时区设置的一个坑
来源:互联网 发布:淘宝达人平台网址 编辑:程序博客网 时间:2024/05/29 08:36
故障现象
有个需求从北美的机房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
- 故障案例--binlog_format不为row模式下关于时区设置的一个坑
- mysqlbinlog 查看具体的sql语句 (binlog_format=row模式)
- ubuntu 下关于PCAP_FRAMES设置的原文
- Linux下关于网络设置的文件
- Ubuntu下关于KDE鼠标高级设置中两个不太容易搞明白的概念
- Linux 下关于文本文件操作使用的案例
- iOS 下关于 MD5 的那个坑
- 故障案例--mongodb副本集write concern为majority的一个坑
- Redhat Linux系统下关于磁盘配额的设置
- django 1.3下关于静态文件staticfiles的设置
- codeblocks工程下关于结构体的一个问题
- 故障案例--mysql5.5分区表的一个坑
- 安卓NoTitleBar的style下关于switch的坑
- 一个load过高的故障排查案例
- 故障案例--在线ddl的一个bug
- binlog_format为statement时的同步问题
- win7下关于局域网的打印机 RPC 不可用的解决办法
- MySQL binlog_format (Mixed,Statement,Row)
- Android项目里集成Cordova详解
- android byte字节数组转换十六进制字符串
- CodeForces 612B HDD is Outdated Technology
- Java反射:类名.class、class.forName()、对象.getClass区别 详解
- Fragment和Activity生命周期以及横竖屏切换对生命周期的影响
- 故障案例--binlog_format不为row模式下关于时区设置的一个坑
- java爬虫
- iOS 客户端的本地缓存处理
- 阻塞与非阻塞,同步与异步
- Android Picasso的基本使用
- 检测字符串包含字符串
- 史上最全的贝塞尔曲线(Bezier)全解(三):贝塞尔曲线实现满屏爱心
- 【HDU】5726 GCD(2016 Multi-University)
- Android View 点击事件的分发机制