MySQL备份:mydumper 备份恢复工具生产实战

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: MySQL备份:mydumper 备份恢复工具生产实战

mydumper 备份工具

此工具会锁定表无法进行DML操作只能进行查询,应该在从库上进行备份

一、mydumper备份

1-1、备份全库

mydumper -u dba -p 'password' -h 127.0.0.1 --triggers --events  --routines   -o /tmp/full.sql

1-2、备份test数据库

mydumper -u dba -p 'password' -h 127.0.0.1  --triggers --events  --routines -B test -o /tmp/test_bak/

1-3、备份多张表(t1、t2):

mydumper -u dba -p 'password' -h 127.0.0.1  --triggers --events  --routines -B test -T t1,t2 -o /tmp/test_bak/

1-4、备份t1表的数据,不备份表结构

mydumper -u dba -p 'password' -h 127.0.0.1  --triggers --events  --routines -B test -T t1 -m -o /tmp/test_bak/

1-5、备份t1表的数据,并进行压缩

mydumper -u dba -p 'password' -h 127.0.0.1  --triggers --events  --routines -B test -T t1 -c  -o /tmp/test_bak/

1-6、实战

nohup mydumper \
--build-empty-files \
--trx-consistency-only \
--threads=8 \
--less-locking \
--verbose=3 \
--triggers \
--events \
--routines \
--compress \
--long-query-guard=120 \
--kill-long-queries \
--logfile=/root/mydumper_$(date +%Y%m%d).log \
--host=10.11.8.206 \
--port=3307 \
--user=dba \
--password='123456' \
--outputdir=/mydata/backup/3307/test_$(date +%Y%m%d_%H%M%S) \
-B test 2>/tmp/myduper.log &

二、myloader还原

2-1、还原test库

nohup myloader \
--threads=32 \
--enable-binlog \
--verbose=3 \
--logfile=/mydata/backup/3309/myloader_$(date +%Y%m%d).log \
--host=172.22.222.80 \
--port=3309 \
--user=test \
--password='123456@!QAZ' \
--source-db=test \
--database=test \
-d /mydata/backup/3309/test_222_249_2022_08_26/ 2>>/mydata/backup/3309/myloader_$(date +%Y%m%d).log  &
myloader \
--threads=8 \
--enable-binlog \
--host=10.11.8.206 \
--port=3307 \
--user=dba \
--password='123456' \
--source-db=test \
--database=test2 \
-d /mydata/backup/3307/test_20220823

2-2、还原t1表

myloader无法还原单表,需要source进行还原

# 进入备份目录找到需要还原的表,如果进行了压缩需要先解压
cd /mydata/backup/3307/test_20220823
# 解压表结构文件
gunzip test.t1-schema.sql.gz
# 解压数据文件
gunzip  test.t1.00000.sql.gz
# 导入test库表结构
mysql -udba -p'123456' -h10.11.8.206 -P3307 test -e "source test.t1-schema.sql"
# 导入test库数据
nohup mysql -udba -p'123456' -h10.11.8.206 -P3307 test -e "source test.t1.00000.sql" 2>/root/source_$(date +%Y%m%d).log &
# 查询数据量
mysql> select count(1) from t1;
+----------+
| count(1) |
+----------+
|    19999 |
+----------+

三、安装使用

wget --user=admin --password=123456   http://jvqn.vip:88/mysql/mydumper-0.10.7-2.el7.x86_64.rpm
wget  https://github.com/mydumper/mydumper/releases/download/v0.12.5-3/mydumper-0.12.5-3.el7.x86_64.rpm
yum install mydumper-0.12.5-3.el7.x86_64.rpm -y

3-1、mydumper参数

Application Options:
  -B, --database                 需要备份的数据库,一个数据库一条命令备份,要不就是备份所有数据库,包括mysql。
  -T, --tables-list              需要备份的表,用逗号分隔。
  -o, --outputdir                备份文件目录
  -s, --statement-size           生成插入语句的字节数,默认1000000,这个参数不能太小,不然会报 Row bigger than statement_size for tools.t_serverinfo
  -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                 不执行共享读锁 警告:这将导致不一致的备份
  --less-locking                 减到最小的锁在innodb表上.
  -l, --long-query-guard         设置长查询时间,默认60秒,超过该时间则会报错:There are queries in PROCESSLIST running longer than 60s, aborting dump
  -K, --kill-long-queries        kill掉长时间执行的查询,备份报错:Lock wait timeout exceeded; try restarting transaction
  -D, --daemon                   启用守护进程模式
  -I, --snapshot-interval        dump快照间隔时间,默认60s,需要在daemon模式下
  -L, --logfile                  使用日志文件,默认标准输出到终端
  --tz-utc                       备份的时候允许备份Timestamp,这样会导致不同时区的备份还原会出问题,默认关闭,参数:--skip-tz-utc to disable.
  --skip-tz-utc               
  --use-savepoints               使用savepoints来减少采集metadata所造成的锁时间,需要SUPER权限
  --success-on-1146              Not increment error count and Warning instead of Critical in case of table doesn't exist
  --lock-all-tables              锁全表,代替FLUSH TABLE WITH READ LOCK
  -U, --updated-since            使用Update_time仅转储在过去U天内更新的表
  --trx-consistency-only         仅事务一致性 快照备份 必加参数!!!
  -h, --host                     The host to connect to
  -u, --user                     Username with privileges to run the dump
  -p, --password                 User password
  -P, --port                     TCP/IP port to connect to
  -S, --socket                   UNIX domain socket file to use for connection
  -t, --threads                  备份执行的线程数,默认4个线程
  -C, --compress-protocol        在mysql连接上使用压缩协议
  -V, --version                  Show the program version and exit
  -v, --verbose                  更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

