细节
-
错误
-
状态: Done">完成
-
低
-
解决方法: 固定
-
没有一个
-
没有一个
描述
**在Launchpad报告皮姆·范德瓦尔最后更新23-08-2017 06:48:06
pt-table-sync 2.2.12
雷竞技下载官网Percona Server 5.5.24
Pt-table-sync不会从它正在使用的表定义中获取字符集,而是使用客户端指定的字符集。这实际上会导致在主服务器上将数据修改为错误的字符集。例如:
1.在主表上创建一个utf8表
创建表t1 (a int非空主键,b varchar(200))字符集=utf8;
2.插入utf8数据:
Insert into t1 (a,b) values (1, ");
3.仅删除从服务器上的数据(sql_log_bin仅用于master-master):
设置sql_log_bin = 0;Delete from t1 where a=1;
4.在slave上运行pt-table-sync,不指定字符集:
pt-table-sync——print——sync-to-master h=localhost,D=test,t=t1
替换成' test '。' t1 ' (' a ', ' b ') VALUES ('1', '??') /雷竞技下载官网Percona-toolkit src_db:test src_tbl:t1 src_dsn
=test,P=3306,h=test-host-1,t=t1 dst_db:test dst_tbl:t1 dst_dsn
=test,h=localhost,t=t1 lock:1 transaction:1 changing_src:1 replication:0 directional:0 pid:15724 user:root host:test-host-2/;
这将覆盖主服务器上的数据。指定——charset=utf8可以修复这个表的问题:
pt-table-sync——print——sync-to-master h=localhost,D=test,t=t1——charset=utf8
替换成' test '。' t1 ' (' a ', ' b ') VALUES ('1', ") /雷竞技下载官网percona-toolkit src_db:test src_tbl:t1 src_dsn:A=utf8,D=test,P=3306,h=test-host-1,t=t1 dst_db:test dst_tbl:t1 dst_dsn:A=utf8,D=test,h=localhost,t=t1 lock:1 transaction:1 changing_src:1 replicate:0 directional:0 pid:16095 user:root host:test-host-2/;
不幸的是,这迫使该命令在所有表上使用相同的字符集,这使得在具有多个字符集的服务器上运行更加困难。理想情况下,pt-table-sync会找出有问题的表的字符集,并使用正确的字符集生成语句。为了允许输出包含多个字符集,非默认字符集字符串的字符集应该像这样指定:_utf8'string',尽管我可以看到这对于具有多个字符集的表以及当输出被捕获到文件中时是多么困难。