使用mysqldump命令是最简单高效的方法:mysqldump -u用户名 -p密码 数据库名 > 导出文件.sql。这会导出整个数据库的结构和数据。高效操作包括指定--single-transaction选项避免锁表,--quick快速导出大表,--routines导出存储过程。
方法一:mysqldump命令导出
mysqldump -u root -p test > test.sql # 导出数据库test的所有表 mysqldump -u root -p test table1 table2 > tables.sql # 只导出指定表 mysqldump -u root -p --all-databases > all.sql # 导出所有数据库 --single-transaction --routines --triggers
方法二:SELECT INTO OUTFILE
SELECT * FROM table INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; 这适合导出CSV格式的数据文件,直接从查询结果导出,速度很快。
高效技巧:使用--where条件导出部分数据
mysqldump -u root -p db_name table_name --where="id>1000" > partial.sql 只导出id大于1000的记录,避免全表扫描,提高效率。对于大表导出,分批使用LIMIT和OFFSET。
代码示例:Python脚本批量导出
import pymysql import os conn = pymysql.connect(host='localhost', user='root', password='pwd', db='test') cursor = conn.cursor() cursor.execute("SHOW TABLES") for table in cursor: mysqldump -u root -p test table_name > table.sql cursor.close() conn.close()
Navicat图形化导出
在Navicat中右键数据库-转储SQL文件-结构和数据,或导出为CSV/Excel。高效设置:选择快速导出模式,分卷备份大数据库,避免内存溢出。
大表导出优化
使用mysqldump --quick --lock-tables=false --single-transaction,对于亿级大表,先停写服务,或使用pt-archiver工具分片归档导出,结合--tab选项生成TSV文件。
FAQ
Q: mysqldump导出时表被锁怎么办?
A: 加--single-transaction --quick参数,读锁不影响写操作。
Q: 如何导出特定日期的数据?
A: mysqldump --where="date>'2023-01-01'"。
Q: CSV导出乱码怎么解决?
A: 指定CHARACTER SET utf8,并用LOAD DATA时设置正确编码。
Q: 怎么恢复导出的SQL文件?
A: mysql -u root -p db_name < backup.sql。