Percona Toolkit
- https://blog.csdn.net/weixin_45320660/article/details/115724006
- https://cloud.tencent.com/developer/article/1533505
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
--purge:表示只删除,不归档。--limit 1000:每批处理 1000 行。--commit-each:每批提交一次事务,减少锁表时间。
千万级表修改表结构
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
- Percona Server for MySQL
MySQL 的高性能、高可用分支,完全开源。 - Percona XtraBackup
针对 MySQL 及兼容数据库的在线热备份工具。 - Percona Toolkit
一套用于 MySQL/MongoDB 管理与诊断的命令行工具集。 - Percona Monitoring and Management(PMM)
免费开源的监控与可视化平台,支持 MySQL、MongoDB、PostgreSQL。 - Percona Distribution for PostgreSQL
Percona 打包的 PostgreSQL 发行版,含高可用、备份、监控组件。 - Percona Distribution for MongoDB
基于 MongoDB 社区版的增强发行版,含备份、监控等企业级特性。 - Percona Distribution for MySQL(Percona XtraDB Cluster 版)
基于 Galera Cluster 的 MySQL 高可用同步多主集群发行版。 - Percona Everest(Beta)
面向 Kubernetes 的云原生数据库平台,支持 MySQL 和 MongoDB 的自动化管理。 - Percona Backup for MongoDB
专为 MongoDB 设计的分布式、低开销备份恢复工具。 - 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
约五分钟大盘即有数据展示。