备份和恢复 MySQL 数据有多种方式,最常见的是使用 mysqldump
进行备份和 mysql
进行恢复。下面介绍几种方法:
一、使用 mysqldump
进行备份
mysqldump
是 MySQL 提供的命令行工具,用于导出数据库数据和结构。
1. 备份整个数据库
mysqldump -u root -p your_database > backup.sql
说明:
-u root
:指定 MySQL 用户(这里是root
)。-p
:提示输入密码。your_database
:要备份的数据库名称。>
:将输出重定向到backup.sql
文件。
2. 备份特定表
mysqldump -u root -p your_database table1 table2 > backup_tables.sql
- 只备份
table1
和table2
两张表的数据。
3. 备份所有数据库
mysqldump -u root -p --all-databases > all_backup.sql
- 备份 所有 数据库,包括
mysql
和information_schema
。
4. 备份时包含 CREATE DATABASE
语句
mysqldump -u root -p --databases your_database --add-drop-database > backup_with_create.sql
- 这样恢复时会自动创建数据库。
5. 备份时忽略特定表
mysqldump -u root -p your_database --ignore-table=your_database.table1 > backup_without_table1.sql
- 忽略
table1
表。
6. 备份时压缩数据
mysqldump -u root -p your_database | gzip > backup.sql.gz
- 使用
gzip
压缩,减少备份文件大小。
二、恢复 MySQL 数据
1. 恢复单个数据库
mysql -u root -p your_database < backup.sql
或者:
cat backup.sql | mysql -u root -p your_database
注意:确保 your_database
已经存在,否则需要先创建:
mysql -u root -p -e "CREATE DATABASE your_database;"
2. 恢复包含 CREATE DATABASE
语句的备份
mysql -u root -p < backup_with_create.sql
- 如果
backup.sql
里包含CREATE DATABASE
语句,不需要手动创建数据库。
3. 恢复所有数据库
mysql -u root -p < all_backup.sql
- 适用于
--all-databases
备份。
4. 从压缩备份恢复
gunzip < backup.sql.gz | mysql -u root -p your_database
- 先解压,然后导入。
5. 恢复特定表
mysql -u root -p your_database < backup_tables.sql
- 只恢复某些表的数据。
三、其他备份方法
1. 直接拷贝 MySQL 数据目录(适用于 Innodb)
如果 MySQL 服务器关闭,可以直接复制 /var/lib/mysql/
目录:
cp -r /var/lib/mysql /backup/
恢复时:
cp -r /backup/mysql /var/lib/
chown -R mysql:mysql /var/lib/mysql
然后启动 MySQL:
systemctl start mysql
⚠️ 注意:
- 这种方式只适用于 MyISAM,Innodb 需要额外处理事务日志。
- 复制数据目录前,必须 先停止 MySQL 服务。
2. 使用 mysqlpump
(更快的并行备份工具)
mysqlpump -u root -p --default-parallelism=4 --databases your_database > backup.sql
mysqlpump
是 MySQL 5.7 及以上版本的新备份工具,支持并行处理。
四、定时自动备份(Linux)
可以使用 cron
定时备份:
crontab -e
添加以下定时任务,每天凌晨 2 点备份数据库:
0 2 * * * mysqldump -u root -p'your_password' your_database | gzip > /backup/backup_$(date +\%F).sql.gz
$(date +\%F)
生成类似2025-03-10
的日期。
总结
方式 | 备份命令 | 恢复命令 |
---|---|---|
备份单个数据库 | mysqldump -u root -p your_database > backup.sql | mysql -u root -p your_database < backup.sql |
备份特定表 | mysqldump -u root -p your_database table1 table2 > backup.sql | mysql -u root -p your_database < backup.sql |
备份所有数据库 | mysqldump -u root -p --all-databases > all_backup.sql | mysql -u root -p < all_backup.sql |
备份并压缩 | `mysqldump -u root -p your_database | gzip > backup.sql.gz` |
直接拷贝数据目录 | cp -r /var/lib/mysql /backup/ | cp -r /backup/mysql /var/lib/mysql/ && chown -R mysql:mysql /var/lib/mysql |
如果你是 个人/小型项目,mysqldump
足够了;如果是 大规模数据库,可以考虑 mysqlpump
或 XtraBackup
(适用于大数据量的 物理备份)。