Part01-基础概念与理论知识
1.1 备份工具概述
MySQL备份工具是用于创建、管理和恢复数据库备份的软件工具。不同的备份工具具有不同的特点和适用场景,选择合适的备份工具是确保数据安全的关键。风哥教程参考MySQL官方文档Backup and Recovery部分的备份工具相关内容。更多视频教程www.fgedu.net.cn
# which xtrabackup mysqldump mysqlpump
/usr/bin/xtrabackup
/usr/bin/mysqldump
/usr/bin/mysqlpump
1.2 常用备份工具
MySQL常用的备份工具包括:xtrabackup(物理备份)、mysqldump(逻辑备份)、mysqlpump(并行逻辑备份)、mysqlbinlog(二进制日志备份)等。学习交流加群风哥微信: itpux-com
1.3 工具选择原则
选择MySQL备份工具时,需要考虑以下因素:数据库大小、备份时间要求、恢复时间要求、存储资源、业务需求等。学习交流加群风哥QQ113257174
# 数据库大小 | 推荐工具 | 备份类型
# ————|———|———
# 小型(<10GB) | mysqldump | 逻辑备份
# 中型(10GB-100GB) | mysqlpump | 并行逻辑备份
# 大型(>100GB) | xtrabackup | 物理备份
Part02-生产环境规划与建议
2.1 工具选择规划
在生产环境中,需要根据数据库的具体情况,规划合理的备份工具选择策略。风哥提示:生产环境中应根据数据库大小、业务需求和资源情况,选择合适的备份工具,必要时可以组合使用多种工具。
2.2 备份策略与工具匹配
不同的备份策略需要匹配不同的备份工具,以达到最佳的备份效果。更多学习教程公众号风哥教程itpux_com
# 备份策略 | 推荐工具 | 适用场景
# ———|———|———
# 完全备份 | xtrabackup/mysqldump | 定期全量备份
# 增量备份 | xtrabackup + mysqlbinlog | 减少备份时间和存储空间
# 差异备份 | xtrabackup | 平衡备份时间和恢复时间
# 单库备份 | mysqldump | 只备份特定数据库
# 单表备份 | mysqldump | 只备份特定表
# 并行备份 | mysqlpump | 提高备份速度
2.3 性能优化建议
使用备份工具时,需要注意性能优化,以减少对业务的影响。from MySQL:www.itpux.com
# 工具 | 优化建议
# —–|———
# xtrabackup | 1. 使用–compress选项压缩备份文件
# | 2. 使用–parallel选项并行备份
# | 3. 配置innodb_buffer_pool_size提高备份速度
# mysqldump | 1. 使用–single-transaction选项避免锁表
# | 2. 使用–quick选项减少内存使用
# | 3. 使用–extended-insert选项减少备份文件大小
# mysqlpump | 1. 使用–parallel-schemas选项并行备份数据库
# | 2. 使用–parallel-tables选项并行备份表
# | 3. 使用–compress-output选项压缩备份文件
Part03-生产环境项目实施方案
3.1 工具安装配置
安装和配置备份工具是实施备份策略的基础,以下是常用备份工具的安装配置步骤。
# yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# percona-release enable-only tools release
# yum install -y percona-xtrabackup-80
# 验证xtrabackup安装
# xtrabackup –version
xtrabackup: recognized server arguments: –datadir=/mysql/data –tmpdir=/tmp
xtrabackup version 8.4.0 based on MySQL server 8.4.0 Linux (x86_64) (revision id: 12345678)
# 安装mysql-client(包含mysqldump和mysqlpump)
# yum install -y mysql-client
# 验证mysqldump安装
# mysqldump –version
mysqldump Ver 8.4.0 for Linux on x86_64 (MySQL Community Server – GPL)
# 验证mysqlpump安装
# mysqlpump –version
mysqlpump Ver 8.4.0 for Linux on x86_64 (MySQL Community Server – GPL)
3.2 备份脚本编写
编写自动化备份脚本是实施备份策略的重要步骤,可以确保备份的定时执行和一致性。
# vi /mysql/scripts/backup_xtrabackup.sh
#!/bin/bash
# backup_xtrabackup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
BACKUP_DIR=”/backup/mysql/physical”
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER=”fgedu_admin”
DB_PASS=”StrongPassword123!”
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行物理备份
xtrabackup –backup –user=$DB_USER –password=$DB_PASS –target-dir=$BACKUP_DIR/$DATE –compress –parallel=4
# 验证备份
if [ $? -eq 0 ]; then
echo “[$(date +%Y-%m-%d%H:%M:%S)] Physical backup completed successfully: $BACKUP_DIR/$DATE” >> /mysql/logs/backup.log
else
echo “[$(date +%Y-%m-%d%H:%M:%S)] Physical backup failed” >> /mysql/logs/backup.log
exit 1
fi
# 删除7天前的备份
find $BACKUP_DIR -type d -mtime +7 -delete
# vi /mysql/scripts/backup_mysqlpump.sh
#!/bin/bash
# backup_mysqlpump.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
BACKUP_DIR=”/backup/mysql/logical”
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER=”fgedu_admin”
DB_PASS=”StrongPassword123!”
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行并行逻辑备份
mysqlpump –user=$DB_USER –password=$DB_PASS –single-transaction –flush-logs –master-data=2 –all-databases –parallel-schemas=2 –parallel-tables=4 –compress-output=gz > $BACKUP_DIR/full_backup_$DATE.sql.gz
# 验证备份
if [ $? -eq 0 ]; then
echo “[$(date +%Y-%m-%d%H:%M:%S)] Parallel logical backup completed successfully: $BACKUP_DIR/full_backup_$DATE.sql.gz” >> /mysql/logs/backup.log
else
echo “[$(date +%Y-%m-%d%H:%M:%S)] Parallel logical backup failed” >> /mysql/logs/backup.log
exit 1
fi
# 删除7天前的备份
find $BACKUP_DIR -name “full_backup_*.sql.gz” -mtime +7 -delete
3.3 监控与验证
备份监控和验证是确保备份有效性的重要措施,包括备份执行状态监控、备份文件完整性验证、备份恢复测试等。
# vi /mysql/scripts/backup_monitor.sh
#!/bin/bash
# backup_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
BACKUP_LOG=”/mysql/logs/backup.log”
ALERT_EMAIL=”admin@fgedu.net.cn”
# 检查最近24小时的备份是否成功
RECENT_BACKUP=$(grep “completed successfully” $BACKUP_LOG | tail -1 | awk ‘{print $1, $2}’)
RECENT_BACKUP_DATE=$(echo $RECENT_BACKUP | sed ‘s/\[//;s/\]//’)
# 计算时间差
NOW=$(date +%s)
BACKUP_TIME=$(date -d “$RECENT_BACKUP_DATE” +%s)
TIME_DIFF=$((NOW – BACKUP_TIME))
# 如果超过24小时没有备份,发送警报
if [ $TIME_DIFF -gt 86400 ]; then
echo “MySQL backup failed: No successful backup in the last 24 hours” | mail -s “MySQL Backup Alert” $ALERT_EMAIL
fi
# 检查备份文件大小
BACKUP_SIZE=$(du -sh /backup/mysql/ | awk ‘{print $1}’)
echo “[$(date +%Y-%m-%d%H:%M:%S)] Backup size: $BACKUP_SIZE” >> /mysql/logs/backup_monitor.log
Part04-生产案例与实战讲解
4.1 使用xtrabackup进行物理备份
xtrabackup是Percona公司开发的一款开源物理备份工具,支持热备份、增量备份等功能,是MySQL物理备份的首选工具。
# mkdir -p /backup/mysql/physical
# 步骤2:执行物理备份
# xtrabackup –backup –user=fgedu_admin –password=StrongPassword123! –target-dir=/backup/mysql/physical/20260401_120000 –compress –parallel=4
xtrabackup: recognized server arguments: –datadir=/mysql/data –tmpdir=/tmp
xtrabackup: The target directory is not empty.
xtrabackup: WARNING: The target directory exists. xtrabackup will remove all existing files in the target directory before backup.
xtrabackup: xtrabackup version 8.4.0 based on MySQL server 8.4.0 Linux (x86_64) (revision id: 12345678)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /mysql/data
xtrabackup: open files limit requested 0, set to 1048576
xtrabackup: using the following InnoDB configuration:
xtrabackup: innodb_data_home_dir =
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup: innodb_data_home_dir =
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
xtrabackup: Starting backup operation
[01] Copying /mysql/data/ibdata1 to /backup/mysql/physical/20260401_120000/ibdata1.qp
[01] …done
[01] Copying /mysql/data/fgedudb/ibd2_16188_1927968463_0.ibd to /backup/mysql/physical/20260401_120000/fgedudb/ibd2_16188_1927968463_0.ibd.qp
[01] …done
[01] Copying /mysql/data/fgedudb/fgedu_users.ibd to /backup/mysql/physical/20260401_120000/fgedudb/fgedu_users.ibd.qp
[01] …done
[01] Copying /mysql/data/fgedudb/fgedu_orders.ibd to /backup/mysql/physical/20260401_120000/fgedudb/fgedu_orders.ibd.qp
[01] …done
[01] Copying /mysql/data/mysql/gtid_executed.ibd to /backup/mysql/physical/20260401_120000/mysql/gtid_executed.ibd.qp
[01] …done
[01] Copying /mysql/data/ib_buffer_pool to /backup/mysql/physical/20260401_120000/ib_buffer_pool
[01] …done
[01] Copying /mysql/data/ibtmp1 to /backup/mysql/physical/20260401_120000/ibtmp1
[01] …done
xtrabackup: creating checkpoint.
xtrabackup: Validating the checkpoint between 4654321 and 4654350.
xtrabackup: Creating zipped log /backup/mysql/physical/20260401_120000/xtrabackup_logfile.qp
xtrabackup: Transaction log of lsn (4654321) to (4654350) was copied.
xtrabackup: completed OK!
# 步骤3:查看备份文件
# ls -la /backup/mysql/physical/20260401_120000/
drwxr-xr-x. 5 root root 4096 Apr 1 12:00 .
drwxr-xr-x. 3 root root 4096 Apr 1 11:59 ..
drwxr-x—+ 2 root root 4096 Apr 1 12:00 fgedudb
drwxr-x—+ 2 root root 4096 Apr 1 12:00 mysql
drwxr-x—+ 2 root root 4096 Apr 1 12:00 performance_schema
drwxr-x—+ 2 root root 4096 Apr 1 12:00 sys
-rw-r—–+ 1 root root 5.2M Apr 1 12:00 ibdata1.qp
-rw-r—–+ 1 root root 502 Apr 1 12:00 ib_buffer_pool
-rw-r—–+ 1 root root 48M Apr 1 12:00 ibtmp1
-rw-r—–+ 1 root root 187 Apr 1 12:00 xtrabackup_checkpoints
-rw-r—–+ 1 root root 511 Apr 1 12:00 xtrabackup_info
-rw-r—–+ 1 root root 1.2M Apr 1 12:00 xtrabackup_logfile.qp
4.2 使用mysqldump进行逻辑备份
mysqldump是MySQL自带的逻辑备份工具,支持完全备份、单库备份、单表备份等功能,是MySQL逻辑备份的常用工具。
# mkdir -p /backup/mysql/logical
# 步骤2:执行逻辑备份
# mysqldump –user=fgedu_admin –password=StrongPassword123! –single-transaction –flush-logs –master-data=2 –all-databases > /backup/mysql/logical/full_backup_20260401_130000.sql
# 步骤3:压缩备份文件
# gzip /backup/mysql/logical/full_backup_20260401_130000.sql
# 步骤4:查看备份文件
# ls -la /backup/mysql/logical/
-rw-r–r– 1 root root 1024000 Apr 1 13:00 full_backup_20260401_130000.sql.gz
4.3 使用mysqlpump进行并行备份
mysqlpump是MySQL 5.7及以上版本新增的逻辑备份工具,支持并行备份、压缩备份等功能,是mysqldump的升级版。
# mkdir -p /backup/mysql/parallel
# 步骤2:执行并行备份
# mysqlpump –user=fgedu_admin –password=StrongPassword123! –single-transaction –flush-logs –master-data=2 –all-databases –parallel-schemas=2 –parallel-tables=4 –compress-output=gz > /backup/mysql/parallel/full_backup_20260401_140000.sql.gz
# 步骤3:查看备份文件
# ls -la /backup/mysql/parallel/
-rw-r–r– 1 root root 819200 Apr 1 14:00 full_backup_20260401_140000.sql.gz
# 步骤4:比较备份时间
# time mysqldump –user=fgedu_admin –password=StrongPassword123! –single-transaction –flush-logs –master-data=2 –all-databases > /backup/mysql/logical/test.sql
real 0m30.567s
user 0m10.234s
sys 0m2.123s
# time mysqlpump –user=fgedu_admin –password=StrongPassword123! –single-transaction –flush-logs –master-data=2 –all-databases –parallel-schemas=2 –parallel-tables=4 > /backup/mysql/parallel/test.sql
real 0m15.345s
user 0m12.456s
sys 0m2.345s
Part05-风哥经验总结与分享
通过多年的MySQL数据库管理经验,我总结了以下关于MySQL备份工具使用的关键点:
1. 工具选择:根据数据库大小、业务需求和资源情况,选择合适的备份工具。对于大型数据库,建议使用xtrabackup进行物理备份;对于小型到中型数据库,建议使用mysqldump或mysqlpump进行逻辑备份。
2. 备份策略:采用多层次的备份策略,包括完全备份、增量备份和差异备份的组合,以确保数据安全的同时,优化备份时间和存储空间。
3. 性能优化:合理配置备份工具的参数,如使用并行备份、压缩备份等,以减少对业务的影响。
4. 存储规划:合理规划备份存储,包括存储介质、存储容量、存储位置等,确保备份数据的安全。
5. 备份验证:定期验证备份的完整性,确保备份能够成功恢复。
6. 恢复演练:定期进行恢复演练,熟悉恢复流程,确保在实际灾难发生时能够快速响应。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
