Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL8 mysqldump逻辑备份

MySQL8配置mysqldump逻辑备份的实现

作者:leaf9z

mysqldump是MySQL自带的逻辑备份工具,通过生成SQL语句实现跨平台/版本的数据备份,下面就来介绍一下MySQL8配置mysqldump逻辑备份的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

mysqldump 是 MySQL 自带的一个极其常用的逻辑备份工具。它的基本原理是将数据库中的数据和结构转换成一系列的 SQL 语句(如 CREATE TABLEINSERT 等)。

1. 核心特点

2. 主要优缺点

维度优点缺点
可读性备份文件是纯文本,可以直接用编辑器打开看。文件体积相对物理备份较大(压缩前)。
细粒度能够很方便地只恢复某一个表的数据。恢复时需要重新构建索引,CPU 和 IO 消耗大。
兼容性兼容性极强,适合做数据库升级或迁移。备份大型数据库时,对生产环境的压力持续时间长。
锁表情况配合 --single-transaction 可实现 InnoDB 的无锁热备。如果有非 InnoDB 表(如 MyISAM),备份时会锁表。

3. mysqldump 的工作流程

4. 常见的备份场景

5. 执行备份

5.1 推荐创建专用备份账号

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'StrongPass!';
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT, LOCK TABLES, RELOAD, PROCESS ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;

5.2 准备环境(不在备份命令中明文暴露)

[root@localhost ~]# vim /etc/mysql_backup.cnf
[client]
user=root
password=LJFLDskfdjsldkjfl
port=3306                             #根据自己实际端口填写
socket=/var/lib/mysql/mysql.sock      #根据自己实际sock填写

5.3 执行备份

[root@localhost ~]# mysqldump --defaults-extra-file=/etc/mysql_backup.cnf \
    --single-transaction \
    --routines \
    --hex-blob \
    --set-gtid-purged=OFF \
    --triggers \
    --events \
    --all-databases \
    --flush-logs \
    --source-data=2 \
   | gzip > "/data/mysql/backup/logical_backup/mysqldump_$(date '+%F_%H-%M-%S').sql.gz"

6. 编写备份脚本

[root@localhost ~]#vim  mysqldump_backup.sh 
#!/bin/bash
#
# ==============================================================================
# MySQL 逻辑备份脚本(基于 mysqldump)
# 适用于 MySQL 8.0,支持定时任务
# 作者:Noleaf
# 日期:2025-12-31
# ==============================================================================

set -euo pipefail

#=============================变量定义==========================================

# 时间戳
Timestamp=$(date '+%F_%H-%M-%S')

# 备份根目录
BACKUP_BASE=/data/mysql8/backup/mysqldump_backup

# 备份文件名称
BACKUP_NAME="mysqldump_${Timestamp}.sql.gz"

# 日志目录及文件
LOG_DIR=${BACKUP_BASE}/logs
LOG_FILE=${LOG_DIR}/mysqldump_${Timestamp}.log

# 保留天数
KEEP_DAYS=30

# MySQL 配置文件(包含用户名和密码)
MYSQL_CNF=/etc/mysql_backup.cnf

#=============================创建目录==========================================

mkdir -p "$BACKUP_BASE" "$LOG_DIR"

echo "========================== mysqldump备份开始于 [$Timestamp] ===================" | tee -a "$LOG_FILE"

#=============================执行备份==========================================
#注意mysqldump路径
if /usr/local/mysql-8.0.44/bin/mysqldump --defaults-extra-file=${MYSQL_CNF} \
    --single-transaction \
    --routines \
    --hex-blob \
    --set-gtid-purged=OFF \
    --triggers \
    --events \
    --all-databases \
    --flush-logs \
    --source-data=2 \
    | gzip > "${BACKUP_BASE}/${BACKUP_NAME}"; then
    echo "Success: mysqldump备份成功!文件: ${BACKUP_BASE}/${BACKUP_NAME}" | tee -a "$LOG_FILE"
else
    echo "ERROR: mysqldump备份失败!请检查日志 ${LOG_FILE}" | tee -a "$LOG_FILE"
    exit 1
fi

#=============================清理旧备份==========================================

echo "正在清理 $KEEP_DAYS 天之前的旧备份..." | tee -a "$LOG_FILE"
find "${BACKUP_BASE}" -maxdepth 1 -type f -name "mysqldump_*.sql.gz" -mtime +${KEEP_DAYS} -exec rm -f {} \;
find "${LOG_DIR}" -maxdepth 1 -type f -name "mysqldump_*.log" -mtime +${KEEP_DAYS} -exec rm -f {} \;

#=============================统计数据简报========================================

BACKUP_SIZE=$(du -sh "${BACKUP_BASE}/${BACKUP_NAME}" | cut -f1)
echo "本次mysqldump备份大小:${BACKUP_SIZE}" | tee -a "$LOG_FILE"

echo "=================== mysqldump备份完成于 [$(date '+%F %H:%M:%S')] ===================" | tee -a "$LOG_FILE"

7. MySQL8/GTID 恢复备份流程

7.1 准备环境

7.2 解压备份文件

如果备份文件是 .sql.gz 压缩格式,先解压:

[root@localhost ~]# gunzip /data/mysql8/backup/mysqldump_backup/mysqldump_2026-01-05_14-30-00.sql.gz

得到解压备份文件:

mysqldump_2026-01-05_14-30-00.sql

7.3 执行恢复命令

直接导入 SQL 文件:

[root@localhost ~]# mysql --defaults-extra-file=/etc/mysqldump8_backup.cnf < mysqldump_2026-01-05_14-30-00.sql

如果是压缩文件,用管道方式:

[root@localhost ~]# gunzip < mysqldump_2026-01-05_14-30-00.sql.gz | mysql --defaults-extra-file=/etc/mysqldump8_backup.cnf

7.4 恢复过程中的注意事项

7.5 验证恢复结果

7.6 恢复后的收尾工作

✅ 总结

MySQL 8 恢复流程的关键点:

到此这篇关于MySQL8配置mysqldump逻辑备份的实现的文章就介绍到这了,更多相关MySQL8 mysqldump逻辑备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文