Percona-Toolkit-实用工具指南

Percona Toolkit 实用工具指南

概述

Percona Toolkit 是一套强大的 MySQL 数据库管理工具集,本文档重点介绍两个在生产环境中最常用的工具:

  • pt-online-schema-change: 在线表结构变更工具
  • pt-archiver: 数据归档和清理工具

1. pt-online-schema-change - 在线表结构变更工具

🎯 工具简介

pt-online-schema-change 是一个用于在线修改 MySQL 表结构的工具,它可以在不锁表的情况下执行 DDL 操作,避免了传统 ALTER TABLE 语句对业务的影响。

🔧 工作原理

  1. 创建影子表: 复制原表结构并应用变更
  2. 创建触发器: 在原表上创建触发器,同步数据变更
  3. 数据复制: 将原表数据复制到新表
  4. 原子交换: 快速交换表名完成变更
  5. 清理资源: 删除触发器和临时表

📝 基本语法

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_new
  • Altering 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

执行流程解析:

  1. Created new table test._user_new OK - 创建新表
  2. Altered test._user_new OK - 修改新表结构
  3. Created triggers OK - 创建数据同步触发器
  4. Copying approximately 4 rows... - 复制现有数据
  5. Copied rows OK - 数据复制完成
  6. Swapped original and new tables OK - 原子交换表名
  7. Dropped old table test._user_old OK - 删除旧表
  8. 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 其中之一

🎯 适用场景

✅ 推荐使用场景:
  1. 添加列

    --alter="ADD COLUMN status TINYINT DEFAULT 1"
    
  2. 修改列属性

    --alter="MODIFY COLUMN name VARCHAR(100) NOT NULL"
    
  3. 添加索引

    --alter="ADD INDEX idx_create_time (create_time)"
    
  4. 删除索引

    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值