Percona Toolkit 实用工具指南
概述
Percona Toolkit 是一套强大的 MySQL 数据库管理工具集,本文档重点介绍两个在生产环境中最常用的工具:
- pt-online-schema-change: 在线表结构变更工具
- pt-archiver: 数据归档和清理工具
1. pt-online-schema-change - 在线表结构变更工具
🎯 工具简介
pt-online-schema-change 是一个用于在线修改 MySQL 表结构的工具,它可以在不锁表的情况下执行 DDL 操作,避免了传统 ALTER TABLE 语句对业务的影响。
🔧 工作原理
- 创建影子表: 复制原表结构并应用变更
- 创建触发器: 在原表上创建触发器,同步数据变更
- 数据复制: 将原表数据复制到新表
- 原子交换: 快速交换表名完成变更
- 清理资源: 删除触发器和临时表
📝 基本语法
pt-online-schema-change [OPTIONS] --alter="ALTER_STATEMENT" D=database,t=table
🚀 使用示例
1. Dry Run 模式(推荐先执行)
# 预览执行计划,不实际修改表
pt-online-schema-change \
--alter="ADD COLUMN new_col VARCHAR(50) DEFAULT 'default_value'" \
--host=127.0.0.1 --port=33060 --user=root --password=1234567788 \
--progress=time,30 \
--dry-run \
D=test,t=user
输出解析:
Creating new table...: 创建临时表test._user_newAltering new table...: 在临时表上执行DDL变更Not creating triggers because this is a dry run: 跳过触发器创建Not copying rows because this is a dry run: 跳过数据复制Dry run complete. test.user was not altered: 预览完成,原表未修改
2. 实际执行
# 实际执行表结构变更
pt-online-schema-change \
--alter="ADD COLUMN new_col VARCHAR(50) DEFAULT 'default_value'" \
--host=127.0.0.1 --port=33060 --user=root --password=1234567788 \
--progress=time,30 \
--execute \
D=test,t=user
执行流程解析:
Created new table test._user_new OK- 创建新表Altered test._user_new OK- 修改新表结构Created triggers OK- 创建数据同步触发器Copying approximately 4 rows...- 复制现有数据Copied rows OK- 数据复制完成Swapped original and new tables OK- 原子交换表名Dropped old table test._user_old OK- 删除旧表Successfully altered test.user- 变更成功完成
验证结果:
-- 查看新表结构
DESC test.user;
-- 新列已成功添加:new_col | varchar(50) | YES | | default_value |
-- 查看数据
SELECT id, username, new_col FROM test.user;
-- 所有现有记录的new_col字段都自动填充了默认值 'default_value'
📋 常用参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
--alter |
DDL 变更语句 | "ADD COLUMN col1 INT" |
--dry-run |
预览模式,不实际执行 | - |
--execute |
实际执行变更 | - |
--host |
MySQL服务器地址 | --host=127.0.0.1 |
--port |
MySQL服务器端口 | --port=33060 |
--user |
MySQL用户名 | --user=root |
--password |
MySQL密码 | --password=your_password |
--progress |
显示进度信息 | --progress=time,30 (每30秒显示时间进度) |
--chunk-size |
每次复制的行数 | --chunk-size=1000 |
--max-lag |
主从延迟阈值(秒) | --max-lag=5 |
--critical-load |
系统负载阈值 | --critical-load="Threads_running=50" |
重要提示:
- 数据库和表名格式:
D=database_name,t=table_name --progress=time,30表示每30秒显示一次时间进度- 必须指定
--dry-run或--execute其中之一
🎯 适用场景
✅ 推荐使用场景:
-
添加列
--alter="ADD COLUMN status TINYINT DEFAULT 1" -
修改列属性
--alter="MODIFY COLUMN name VARCHAR(100) NOT NULL" -
添加索引
--alter="ADD INDEX idx_create_time (create_time)" -
删除索引
<

最低0.47元/天 解锁文章
3722

被折叠的 条评论
为什么被折叠?



