在Linux系统中备份MySQL数据库是日常运维中至关重要的任务,通过合理的备份策略可以有效防止数据丢失,以下是常用的MySQL数据库备份命令及相关操作方法的详细介绍。

使用mysqldump命令进行逻辑备份
mysqldump是MySQL自带的逻辑备份工具,能够将数据库结构和数据导出为SQL文件,适合中小型数据库的备份操作。
备份单个数据库
mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件路径].sql
备份名为testdb的数据库到/backup/testdb_backup.sql:
mysqldump -u root -ptest123 testdb > /backup/testdb_backup.sql
注意:-p后直接跟密码时不能有空格,建议通过交互式输入密码更安全(去掉密码参数,执行后输入密码)。
备份多个数据库
mysqldump -u [用户名] -p[密码] --databases [数据库1] [数据库2] > [备份文件路径].sql
例如同时备份db1和db2:

mysqldump -u root -p --databases db1 db2 > /backup/multi_db_backup.sql
备份所有数据库
mysqldump -u [用户名] -p[密码] --all-databases > [备份文件路径].sql
只备份数据库结构(不包含数据)
mysqldump -u [用户名] -p[密码] --no-data [数据库名] > [备份文件路径].sql
只备份数据(不包含结构)
mysqldump -u [用户名] -p[密码] --no-create-info [数据库名] > [备份文件路径].sql
使用mysqlhotcopy进行快速备份
mysqlhotcopy适用于MyISAM引擎的数据库,通过锁定表并直接复制数据文件实现快速备份,但需安装DBI和DBD-mysql模块:
mysqlhotcopy -u [用户名] -p[密码] [数据库名] /backup/directory
使用mysqldump进行压缩备份
为节省存储空间,可通过管道将备份文件直接压缩:
mysqldump -u [用户名] -p[密码] [数据库名] | gzip > /backup/[数据库名].sql.gz
定时备份脚本示例
通过crab设置定时任务,实现每日自动备份:
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
MYSQL_USER="root"
MYSQL_PASSWORD="test123"
# 备份单个数据库并压缩
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD testdb | gzip > $BACKUP_DIR/testdb_$DATE.sql.gz
# 删除7天前的备份文件
find $BACKUP_DIR -name "testdb_*.sql.gz" -mtime +7 -exec rm {} \;
将脚本保存为/backup/mysql_backup.sh,添加执行权限后,通过crontab -e添加定时任务:

0 2 * * * /backup/mysql_backup.sh
备份恢复命令
恢复SQL文件:
mysql -u [用户名] -p[密码] [数据库名] < [备份文件路径].sql
恢复压缩文件:
gunzip < [备份文件路径].sql.gz | mysql -u [用户名] -p[密码] [数据库名]
备份参数说明表
| 参数 | 说明 |
|---|---|
-u |
指定MySQL用户名 |
-p |
指定密码(建议交互式输入) |
--databases |
备份多个数据库 |
--all-databases |
备份所有数据库 |
--no-data |
只导出结构 |
--no-create-info |
只导出数据 |
--single-transaction |
适用于InnoDB引擎,避免锁表 |
--master-data=2 |
记录binlog位置,用于主从复制恢复 |
相关问答FAQs
Q1: 如何确保备份文件的安全性?
A1: 可通过以下方式增强安全性:
- 设置文件权限为600(仅所有者可读写):
chmod 600 [备份文件] - 加密备份文件:使用
gpg加密后存储,如mysqldump ... | gpg -c > backup.sql.gz.gpg - 将备份文件存储到异地服务器或云存储,避免与主服务器同时故障。
Q2: 备份时如何避免锁表影响业务?
A2: 对于InnoDB引擎,可使用--single-transaction参数实现热备份,该参数通过事务快照避免锁表:
mysqldump -u root -p --single-transaction testdb > /backup/testdb.sql
对于MyISAM引擎,需在业务低峰期执行备份,或使用--lock-tables=false(但可能导致数据不一致,需谨慎)。
