PerconaToolkit

予早 2026-04-30 23:53:31
Categories: Tags:

Percona Toolkit

Percona Toolkit 神器全攻略

sudo apt update
sudo apt install percona-toolkit

pt-archiver

https://www.cnblogs.com/dbabd/p/10721857.html

pt-online-schema-change

pt-archiver

千万级表修改表结构

DROP TABLE IF EXISTS `tb_xxx_ad_insight_2099Q3`;
CREATE TABLE `tb_xxx_ad_insight_2099Q3`
(
    `id`             BIGINT NOT NULL COMMENT '主键',
    `ad_account_id`  varchar(80) NOT NULL COMMENT '广告账户id',
    `ad_campaign_id` varchar(80) NOT NULL COMMENT '广告系列id',
    `ad_group_id`    varchar(80) NOT NULL COMMENT '广告组id',
    `ad_id`          varchar(80) NOT NULL COMMENT '广告id',
    `insight_date`   date  NOT NULL COMMENT '成效日期',
    `spend`          decimal(20, 2)        DEFAULT NULL COMMENT '消耗',
    `impressions`    int                   DEFAULT NULL COMMENT '展示',
    `clicks`         int                   DEFAULT NULL COMMENT '点击',
    `create_time`    datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`    datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    `is_delete`      tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    PRIMARY KEY (`id`)
)
ALTER TABLE `tb_xxx_ad_insight_2099Q3` MODIFY COLUMN `spend` DOUBLE NULL COMMENT '消耗';
# PT-OSC,影子表 + 触发器 + 分批拷贝 + 原子切换,比 MySQL Online DDL 更优
# dry-run
pt-online-schema-change \
  --user=root \
  --password='mYsql123456_' \
  --host=127.0.0.1 \
  --port=3306 \
  --charset=utf8mb4 \
  --no-version-check \
  --dry-run \
  D='db_service_xxx',t='tb_xxx_ad_insight_2099q3' \
  --alter="MODIFY COLUMN spend double NULL COMMENT '消耗'" \
  --recursion-method=none \
  --set-vars=innodb_lock_wait_timeout=500,lock_wait_timeout=500

# execute
pt-online-schema-change \
  --user=root \
  --password='mYsql123456_' \
  --host=127.0.0.1 \
  --port=3306 \
  --charset=utf8mb4 \
  --no-version-check \
  --execute \
  D='db_service_xxx',t='tb_xxx_ad_insight_2099q3' \
  --alter="MODIFY COLUMN spend double NULL COMMENT '消耗'" \
  --recursion-method=none \
  --set-vars=innodb_lock_wait_timeout=500,lock_wait_timeout=500

千万级表数据归档

不归档仅删除

pt-archiver \
  --source h=127.0.0.1,D="db_service_xxx",t="tb_xxx_ad_insight_2099q3",u="root",p="mYsql123456_" \
  --where "create_time < '2025-09-01'" \
  --purge \
  --limit 1000 \
  --commit-each \
  --progress 1000 \
  --statistics

归档到表并删除

CREATE TABLE db_service_xxx.tb_xxx_ad_insight_2099q3_bk20280904114131 LIKE db_service_xxx.tb_xxx_ad_insight_2099q3;
pt-archiver \
  --source h=127.0.0.1,D="db_service_xxx",t="tb_xxx_ad_insight_2099q3",u="root",p="mYsql123456_" \
  --dest h=127.0.0.1,D="db_service_xxx",t="tb_xxx_ad_insight_2099q3_bk20280904114131",u="root",p="mYsql123456_" \
  --where "create_time < '2025-09-01'" \
  --purge \
  --limit 2000 \
  --progress 2000

归档到文件不删除

数据导出为 TSV 文件,可用于后续 LOAD DATA INFILE

pt-archiver \
  --source h=127.0.0.1,D=test,t=orders,u=user,p=pass \
  --where "1=1" \
  --no-delete \
  --file "/tmp/orders_backup.tsv" \
  --header

全量归档到表不删除(全量备份)

CREATE TABLE db_service_xxx.tb_xxx_ad_insight_2099q3_bk20280904114131 LIKE db_service_xxx.tb_xxx_ad_insight_2099q3;
pt-archiver \
  --source h=127.0.0.1,D="db_service_xxx",t="tb_xxx_ad_insight_2099q3",u="root",p="mYsql123456_" \
  --dest h=127.0.0.1,D="db_service_xxx",t="tb_xxx_ad_insight_2099q3_bk20280904114131",u="root",p="mYsql123456_" \
  --where "1=1" \
  --no-delete \
  --limit 2000 \
  --progress 2000

pt-kill

杀掉执行时间超过 30 秒的 SELECT 查询

pt-kill --host=127.0.0.1 --port=3306 --user=root --password="mYsql123456_" \
--match-info="SELECT" --busy-time=30 --victims=all --interval=10 \
--daemonize --print --log=/tmp/pt-kill.log
  1. Percona Server for MySQL
    MySQL 的高性能、高可用分支,完全开源。
  2. Percona XtraBackup
    针对 MySQL 及兼容数据库的在线热备份工具。
  3. Percona Toolkit
    一套用于 MySQL/MongoDB 管理与诊断的命令行工具集。
  4. Percona Monitoring and Management(PMM)
    免费开源的监控与可视化平台,支持 MySQL、MongoDB、PostgreSQL。
  5. Percona Distribution for PostgreSQL
    Percona 打包的 PostgreSQL 发行版,含高可用、备份、监控组件。
  6. Percona Distribution for MongoDB
    基于 MongoDB 社区版的增强发行版,含备份、监控等企业级特性。
  7. Percona Distribution for MySQL(Percona XtraDB Cluster 版)
    基于 Galera Cluster 的 MySQL 高可用同步多主集群发行版。
  8. Percona Everest(Beta)
    面向 Kubernetes 的云原生数据库平台,支持 MySQL 和 MongoDB 的自动化管理。
  9. Percona Backup for MongoDB
    专为 MongoDB 设计的分布式、低开销备份恢复工具。
  10. Percona XtraDB Cluster
    同步多主集群解决方案,基于 Percona Server for MySQL 与 Galera Library。

Percona Monitoring and Management(PMM)

https://docs.percona.com/percona-monitoring-and-management/3/index.html

# PMM Server

docker pull percona/pmm-server:2.41.1

docker run -d --restart always \
  --name pmm-server \
  -p 20080:80 \
  -p 20443:443 \
  -v pmm-data:/srv \
  percona/pmm-server:2.41.1
  
# PMM Client
wget https://downloads.percona.com/downloads/pmm2/2.41.1/binary/tarball/pmm2-client-2.41.1.tar.gz
wget https://downloads.percona.com/downloads/pmm2/2.41.1/binary/tarball/pmm2-client-2.41.1.tar.gz.sha256sum
sha256sum -c pmm2-client-2.41.1.tar.gz.sha256sum

# 解压安装
tar -xzf pmm2-client-2.41.1.tar.gz
cd pmm2-client-2.41.1
export PMM_DIR=$HOME/pmm2    # 想放哪就改哪
suodo ./install_tarball
echo 'export PATH=$PATH:'$PMM_DIR/bin >> ~/.bashrc
source ~/.bashrc

# 配置 agent
pmm-agent setup \
  --config-file=$PMM_DIR/config/pmm-agent.yaml \
  --server-address=114.66.58.168:20443 \
  --server-insecure-tls \
  --server-username=admin \
  --server-password=admin

# 启动 agent
nohup pmm-agent --config-file=$PMM_DIR/config/pmm-agent.yaml &

# 
pmm-admin status      # 应显示 “Connected”
pmm-admin list        # 看已添加的服务
sudo chmod -R 755 /usr/local/percona
sudo chown -R ubuntu:ubuntu /usr/local/percona

MySQL 监控

MySQL 创建监控专用账户

-- 连上 MySQL 后执行
CREATE USER 'pmm'@'127.0.0.1' IDENTIFIED BY 'mYsql123456_';
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD, BACKUP_ADMIN ON *.* TO 'pmm'@'127.0.0.1';
-- 如果开了 performance_schema,再加
GRANT SELECT ON performance_schema.* TO 'pmm'@'127.0.0.1';
FLUSH PRIVILEGES;
pmm-admin add mysql \
  --username=pmm --password="mYsql123456_" \
  --host=127.0.0.1 --port=3306 \
  --service-name=mysql-`hostname`
pmm-admin list

约五分钟大盘即有数据展示。