MySQL 8.0如何实现部分表备份_在mysqldump中使用--tables参数

胖涛同学_2152

胖涛同学_2152

2026-05-21

605人浏览

原创

必须加--databases选项,否则mysqldump会误将首个表名当数据库名;正确写法为mysqldump -u user -p --databases db1 --tables t_user t_order > backup.sql,且--tables仅作用于前一个--databases指定的单库,跨库需分次执行。

mysql 8.0如何实现部分表备份_在mysqldump中使用--tables参数

只备份指定表时必须加 --databases 选项

直接执行 mysqldump -u user -p db1 table1 table2 看似合理,但实际会失败:mysqldump 会把 table1 当作数据库名,table2 当作表名,而 db1 反被忽略。根本原因是 mysqldump 的语法解析规则——不带 --databases(或 -B)时,它只接受「一个数据库名 + 零个或多个表名」的结构,且**表名列表必须紧跟在数据库名之后、中间不能有其他选项**。

正确写法是显式带上 --databases:

mysqldump -u backup -p --databases db1 --tables t_user t_order > db1_partial.sql

注意这里 --databases db1 和 --tables t_user t_order 是两个独立参数,顺序不能颠倒;--tables 会覆盖默认行为,强制只导出列出的表,即使库中还有其他表。

--tables 参数不支持跨库备份

--tables 只作用于紧邻其前的单个数据库(由 --databases 指定),无法一次备份 db1.t1 和 db2.t2。若强行写成:

mysqldump -u backup -p --databases db1 db2 --tables t1 t2

结果只会备份 db1 中的 t1 和 t2(如果存在),db2 的表完全被忽略——因为 --tables 不具备“按库分组”的语义。

跨库部分备份只能分多次执行:

  • mysqldump -u backup -p --databases db1 --tables t1 > db1_t1.sql
  • mysqldump -u backup -p --databases db2 --tables t2 > db2_t2.sql

或者用脚本循环处理,避免手动拼接错误。

备份用户权限必须覆盖目标表

即使你指定了 --tables t_user t_order,如果备份账号对其中某张表没有 SELECT 权限,mysqldump 会直接报错退出,例如:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

mysqldump: Got error: 1142: SELECT command denied to user 'backup'@'localhost' for table 't_config'

这不是警告,而是中断性错误。MySQL 8.0 默认启用 sql_mode=STRICT_TRANS_TABLES,权限校验更严格。解决方法只有两个:

  • 给备份账号授予对应表的 SELECT 权限:GRANT SELECT ON db1.t_user TO 'backup'@'localhost';
  • 改用更高权限账号(如 root),但不推荐用于日常备份任务

注意:SHOW VIEW、TRIGGER 权限也建议一并赋予,否则视图或触发器可能无法完整导出。

导出文件不含 CREATE DATABASE,恢复时需手动建库

用 --databases db1 --tables t1 t2 备份出来的 SQL 文件里,开头**没有 CREATE DATABASE 或 USE db1 语句**。这是设计如此:因为 --databases 仅控制导出范围,不控制输出格式;真正决定是否生成 CREATE DATABASE 的是「是否在 --databases 后面显式列出数据库名」这一动作本身——但 --tables 会抑制该行为。

所以恢复时不能直接 mysql -u user -p ,否则会报错 <code>Unknown database 'db1'。必须先确保目标库存在:

mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci";

再导入:

mysql -u user -p db1 
<p>这个细节极易被忽略,尤其当备份脚本和恢复脚本由不同人维护时。</p>

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4083

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

871

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1069

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

5961

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

2863

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

5940

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

7941

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1090

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

952

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 181人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 289人学习