MySQL 数据库备份与恢复详解(分步指南)

一、备份方法分类

逻辑备份

通过 SQL 语句导出数据结构+数据(常用工具:mysqldump)。优点:跨平台、跨版本兼容性强。缺点:大数据库备份/恢复速度较慢。

物理备份

直接复制数据库文件(如 InnoDB 的 .ibd 文件或 MyISAM 的 .MYD/.MYI 文件)。优点:速度快,适合大型数据库。缺点:需停止服务或锁表,版本兼容性差。

工具备份

使用专业工具(如 Percona XtraBackup、MySQL Enterprise Backup)。特点:支持热备份、增量备份,适合生产环境。

二、逻辑备份与恢复(mysqldump)

1. 全库备份

bash复制代码

# 导出所有数据库(需权限)mysqldump -u root -p --all-databases > all_databases.sql# 导出指定数据库mysqldump -u root -p --databases db1 db2 > dbs.sql

2. 单库/单表备份

bash复制代码

# 导出单个数据库mysqldump -u root -p dbname > dbname.sql# 导出指定表(仅结构或仅数据)mysqldump -u root -p dbname table1 table2 --no-data # 仅结构mysqldump -u root -p dbname table1 --where="id<100" # 条件导出

3. 恢复数据

bash复制代码

# 全库恢复(需先创建数据库或指定 --all-databases)mysql -u root -p < all_databases.sql# 指定数据库恢复mysql -u root -p dbname < dbname.sql# 从指定位置恢复(如恢复单表)sed -n '/-- Table structure for table `table1`/,/UNLOCK TABLES/p' dbname.sql | mysql -u root -p dbname

三、物理备份与恢复

1. 停止 MySQL 服务

bash复制代码

sudo systemctl stop mysql

2. 复制数据文件

bash复制代码

# 默认数据目录(路径可能不同)cp -r /var/lib/mysql /backup/mysql_backup

3. 恢复数据

bash复制代码

# 停止 MySQL 服务sudo systemctl stop mysql# 替换数据目录cp -r /backup/mysql_backup/* /var/lib/mysql/# 修改文件权限(重要!)chown -R mysql:mysql /var/lib/mysql# 启动 MySQLsudo systemctl start mysql

四、高级备份工具(Percona XtraBackup)

1. 安装工具

bash复制代码

# Ubuntu/Debianapt-get install percona-xtrabackup-24

2. 全量热备份

bash复制代码

xtrabackup --user=root --password=密码 --backup --target-dir=/backup/xtra_backup

3. 增量备份

bash复制代码

xtrabackup --user=root --password=密码 --backup --target-dir=/backup/incremental \--incremental-basedir=/backup/xtra_backup

4. 恢复数据

bash复制代码

# 准备全量备份xtrabackup --prepare --apply-log-only --target-dir=/backup/xtra_backup# 合并增量备份xtrabackup --prepare --apply-log-only --target-dir=/backup/xtra_backup \--incremental-dir=/backup/incremental# 复制到数据目录xtrabackup --copy-back --target-dir=/backup/xtra_backup# 修改权限并启动 MySQLchown -R mysql:mysql /var/lib/mysqlsystemctl start mysql

五、自动化备份策略

Cron 定时任务

bash复制代码

# 每天凌晨备份,保留7天0 2 * * * /usr/bin/mysqldump -u root -p密码 --all-databases | gzip > /backup/mysql_$(date +\%Y\%m\%d).sql.gzfind /backup/ -name "*.sql.gz" -mtime +7 -delete

云存储同步

使用 rclone 或 aws s3 sync 将备份文件上传至云端。

六、注意事项

一致性备份

使用 FLUSH TABLES WITH READ LOCK(MyISAM)或 innodb_support_xa=1(InnoDB)确保数据一致性。

大文件处理

分卷压缩:mysqldump ... | gzip | split -b 100M -并行恢复:pv large_dump.sql | mysql -u root -p

权限验证

确保备份用户有 SELECT, SHOW VIEW, TRIGGER, LOCK TABLES 权限。

测试恢复流程

定期在测试环境验证备份可用性。

七、常见错误处理

恢复时出现表已存在错误

sql复制代码

-- 导入时添加参数mysql -u root -p --force dbname < dbname.sql

字符集不一致

在 my.cnf 中明确设置 character_set_server=utf8mb4。

InnoDB 表空间问题

使用 innodb_force_recovery 参数尝试修复(谨慎操作!)。

通过合理选择备份策略并严格测试恢复流程,可最大限度保障数据库安全与业务连续性。


手机上还有哪些软件可以借钱?这几个正规平台别错过!
英魂之刃有什么服务器