快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → pt-online-schema-change连踩三个坑!

pt-online-schema-change连踩三个坑!

时间:2022-09-19 07:50:20人气:作者:快盘下载我要评论

//

pt-online-schema-change错误排查一例

//

今天在线上遇到一个PT工具相关的问题,问题是pt-osc这个在线改表工具报出来的。简单记录了一下排查的过程。

01

问题描述

线上的pt工具版本是3.1.0版本的,改表过程中的PT命令如下:

pt-online-schema-change --alter  "  ADD COLUMN xxx "  
--charset utf8 
--chunk-time 0.5 
--critical-load Threads_connected:1200,Threads_running:100 
--max-load Threads_connected:1200,Threads_running:100 
--lock-wait-timeout 200
--check-replication-filters 
--check-interval 5 
--alter-foreign-keys-method=drop_swap 
--execute --max-lag 3 
--check-slave-lag h=10.69.16.129  
--user=automan_common --password=xxxxx 
--host=10.xx.xx.xxx
--port=5602 D=db_name,t=table_name

报错如下:

Unknown option: lock-wait-timeout
Usage: pt-online-schema-change [OPTIONS] DSN

Errors in command-line arguments:
  * Error parsing options
  * Specify only one DSN on the command line
  * The DSN must specify a database (D) and a table (t)

pt-online-schema-change alters a table's structure without blocking reads or
writes.  Specify the database and table in the DSN.  Do not use this tool before
reading its documentation and checking your backups carefully.  For more
details, please use the --help option, or try 'pt-online-schema-change' for complete
documentation.

看这个报错信息,可以看到是pt工具无法解析lock-wait-timeout这个参数的值了。查看了一下官方文档:

https://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html

这个是2.1版本的官方文档,里面针对lock-wait-time有介绍,它是一个内置的参数,介绍如下:

--lock-wait-timeout

type: int; default: 1

Set the session value of innodb_lock_wait_timeout. This option helps guard against
 long lock waits if the data-copy queries become slow for some reason. Setting this 
option dynamically requires the InnoDB plugin, so this works only on newer InnoDB and
 mysql versions. If the setting’s current value is greater than the specified value, 
and the tool cannot set the value as desired, then it prints a warning. If the tool 
cannot set the value but the current value is less than or equal to the desired 
value, there is no error.

它指代的是pt工具在操作过程中,MySQL中的锁等待时间。

在pt 3.0版本以及更新的版本中,这个变量不复存在了,如果想要设置这个参数,可以通过一个叫--set-var的参数来设置,这个参数在pt 3.0以上的说明文档中有介绍:

https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html

--set-vars
type: Array

Set the MySQL variables in this comma-separated list of variable=value pairs.

By default, the tool sets:

wait_timeout=10000
innodb_lock_wait_timeout=1
lock_wait_timeout=60

Variables specified on the command line override these defaults. For example, specifying --set-vars wait_timeout=500 overrides the default value of 10000.

这两个版本设置该参数的方法分别如下:

pt2.x版本:

--lock-wait-timeout 60

pt3.x版本:

--set-var lock_wait_timeout=60

到这里,将这个lock_wait_timeout的参数写法进行修改,这个问题就算解决了。

上线之后,发现了一个新的问题,且看。

02

PT3.1版本的外键问题

在使用--set-vars设置了lock-wait-timeout参数之后,利用pt-osc执行命令的时候,又发现了一个新的问题,问题如下:

error in MySQL that makes the server to die when trying to rename a table with FKs. 
See https://bugs.mysql.com/bug.php?id=96145
Since pt-online-schema change needs to rename the old <-> new tables as the final step, 
and the requested table has FKs, it cannot be executed under the current MySQL version
'

从这个描述中,可以看到,问题的反馈是这个要修改的目标表拥有外键,但是实际上,这个表的定义SQL中,没有外键,所以我怀疑是一个bug,在官方网站上找了下,果然,找到了bug的地址:

https://jira.percona.com/browse/PT-1782

在pt 3.1.0的版本,在特定MariaDB10.2和MySQL 8版本下,确实存在这个bug,就是表没有外键的情况下也会报外键的错误,解决的方案,从大家的反馈中可以看到,是通过pt版本降级,使用pt3.0.x版本来解决这个问题。

pt-online-schema-change连踩三个坑!

但是版本降级,好像又不太合适,最新的pt工具已经到了3.3版本。所以我尝试了下最新的版本,看看这个问题是否得到了解决,下载了一个pt 3.3.0的版本。

果然,问题得到了解决,不报外键的错误了。

但是...新问题又来了。。。

03

3.3版本的新问题---连接失败

pt-osc的3.3版本出现了一个新问题,就是pt工具的账号密码都正确配置的情况下,报错账号密码错误,无法连接MySQL,提示如下报错:

b"Cannot connect to MySQL: DBI connect('finance_guarantee;host=xxx.xxx.xxx.xxx;
charset=utf8;mysql_read_default_group=client','automan_common',...) failed: 
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server at pt-online-schema-change line 2345.
"

经过一番排查,发现了新的bug jira地址:

https://jira.percona.com/browse/PT-1911?jql=project%20%3D%20PT%20AND%20component%20%3D%20pt-online-schema-change

bug描述中显示,3.3版本的pt工具存在下面的问题:

1、如果端口不是3306:

则不能通过--port=4306 这种方法;

而是需要写成:P=4306

错误写法:
pt-online-schema-change --port=3366 D=sre_test,t=candles
正确写法:
pt-online-schema-change D=sre_test,t=candles,P=3366

2、如果端口是3306,则可以通过--port的方法来写。

正确写法:
pt-online-schema-change --port=3306 D=sre_test,t=candles
正确写法:
pt-online-schema-change D=sre_test,t=candles,P=3366

基于上面这些小问题,最后我将pt的版本回退到了3.0.11,这个版本经过测试,是一个比较稳定的版本。没有上述问题。

不得不说,这个pt工具确实是小问题比较多。。。

但是这并不妨碍它的使用,毕竟要想同时兼容MariaDB、Percona Server、MySQL Server三个版本的服务,确实在细节上要考虑的事情比较多。它强大的功能,确实让DBA爱不释手。

好在官方文档开诚布公,有详细的bug 记录,可以让你很快的解决遇到的问题。这一点我觉得做的很好。

今天就到这里吧,希望能对大家有帮助。

相关文章

  • 一步步带你设计MySQL索引数据结构

    一步步带你设计MySQL索引数据结构,想想我们生活中的例子,比如新华字典,我们有一个目录,目录根据拼音排序,内容包含了汉字位于字典中具体的的页码。聪明的你肯定也想到了,我们也可以借鉴这种思想,建立一个MySQL的目录,叫做“索引”。...
  • 用.NET做DDNS动态域名解析和SSL证书申请

    用.NET做DDNS动态域名解析和SSL证书申请,前几天用.NET玩IoT设备,拿出了角落吃灰的Jetson Nano。近期也买了一堆传感器,还在路上,准备到手之后,好好捣鼓一番。Nano设备呢,虽然没有一直开......

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。