最简命令是:mysqldump -u root -p database_name table_name > table.sql,适用于本地开发或低流量环境,无需额外参数即可导出表结构和数据。

用 mysqldump 导出单张表最简命令是什么?
直接导出一张表的最小可行命令是:mysqldump -u root -p database_name table_name > table.sql。注意这里没加 --single-transaction 或 --skip-lock-tables,适合本地开发或低流量环境。如果执行时卡住或报错 Access denied,大概率是账号没权限——mysqldump 需要 SELECT、LOCK TABLES(除非显式跳过)和 SHOW VIEW 权限。
- 如果只想导数据不导建表语句,加
--no-create-info - 如果只要建表语句不要数据,加
--no-data - 如果表名含特殊字符(如横线),必须用反引号包裹:
<code>my-table
导出时出现 Lock wait timeout exceeded 怎么办?
这是 MySQL 在尝试锁表时等太久失败了,常见于大表或高并发写入场景。默认 mysqldump 会执行 FLUSH TABLES WITH READ LOCK(对整个库加全局读锁),不是只锁单表。
- 加
--skip-lock-tables可跳过锁表,但可能导出不一致快照(比如导出中途该表被更新) - 更稳妥的是加
--single-transaction:它利用 MVCC 创建一致性快照,仅对 InnoDB 表有效,MyISAM 不支持 - 如果用的是 MyISAM 或混合引擎,又不能停写,只能考虑先
CREATE TABLE ... SELECT复制一份再 dump,或者用SELECT INTO OUTFILE(但受secure_file_priv路径限制)
导出 CSV 格式而不是 SQL 怎么做?
mysqldump 默认只输出 SQL,要 CSV 得换方式。最常用的是用 mysql 客户端配合 SELECT ... INTO OUTFILE:
mysql -u root -p -e "SELECT * FROM database_name.table_name" | sed 's/\t/,/g' > table.csv
但更可靠的是在数据库内执行:
SELECT * FROM table_name INTO OUTFILE '/tmp/table.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
注意:INTO OUTFILE 写出路径必须是 MySQL 服务端本地路径,且受 secure_file_priv 配置限制,查这个值用 SHOW VARIABLES LIKE 'secure_file_priv';。
导出大表时内存爆掉或超时怎么调?
mysqldump 默认逐行读取,但某些版本或参数组合下会把整张表加载进内存(尤其加了 --compact 或 --hex-blob 后)。真正影响内存的是 --net_buffer_length 和 --max_allowed_packet。
- 加
--net-buffer-length=4096控制每次网络包大小,避免缓冲区撑爆 - 加
--max-allowed-packet=256M(根据实际调,不能超过服务端配置) - 对超大表,建议分批导:用
WHERE条件拆成多个mysqldump ... --where="id BETWEEN 1 AND 10000",但得确保有合适索引字段
导出路径权限、字符集不一致导致乱码、以及 sql_mode 差异引发导入失败,这些都得在导出前确认——不是命令本身的问题,而是上下文环境没对齐。


















