mysql 报错1300_pt-osc 变更时遇到 “MySQL error 1300” 报错问题解决

目的

线上一张表的字段长度变更

`sGuid` varchar(255) DEFAULT NULL COMMENT ‘sGuid‘

=》

`sGuid` varchar(512) DEFAULT NULL COMMENT ‘sGuid‘

方法

pt-online-schema-change --user=xxxx--password=xxxxxx --host=127.0.0.1 --port=3306--charset=utf8mb4 D=db_main,t=tb_main--alter "modify sGuid varchar(512) DEFAULT NULL COMMENT ‘sGuid‘"--no-check-alter --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none--critical-load="Threads_running=50" --max-load="Threads_running=100"--print --execute

执行时报错:

2019-07-25T11:03:00 Error copying rows from `db_main`.`tb_main` to `db_main`.`_tb_main_new`: 2019-07-25T11:03:00 Copying rows caused a MySQL error 1300:

Level: Warning

Code:1300Message: Invalid utf8 characterstring: ‘CE‘

pt-online-schema-change could emit utf8 errors for binary PK:

Workaround specify latin1 charset for pt-o-s-c:

pt-online-schema-change --execute --charset=latin1 --chunk-size 2 --alter ‘engine=innodb‘ D=test,t=brokenutf8alter

pt-o-s-c still processes the table correctly (utf8mb4 symbols stored in additional varchar field are valid after pt-o-s-c run). 4-byte changes also processed correctly by pt-o-s-c triggers.

Possible fix: use binary or hex literals instead of ‘?‘ substitution.

解决

用 latin1 字符集代替 utf8

pt-online-schema-change --user=xxxx--password=xxxxxx --host=127.0.0.1 --port=3306--charset=latin1 D=db_main,t=tb_main--alter "modify sGuid varchar(512) DEFAULT NULL COMMENT ‘sGuid‘"--no-check-alter --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none--critical-load="Threads_running=50" --max-load="Threads_running=100"--print --execute

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值