mysqldump 是 MySQL 数据库的逻辑备份工具,用于将数据库导出为 SQL 脚本文件。它是 MySQL 运维中最核心、最常用的备份命令之一。
核心作用
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql
本质:把数据库中的表结构 + 数据转换成一条条的 SQL 语句(CREATE TABLE、INSERT INTO),保存到文件中。
mysqldump vs mysql 对比
| 命令 | 角色 | 作用 |
|---|---|---|
mysql | 客户端 | 连接数据库,执行 SQL 语句 |
mysqldump | 备份工具 | 导出数据库为 SQL 文件 |
mysqladmin | 管理工具 | 执行管理操作(如修改密码、查看状态) |
基本用法
1. 备份单个数据库
# 备份 wordpress 数据库
mysqldump -u root -p wordpress > /backup/wordpress_$(date +%Y%m%d).sql
# 输入密码后,就会生成一个 SQL 文件
2. 备份多个数据库
# 备份多个指定数据库
mysqldump -u root -p --databases db1 db2 db3 > multi_db.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_db.sql
3. 只备份表结构(不要数据)
mysqldump -u root -p -d wordpress > wordpress_structure.sql
4. 只备份数据(不要表结构)
mysqldump -u root -p --no-create-info wordpress > wordpress_data.sql
在 LNMP 环境中(比如是二进制安装的时候)
如果二进制部署的 MySQL 在 /usr/local/mysql/bin/,那么:
# 使用完整路径
/usr/local/mysql/bin/mysqldump -u root -p wordpress > /backup/wp_$(date +%Y%m%d).sql
# 或者先加到 PATH
export PATH=$PATH:/usr/local/mysql/bin
mysqldump -u root -p wordpress > /backup/wp.sql
高级用法
1. 压缩备份(节省空间)
mysqldump -u root -p wordpress | gzip > wordpress.sql.gz
# 恢复时
gunzip < wordpress.sql.gz | mysql -u root -p wordpress
2. 备份并记录二进制日志位置(用于主从复制)
mysqldump -u root -p --master-data=2 --all-databases > backup.sql
# --master-data=2 会在备份文件中记录 binlog 文件名和位置
3. 备份特定表
mysqldump -u root -p wordpress wp_posts wp_comments > posts_comments.sql
4. 远程备份
# 从远程服务器备份到本地
mysqldump -h 192.168.1.100 -u root -p wordpress > remote_backup.sql
备份与恢复完整示例
备份
# 1. 创建备份目录
mkdir -p /backup/mysql
# 2. 备份 wordpress 数据库(带日期)
mysqldump -u root -p wordpress > /backup/mysql/wordpress_$(date +%Y%m%d_%H%M%S).sql
# 3. 查看备份文件
ls -lh /backup/mysql/
恢复
# 方法1:恢复到原有数据库
mysql -u root -p wordpress < /backup/mysql/wordpress_20260307.sql
# 方法2:先创建空数据库再恢复
mysql -u root -p -e "CREATE DATABASE wordpress_new"
mysql -u root -p wordpress_new < /backup/mysql/wordpress_20260307.sql
注意事项
| 注意点 | 说明 |
|---|---|
| 备份会锁表 | 默认会锁表,影响写入。生产环境加 --single-transaction(InnoDB) |
| 空间问题 | 大数据库备份前确认磁盘空间足够 |
| 恢复前确认 | 恢复会覆盖数据,先确认目标数据库是否正确 |
| 定期备份 | 配合 crontab 实现自动备份 |
生产环境推荐写法
# InnoDB 表推荐用 --single-transaction,不锁表
mysqldump -u root -p --single-transaction --routines --events wordpress | gzip > wp_$(date +%Y%m%d).sql.gz
一句话总结
mysqldump 是 MySQL 的“拍照工具”,能把数据库拍成 SQL 照片(备份文件),需要时再把照片还原成数据库!
发表回复