«

MySQL 备份与恢复:mysqldump 实战指南

时间:2026-10-4 10:18     作者:emer     分类: 无


前言

数据库备份是生产环境的生命线。很多人没出事的时候不备份,出事了才后悔。本文讲清楚 MySQL 最常用的备份工具 mysqldump。

一、为什么要备份

记住:没有备份的数据库,就是在裸奔。

二、mysqldump 是什么

mysqldump 是 MySQL 自带的逻辑备份工具,把数据导出成 SQL 文件。

优点:简单、通用、跨版本
缺点:大数据量慢

适合:中小数据库(< 50G)

三、备份数据库

1. 备份整个数据库

mysqldump -u root -p 数据库名 > backup.sql

输入密码后,就会生成 backup.sql 文件。

2. 备份所有数据库

mysqldump -u root -p --all-databases > all_backup.sql

3. 备份单个表

mysqldump -u root -p 数据库名 表名 > table_backup.sql

4. 备份多个表

mysqldump -u root -p 数据库名 表1 表2 > multi_backup.sql

四、恢复数据库

1. 恢复整个数据库

mysql -u root -p 数据库名 < backup.sql

注意:数据库要先存在。

CREATE DATABASE 数据库名;

2. 恢复所有数据库

mysql -u root -p < all_backup.sql

五、常用参数

--single-transaction

InnoDB 引擎下,保证备份一致性,不锁表:

mysqldump -u root -p --single-transaction 数据库名 > backup.sql

生产环境一定要加这个!

--routines

备份存储过程和函数:

mysqldump -u root -p --routines 数据库名 > backup.sql

--triggers

备份触发器:

mysqldump -u root -p --triggers 数据库名 > backup.sql

--events

备份事件调度器:

mysqldump -u root -p --events 数据库名 > backup.sql

--no-data

只备份表结构,不备份数据:

mysqldump -u root -p --no-data 数据库名 > schema.sql

--where

按条件备份:

mysqldump -u root -p 数据库名 表名 --where="id > 100" > partial.sql

六、完整备份命令

生产环境推荐用这个:

mysqldump -u root -p \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --default-character-set=utf8mb4 \
  数据库名 > backup.sql

七、压缩备份

备份文件太大?压缩一下:

# 备份并压缩
mysqldump -u root -p 数据库名 | gzip > backup.sql.gz

# 解压并恢复
gunzip < backup.sql.gz | mysql -u root -p 数据库名

八、定时备份

写个脚本每天自动备份:

#!/bin/bash

# 备份目录
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d)

# 备份
mysqldump -u root -p密码 --single-transaction 数据库名 | gzip > $BACKUP_DIR/db_$DATE.sql.gz

# 删除 7 天前的备份
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +7 -delete

加到 crontab:

# 每天凌晨 2 点备份
0 2 * * * /bin/bash /path/to/backup.sh

九、常见坑

  1. 备份不锁表:大表备份会锁表,一定要加 --single-transaction
  2. 字符集不对:备份文件乱码,加 --default-character-set=utf8mb4
  3. 没备份存储过程:导出后丢了,加 --routines
  4. 备份没验证:备份完一定要试恢复,不然真出事的时候哭都来不及

十、备份策略

总结

MySQL 备份的核心要点:

  1. mysqldump 是最常用的备份工具
  2. 生产环境加 --single-transaction,不锁表
  3. 备份要压缩,节省空间
  4. 定时备份,自动删除旧备份
  5. 备份一定要验证,能恢复才算备份成功

数据是公司最值钱的资产,备份这事儿千万别偷懒。

标签: MySQL 数据库 mysqldump 备份 恢复