安装
下载 TiDB 企业版工具集 (Linux)
1、下载 tool 压缩包:
wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz &&
wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256
2、检查文件完整性,返回 ok 则正确:
sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256
3、解开压缩包:
tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz &&
cd tidb-enterprise-tools-latest-linux-amd64
4、使用案例
定时备份数据库数据(以uat2_*开头的数据库,-x正则表达式)
#!/bin/bash
## 所有路径都要写绝对路径
# 执行数据库备份(/home/backup——mydumper工具目录)(/home/backup/mysql_uat51_backup_$(date +%Y%m%d)/——要备份的文件名字)
/home/backup/mydumper -h IP地址 -u root -p 密码 -P 3306 -t 16 -F 64 -x uat2_* --skip-tz-utc -o /home/backup/mysql_uat51_backup_$(date +%Y%m%d)/
# 删除5天前的备份文件(/home/backup备份文件路径)
rm -rf /home/backup/mysql_uat51_backup_$(date -d "5 days ago" +%Y%m%d)/
# 添加到定时任务命令crontab -e
使用语句
定时每天凌晨一点
0 1 * * * /home/backup/mysql_uat51_backup.sh
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
使用
# 使用正则: 只备份以 dev2*开头的多个数据库
./mydumper -h 192.168.1.33 -u root -p q1w2E -P 4000 -t 2 -x dev2* --skip-tz-utc -o ./tidb_dev2_backup_20190814
# 使用正则: 过滤特定库,例如不备份mysql及test库
./mydumper -h 192.168.1.33 -u root -p q1w2E -P 4000 -t 2 -x '^(?!(mysql|test))' --skip-tz-utc -o ./tidb_dev2_backup_20190814
./mydumper -h 192.168.1.33 -u root -p q1w2E -P 4000 -t 2 -x '^(?!(mysql|test|INFORMATION_SCHEMA|PERFORMANCE_SCHEMA|tidb_loader))' --skip-tz-utc -o juan/
# 备所有数据库
./mydumper -h 192.168.192.33 -u paas -p paas@202033 -P 4000 -t 2 -l 72000 --skip-tz-utc -o juan/
# 备所指定的单个数据库
./mydumper -h 192.168.192.33 -u paas -p paas@202033 -P 4000 -t 2 -r 50000 -l 72000 -B dev2_viatris --skip-tz-utc -o juan/
# 备份以某些名称开头的数据库
./mydumper -h 192.168.1.53 -u root -p q1w2E -P 4000 -t 2 -e -x '^(dev2_paas\.|dev2_paas_system\.|dev2_quartz\.|dev2_pfizer\.|dev2_pfizer_activiti\.)' --skip-tz-utc -o ./test
./mydumper -h 192.168.1.53 -u root -p q1w2E -P 4000 -t 2 -e -x '^(dev2_hengrui\.|dev2_paas\.)' --skip-tz-utc -o
===================
# 备所指定的数据库(-B dev2_pfizer) 的指定表(-T 需要备份的表,名字用逗号隔开)
./mydumper -h 192.168.1.33 -u root -p q1w2E -P 4000 -t 2 -B dev2_pfizer -T sys_user,dc_organization_master --skip-tz-utc -o ./tidb_dev2_backup_20190814
# 执行数据库备份并压缩,-c
./mydumper -h 192.168.180.33 -u root -p q1w2E -P 4000 -c -t 2 -r 5000 -x '^(?!(mysql|test|INFORMATION_SCHEMA|PERFORMANCE_SCHEMA|tidb_loader))' --skip-tz-utc -o /home/tidb/tidb-tools/tidb-enterprise-tools-latest-linux-amd64/bin/backup/tidb_dev2_backup_$(date +%Y%m%d)/
# 还原数据库
./loader -h 192.168.1.46 -u root -p 数据库密码 -P 3306 -t 32 -d ./backup_0/
./loader -h 192.168.1.47 -u root -p q1w2E -P 4000 -t 32 -d
mydumper 常用参数解释
-B, --database 要备份的数据库,不指定则备份所有库
-T, --tables-list 需要备份的表,名字用逗号隔开
-o, --outputdir 备份文件输出的目录
-s, --statement-size 生成的insert语句的字节数,默认1000000
-r, --rows 将表按行分块时,指定的块行数,指定这个选项会关闭 --chunk-filesize
-F, --chunk-filesize 将表按大小分块时,指定的块大小,单位是 MB
-c, --compress 压缩输出文件
-e, --build-empty-files 如果表数据是空,还是产生一个空文件(默认无数据则只有表结构文件)
-x, --regex 是同正则表达式匹配 'db.table'
-i, --ignore-engines 忽略的存储引擎,用逗号分割
-m, --no-schemas 不备份表结构
-d, --no-data 不导出表数据
-G, --triggers 导出触发器
-E, --events 导出事件
-R, --routines 导出存储过程
-k, --no-locks 不使用临时共享只读锁,使用这个选项会造成数据不一致
-l, --long-query-guard 设定阻塞备份的长查询超时时间,单位是秒,默认是60秒(超时后默认mydumper将会退出)
-K, --kill-long-queries kill掉长时间执行的查询,备份报错:Lock wait timeout exceeded; try restarting transaction
-D, --daemon 启用守护进程模式,守护进程模式以某个间隔不间断对数据库进行备份
-I, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下
-L, --logfile 使用的日志文件名(mydumper所产生的日志), 默认使用标准输出
-h, --host 连接的主机名
-u, --user 备份所使用的用户
-p, --password 密码
-P, --port 端口
-S, --socket 使用socket通信时的socket文件
-t, --threads 开启的备份线程数,默认是4
-C, --compress-protocol 压缩与mysql通信的数据
-V, --version 显示版本号
-v, --verbose 输出信息模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认为 2
--lock-all-tables 锁全表,代替FLUSH TABLE WITH READ LOCK
--tz-utc 参数是 mysqldump 的默认参数,会使得 mysqldump 的导出文件的顶部加上一个设置时区的语句 SET TIME_ZONE=’+00:00’ ,这 样当导出 timestamp 时间戳字段时,会把在服务器设置的当前时区下显示的 timestamp 时间值转化为在格林威治时间下显示的时间。比如我们数据库采用北京时间东八区,mysqldump 导出的文件当中显示的 timestamp 时间值相对于通过数据库查询显示的时间倒退了8个小时。
--skip-tz-utc 不使用格林威治时间,而使用当前 mysql 服务器的时区导出,这样导出的数据中的 timestamp 时间值也和表中查询出来相同。
--use-savepoints 使用savepoints来减少采集metadata所造成的锁时间,需要 SUPER 权限
--success-on-1146 如果表不存在,则不增加错误计数和警告而不是关键错误
--less-locking 减少对InnoDB表的锁施加时间(这种模式的机制下文详解)
loader常用参数
-L string
log 级别设置,可以设置为 debug, info, warn, error, fatal (默认为 "info")
-P int
TiDB/MySQL 的端口 (默认为 4000)
-V
打印 loader 版本
-c string
指定配置文件启动 loader
-checkpoint-schema string
checkpoint 数据库名,loader 在运行过程中会不断的更新这个数据库,在中断并恢复后,会通过这个库获取上次运行的进度 (默认为 "tidb_loader")
-d string
需要导入的数据存放路径 (default "./")
-h string
TiDB 服务 host IP (default "127.0.0.1")
-p string
TiDB 账户密码
-status-addr string
Prometheus 可以通过该地址拉取 Loader metrics, 也是 Loader 的 pprof 调试地址 (默认为 ":8272")。
-t int
线程数 (默认为 16). 每个线程同一时刻只能操作一个数据文件。
-u string
TiDB 的用户名 (默认为 "root")