详解
本作者提供了各种操作系统类型(CentOS、欧拉、RHEL红帽、麒麟)的mydumper/myloader工具可供下载。如:容器化镜像、zip压缩文件,开封即用,非常方便。
1、备份数据(导出数据)
# 导出所有数据库,但不包含information_schema|performance_schema|sys|mysql实例
>> mydumper --host <IP> --port <端口> \
--user <用户名> --password <密码> \
--triggers --routines -E --threads 4 \
--regex '^(?!(information_schema|performance_schema|sys|mysql))' \
--compress --verbose 3 \
--long-query-guard 999999999 \
--outputdir <备份文件存放目录>
# 导出指定数据库
>> mydumper --host <IP> --port <端口> \
--user <用户名> --password <密码> \
--database <数据库实例> \
--triggers --routines -E --threads 4 \
--compress --verbose 3 \
--long-query-guard 999999999 \
--outputdir <备份文件存放目录>
# 导出表
>> mydumper --host <IP> --port <端口> \
--user <用户名> --password <密码> \
--database <数据库实例> \
--tables-list "<表名1>,<表名2>,<表名n>" \
--triggers --routines -E --threads 4 \
--compress --verbose 3 \
--outputdir <备份文件存放目录>
2、恢复数据(导入数据)
myloader 会自动创建数据库和表,无需提前手动创建;且导入时不会影响数据库实例中现有的数据。
# 将备份目录下的所有数据源导入(如果表存在,则将其覆盖)
>> myloader --host <IP> --port <端口> \
--user <用户名> --password <密码> \
--verbose 3 --overwrite-tables --threads 4 \
--directory <备份文件存放目录>
# 将备份目录下的指定数据源导入(如果表存在,则将其覆盖)
>> myloader --host <IP> --port <端口> \
--user <用户名> --password <密码> \
--verbose 3 --overwrite-tables --threads 4 \
--source-db <源数据库实例> \
--database <目标数据库实例> \
--directory <备份文件存放目录>
# 将备份目录下的指定数据源导入(如果表存在,则不导入;即只导入当前数据库实例中不存在的表)
>> myloader --host <IP> --port <端口> \
--user <用户名> --password <密码> \
--verbose 3 --threads 4 \
--source-db <源数据库实例> \
--database <目标数据库实例> \
--directory <备份文件存放目录>
3、定时备份脚本(全库备份)
#!/bin/bash
################### 公共变量 ######################
DATE=$(date '+%Y-%m-%d-%H-%M') # 2025-05-11-11-36
START_TIME=$(date '+%Y-%m-%d %H:%M:%S') # 2025-05-11 11:36:39
SCRIPT_PATH=$(realpath "$0") # /root/henji/middle_backup.sh
################## mariadb 变量参数 #################
# 备份文件存放目录
MYSQL_NEW_DIR="/opt/software/mysql8/backup"
# 连接信息
HOST=192.168.1.196
PORT=30096
USER=root
PASSWD='jiazhi@admin_123'
function Mysql_backup() {
# 判断目录不存在就创建
[ -e "${MYSQL_NEW_DIR}/mysqlbackup_${DATE}" ] || mkdir -p ${MYSQL_NEW_DIR}/mysqlbackup_"${DATE}"
# 执行备份,备份所有业务库
cd "/opt/software/mysql8/"
LD_LIBRARY_PATH="/opt/software/mysql8/mydumper/usr/lib64:$LD_LIBRARY_PATH" /opt/software/mysql8/mydumper/usr/bin/mydumper \
--host ${HOST} --port ${PORT} --user ${USER} --password "${PASSWD}" \
--triggers --routines -E --regex '^(?!(information_schema|performance_schema|sys|mysql))' \
--compress --verbose 3 --threads 4 --long-query-guard 999999999 --outputdir ${MYSQL_NEW_DIR}/mysqlbackup_"${DATE}"
cd ${MYSQL_NEW_DIR}
tar -zcf mysqlbackup_${DATE}.tar.gz mysqlbackup_${DATE} --remove-files >/dev/null 2>&1
# 删除7天前的备份
find ${MYSQL_NEW_DIR}/ -type f -ctime +7 -name "*.tar.gz" -exec rm -f {} \;
}
case $1 in
mysql)
echo "开始备份mysql: ${HOST} ..."
Mysql_backup
;;
*)
echo "error! 请输入: mysql"
;;
esac