3-2、myloader参数

Application Options:
  -d, --directory                       备份文件所在的目录
  -q, --queries-per-transaction         每个事务的query数量, 默认1000
  -o, --overwrite-tables                如果表存在则先删除,使用该参数,需要备份时候要备份表结构,不然还原会找不到表
  -B, --database                        指定需要还原的数据库(必选参数)需要还原到哪里去!!!
  -s, --source-db                       选择需要导入备份中哪个数据库内的表(必选参数)选择导入时导入哪个数据库的表!!!
  -e, --enable-binlog                   启用二进制日志恢复数据(默认不启用)有从库的情况需要开启此参数
  -h, --host                            The host to connect to
  -u, --user                            Username with privileges to run the dump
  -p, --password                        User password
  -P, --port                            TCP/IP port to connect to
  -S, --socket                          UNIX domain socket file to use for connection
  -t, --threads                         使用的线程数量,默认4
  -C, --compress-protocol               连接上使用压缩协议
  -V, --version                         Show the program version and exit
  -v, --verbose                         更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

3-3、插入测试数据存储过程

drop table t4;
CREATE TABLE `t4` (
  `id` int(11)  primary key not null  auto_increment,
  `name` varchar(12) not null  
);
drop PROCEDURE insert_testdata;
DELIMITER ;;
CREATE PROCEDURE insert_testdata ( ) 
BEGIN
DECLARE
    i INT DEFAULT 1;
  WHILE
      i < 20000 DO
      insert into t4 values(i,"1+i dsdsd");
      SET i = i + 1;
    
  END WHILE;
  COMMIT;
  
END ;;
DELIMITER ;
CALL insert_testdata();

生产备份脚本

vim mydumper.sh 
#! /bin/bash
# Mydumper备份脚本可以指定库备份也可以全备
# 
# 需要排除的库,没有则不填 //按格式填写 示例:'^(?!(mysql\.|test\.|sys\.))' 排除
Exclude=''
# 指定备份库  // Exclude参数和此参数只能选一个 都不填则为全备
Database=''
# 备份用户名
User=dba
# 备份用户密码
Passwd='123456'
Host=10.11.8.206
Port=3307
# 备份文件保存路径
Bak_Dir=/mydata/backup/3307/
Mydumper_Dir=$(which  mydumper)
Time=$(date +%Y_%m_%d)
# 获取主机后两位
if [ ${Host} == 'localhost' ] || [ ${Host} == '127.0.0.1' ]; then
  Host_info='local'
else
  Host_info=$(echo "${Host}" |awk -F'.' '{print $3"_"$4}')
fi
# 判断是否指定了库
if [ -n "${Database}" ]; then 
  Schema="--database=${Database}"
  Dir_Name=${Database}
else
  Schema=""
  Dir_Name=full
fi
# 判断是否指定了排除库
if [ -n "${Exclude}" ];then
  Exclude_1="--regex "${Exclude}""
else
  Exclude_1=''
fi
# 创建备份目录
mkdir -p  ${Bak_Dir}/${Dir_Name}_${Host_info}_${Time}
${Mydumper_Dir} \
--host=${Host} \
${Schema} \
${Exclude_1} \
--port=${Port} \
--user=${User} \
--password=${Passwd} \
--outputdir=${Bak_Dir}/${Dir_Name}_${Host_info}_${Time} \
--rows=5000000 \
--build-empty-files \
--threads=8 \
--trx-consistency-only \
--compress-protocol \
--less-locking \
--verbose=3 \
--logfile=${Bak_Dir}/mydumper_${Time}.log \
--triggers \
--events \
--routines \
--compress \
--long-query-guard=120 \
--kill-long-queries 
if [ $? -ne 0 ]; then
  echo "$(/usr/bin/date +%Y-%m-%d_%H:%M:%S) ${Host} 主机 备份失败" >>${Bak_Dir}/mydumper_${Time}.log
else
  echo "$(/usr/bin/date +%Y-%m-%d_%H:%M:%S) ${Host} 主机 备份成功" >>${Bak_Dir}/mydumper_${Time}.log
fi
if [ ${Bak_Dir} == '/' ] || [ ${Bak_Dir} == '' ];then
  echo '指定备份地址为 "/" 不予执行清理工作' >>${Bak_Dir}/mydumper_${Time}.log
  exit 
else
  find  ${Bak_Dir} -type d  -name "${Dir_Name}_${Host_info}*" -mtime +90 -print |xargs rm -rf
  find  ${Bak_Dir} -type f  -name "mydumper_*.log"            -mtime +90 -print |xargs rm -rf
fi


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
6月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
532 10
|
8月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
572 36
|
8月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
811 5
|
9月前
|
canal 关系型数据库 MySQL
MySQL 自动同步开源工具
本文介绍了几种开源工具用于实现 MySQL 数据库的自动同步。
|
10月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
494 28
|
8月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
583 0
|
10月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
266 15
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
444 158
|
5月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多