«

MySQL 备份恢复实战

时间:2026-10-7 07:09     作者:emer     分类: 无


MySQL 备份与恢复实战

数据库备份是运维的基本功,万一数据丢了,没有备份就完蛋了。这篇整理常用的备份恢复方法。

1. mysqldump 逻辑备份

最常用的备份工具,生成 SQL 文件。

备份整个数据库:

mysqldump -u root -p123456 blog > blog_$(date +%Y%m%d).sql

备份单张表:

mysqldump -u root -p123456 blog users > users.sql

备份所有数据库:

mysqldump -u root -p123456 --all-databases > all.sql

常用参数:

2. 恢复数据

# 恢复整个数据库
mysql -u root -p123456 blog < blog_20261007.sql

# 登录后恢复
mysql -u root -p123456
mysql> use blog;
mysql> source /root/blog_20261007.sql;

3. 压缩备份

数据大的时候,直接存 SQL 太占空间,压缩一下:

# 备份并压缩
mysqldump -u root -p123456 blog | gzip > blog_$(date +%Y%m%d).sql.gz

# 恢复压缩备份
gunzip < blog_20261007.sql.gz | mysql -u root -p123456 blog

4. 全量+增量备份

大数据量不能每天全量备份,用 binlog 做增量。

全量备份:

mysqldump -u root -p123456 --single-transaction --master-data=2 blog > full.sql

增量恢复:

# 先恢复全量
mysql -u root -p123456 blog < full.sql

# 再按时间点恢复 binlog
mysqlbinlog --start-datetime="2026-10-07 10:00:00" \
            --stop-datetime="2026-10-07 14:00:00" \
            /var/lib/mysql/binlog.000001 | mysql -u root -p123456

5. 物理备份(冷备)

直接拷贝数据文件,速度快,但需要停库。

# 停库
systemctl stop mysqld

# 拷贝数据目录
cp -r /var/lib/mysql /backup/mysql_$(date +%Y%m%d)

# 启动
systemctl start mysqld

6. 定时备份脚本

写个脚本每天自动备份:

#!/bin/bash
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d)
USER="root"
PASS="123456"

# 创建目录
mkdir -p $BACKUP_DIR

# 备份并压缩
mysqldump -u$USER -p$PASS --single-transaction blog | gzip > $BACKUP_DIR/blog_$DATE.sql.gz

# 删除7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

加到 crontab:

0 3 * * * /bin/bash /root/mysql_backup.sh

7. 恢复注意事项

总结

MySQL 备份三件事:

数据无价,备份一定要做好。

标签: MySQL 运维 mysqldump 备份 恢复