mysqldump -u root -p --single-transaction shop orders --result-file=orders.sql 从库里导出一张表,mysql shop < orders.sql 再把它放回去,并且不碰其他任何表。简短答案藏起了两件事:导出文件以 DROP TABLE IF EXISTS 开头,而 --where 能让你只导出关心的那些行。
1. 导出一张表
$ clai 导出 shop 库里的 orders 表→ mysqldump -h my8 -uroot -p --single-transaction shop orders --result-file=orders.sql
先写库名,再用空格列出表名。--single-transaction 让 InnoDB 在不加锁的情况下完成导出——面对线上库,这个参数不是可选项。用 --result-file 而不是 >,可以保住换行符,也不会让报错文本混进导出文件里。
2. 这样的导出文件里有什么
$ clai 显示导出文件里有意义的那几行→ grep -E 'DROP TABLE|CREATE TABLE|INSERT INTO' orders.sqlDROP TABLE IF EXISTS `orders`;CREATE TABLE `orders` (INSERT INTO `orders` VALUES (1,'acme',120.50,'2026-08-01'),(2,'globex'
这才是没人提的部分。第一条语句就是 DROP TABLE IF EXISTS。恢复这个文件不是把数据合并进去,而是用导出时刻的状态替换掉整张表。
3. 只要结构,不要数据
$ clai 只导出 orders 表的结构→ mysqldump -h my8 -uroot -p --no-data shop orders --result-file=schema.sql
--no-data 保留 CREATE TABLE、去掉所有 INSERT——已验证,文件里一条插入语句都没有。用 diff 比较线上和测试环境的表结构时很顺手。
4. 只导出你需要的行
$ clai 只导出八月份的订单→ mysqldump -h my8 -uroot -p --single-transaction --where="created >= '2026-08-01'" shop orders --result-file=august.sqlINSERT INTO `orders` VALUES (1,'acme',120.50,'2026-08-01'),(3,'initech',45.20,'2026-08-10');
三行里进去了两行,七月的那笔订单被过滤掉了。上面这行就是结果文件里的 INSERT。按日期、按客户、按 id 区间做精准提取,靠的就是它。
5. 把一张表恢复进线上库
$ clai 用导出文件恢复 orders 表→ mysql -h my8 -uroot -p shop < orders.sql
在真实库上验证过:恢复前 orders 有 2 行,恢复后是 3 行,而旁边的 customers 表原封不动。想只回滚一张表而不打扰其他表,就是这么做。
6. 同一个文件导进另一个库
$ clai 把这张表的导出文件导入 shop_copy 库→ mysql -h my8 -uroot -p shop_copy < orders.sql
单表导出文件里既没有 CREATE DATABASE 也没有 USE,所以目标库由你给 mysql 的参数决定。已验证:shop_copy 里出现了 orders 表,三行数据都在。
Gotchas
- 单表导出文件以 DROP TABLE 开头。 导出之后再写进这张表的一切,恢复时都会消失。真想追加的话,导出时加
--no-create-info。 --no-create-info会撞上主键。 已验证:把这种文件灌到已有数据的表上会得到ERROR 1062 (23000) at line 24: Duplicate entry '1' for key 'orders.PRIMARY'。追加只对新行有效——要么先清空表,要么加上--insert-ignore或--replace。- 不加
--single-transaction的导出会锁表。 在 MyISAM 上无法避免;在 InnoDB 上,那就是大白天自己给自己制造的一次故障。
Related questions
怎么导出多张表? 依次列出来:mysqldump shop orders customers。反过来是 --ignore-table=shop.logs,表示排除。
怎么边导出边压缩? mysqldump … | gzip > dump.sql.gz,恢复用 zcat dump.sql.gz | mysql shop。它和 --result-file 不能同时用,后者自己负责写文件。
mysqldump 和 mysqlpump、mydumper 比怎么样? 那两个竞品支持并行导出,在大库上更快,但 mysqldump 到处都有,而且输出人眼能读。
See also
CliAI 会按当前情况写出带正确参数的导出命令,并在它碰到数据库之前先显示出来。一行安装。