mysql - 如何让 pt-upgrade(Percona 工具包)在数据库上进行上下文切换

标签 mysql automated-tests percona

我正在尝试使用 Percona Toolkit 中的 pt-upgrade 来测试在 MySQL 5.1 和 MySQL 5.6 数据库服务器上运行负载。我想看看从 MySQL 5.1 慢速日志捕获的任何查询在 MySQL 5.6 系统上是否会失败。我阅读了https://www.percona.com/doc/percona-toolkit/2.2/pt-upgrade.html处的文档并创建了以下命令:

pt-upgrade h=IPADDRESS1 -uUSERNAME -pPASSWORD  h=IPADDRESS2 uUSERNAME -pPASSWORD --type='slowlog' --max-class-size=1 --max-examples=1  --run-time=1m 'slow_log_mysqld.log' 1>report.txt 2>err.txt &

我恢复了所有数据库的副本,其中慢速日志被保存到两个单独的服务器上。

我的命令运行良好,我已将其设置为仅运行 1 分钟以进行测试。我在报告中看到的问题是两台主机上的查询一次又一次失败。

On both hosts:

DBD::mysql::st execute failed: No database selected [for Statement "....

看来 pt-upgrade 没有更改数据库。

我查看了慢查询日志,并且在每个 SELECT 语句之前清楚地看到这样的语句:

  4                 9640337 Query   USE database1
  9                 9640337 Query   USE database2

我在获取慢速日志的服务器上有超过 10000 个数据库。是否存在 pt-upgrade 无法在数据库之间切换的限制?如何让 pt-upgrade 能够使用多个数据库?

最佳答案

我的系统上的慢速日志的格式似乎有些奇怪。 在运行 pt-upgrade 之前,我必须先使用 pt-query-digest “按摩”我的日志。以下是我如何使用 pt-query-digest 在慢速日志上运行按摩:

pt-query-digest --filter '$event->{arg} =~ m/^select/i' --sample 5 --no-report --output slowlog mysql_slow.log > massaged_mysql_slow.log

现在我可以运行这个:

pt-upgrade h=IPADDRESS1 -uUSERNAME -pPASSWORD  h=IPADDRESS2 uUSERNAME -pPASSWORD --type='slowlog' --max-class-size=1 --max-examples=1  --run-time=1m 'massaged_mysql_slow.log' 1>report.txt 2>err.txt &

关于mysql - 如何让 pt-upgrade(Percona 工具包)在数据库上进行上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577767/

相关文章:

python - 如何使用 Python 在命令提示符中传递命令

mysql - 为什么 Percona pt-online-schema-change 表现如此糟糕?

mysql - 如何在 MySql 查询中执行此操作?

php - 运行 SQL 从数据库获取数据时出错

mysql - 为什么 MySQL 的 data_free 大于数据和索引的总和?

mysql - 尽管有 my.cnf 设置,Rake db :create continues to use/tmp/mysql. socks

xcode - 在 Windows 机器上使用 Appium 测试 iOS 应用程序

javascript - 如何清除 Cypress 测试中的本地存储?

mysql - Percona XtraDB 集群 SST 无法使用 rsync : wsrep_sst_rsync

mysql - InnoDB:innodb_system数据文件 'ibdata1'必须可写