MySQL命令行备份数据库是数据库管理员和开发者常用的操作,主要通过mysqldump
工具实现,该工具支持全量备份、增量备份(需结合二进制日志)和结构/数据分离备份等多种方式,以下是详细操作步骤及注意事项:

基础备份命令
-
完整备份(含结构和数据)
备份单个数据库:mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
备份多个数据库:
mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > 备份文件.sql
备份所有数据库:
mysqldump -u用户名 -p密码 --all-databases > 备份文件.sql
-
仅备份结构或数据
仅备份数据结构:(图片来源网络,侵删)mysqldump -u用户名 -p密码 -d 数据库名 > 结构文件.sql
仅备份数据(无结构):
mysqldump -u用户名 -p密码 -t 数据库名 > 数据文件.sql
高级备份选项
-
压缩备份
使用gzip
压缩减少文件体积:mysqldump -u用户名 -p密码 数据库名 | gzip > 备份文件.sql.gz
-
分表备份
通过--tables
指定表名:mysqldump -u用户名 -p密码 数据库名 表1 表2 > 分表备份.sql
-
排除特定表
使用--ignore-table
参数:(图片来源网络,侵删)mysqldump -u用户名 -p密码 数据库名 --ignore-table=数据库名.要排除的表 > 备份文件.sql
-
单事务备份(确保一致性)
对于InnoDB引擎,使用--single-transaction
避免锁表:mysqldump -u用户名 -p密码 --single-transaction 数据库名 > 一致性备份.sql
备份恢复操作
-
恢复完整数据库
mysql -u用户名 -p密码 数据库名 < 备份文件.sql
若目标数据库不存在,需先创建:
mysql -u用户名 -p密码 -e "CREATE DATABASE 数据库名" mysql -u用户名 -p密码 数据库名 < 备份文件.sql
-
恢复部分数据
仅恢复特定表:mysql -u用户名 -p密码 数据库名 < 备份文件.sql
自动化备份脚本示例
通过Linux crontab
设置定时任务(每天凌晨2点备份):
0 2 * * * /usr/bin/mysqldump -u root -p'密码' 数据库名 | gzip /backup/mysql_$(date +\%Y\%m\%d).sql.gz
注意:密码直接写在脚本中存在安全风险,建议使用.my.cnf
配置文件存储凭据。
备份注意事项
- 权限要求:执行备份的用户需具备
SELECT
、LOCK TABLES
(非InnoDB)等权限。 - 存储位置:备份文件需存储在非数据库服务器节点,防止服务器宕机数据丢失。
- 定期验证:需定期测试备份文件的可用性,确保恢复流程正常。
- 日志配合:增量备份需开启二进制日志(
log-bin
),并通过mysqlbinlog
工具解析。
相关问答FAQs
Q1: 如何备份远程MySQL数据库?
A1: 使用-h
参数指定主机地址,
mysqldump -u用户名 -p密码 -h 192.168.1.100 数据库名 > 远程备份.sql
需确保目标数据库服务器允许远程连接,且防火墙放行3306端口。
Q2: 备份文件过大时如何分卷压缩?
A2: 使用split
命令分割文件,
mysqldump -u用户名 -p密码 数据库名 | gzip | split -b 100M - 备份文件.sql.gz.
恢复时通过cat 备份文件.sql.gz.* | gunzip | mysql -u用户名 -p密码 数据库名
合并执行。