MySQL 数据导出及备份方法
MySQL 数据导出及备份方法
使用 mysqldump 工具
mysqldump 是 MySQL 官方提供的逻辑备份工具,适合中小型数据库备份。
基本导出命令格式如下:
mysqldump -u [用户名] -p[密码] [数据库名] > [输出文件.sql]
导出整个数据库:
mysqldump -u root -p mydatabase > backup.sql
导出特定表:
mysqldump -u root -p mydatabase table1 table2 > tables_backup.sql
导出数据库结构(不含数据):
mysqldump -u root -p --no-data mydatabase > schema_only.sql
使用 SELECT INTO OUTFILE
适合导出单表数据为 CSV 格式:
SELECT * INTO OUTFILE '/tmp/table_export.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM table_name;
物理备份(直接复制文件)
对于 InnoDB 存储引擎,可通过复制数据文件实现热备份:
- 执行
FLUSH TABLES WITH READ LOCK
锁定所有表 - 复制
/var/lib/mysql
目录下的数据库文件 - 执行
UNLOCK TABLES
释放锁
使用 MySQL Enterprise Backup
商业版工具,支持增量备份和热备份:
mysqlbackup --user=root --password --backup-dir=/backup backup
自动化备份脚本示例
创建每日自动备份脚本(保存为 /usr/local/bin/mysql_backup.sh
):
#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -u root -pPASSWORD --all-databases | gzip > /backup/mysql_$DATE.sql.gz
find /backup/ -type f -mtime +7 -exec rm {} \;
重要参数说明
--single-transaction
:对 InnoDB 表执行无锁导出--routines
:包含存储过程和函数--events
:包含事件调度器--triggers
:包含触发器--master-data=2
:记录二进制日志位置(主从复制场景)
恢复数据方法
从 mysqldump 文件恢复:
mysql -u root -p mydatabase < backup.sql
从 CSV 文件导入:
LOAD DATA INFILE '/tmp/table_export.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
注意事项
- 备份前确保有足够的磁盘空间
- 定期验证备份文件的完整性
- 重要数据建议采用异地备份策略
- 对于大型数据库,考虑使用 Percona XtraBackup 等专业工具