如何导出整个MySQL实例的所有数据库_全库备份终极指南

风雪君_2951

风雪君_2951

2026-05-10

505人浏览

原创

用mysqldump --all-databases会跳过information_schema、performance_schema和sys库;需手动查用户库并用--databases导出,加-n -s避免表头误读,权限不足时检查select和lock tables权限,大库备份建议--skip-opt --single-transaction组合。

mysqldump 全库备份命令怎么写才不漏库

直接用 mysqldump --all-databases 看似最省事,但实际会跳过 information_schema、performance_schema 和 sys 这几个系统库——这不是 bug,是默认行为。如果你真需要它们(比如做灾备还原或审计比对),得手动加上 --include-databases 或改用库名列表。

更稳妥的做法是先查出所有用户库,再拼接导出:

mysql -Nse "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema','performance_schema','sys','mysql')" | xargs mysqldump --databases > full_backup.sql
  • --databases 比 --all-databases 多一层可控性:它会为每个库加 CREATE DATABASE 和 USE 语句,还原时不用提前建库
  • 务必加 -N(禁用列名)和 -s(静默输出),否则 xargs 会把表头也当库名传进去,报错 Unknown database 'SCHEMA_NAME'
  • 如果库名含短横线或特殊字符,xargs 可能解析失败,这时改用 while read 循环更稳

遇到 LOCK WAIT TIMEOUT EXCEEDED 就卡住?不是锁问题,是权限不够

执行全库备份时突然停在某个库,日志里反复出现 Lock wait timeout exceeded,第一反应常是“锁表了”,其实大概率是当前账号没权限读取某张表的元数据——特别是用低权限账号(如只给了 SELECT)去 dump 时,mysqldump 内部会查 INFORMATION_SCHEMA.TABLES 等视图,缺 SELECT 权限就卡住等锁超时。

  • 检查账号权限:运行 SHOW GRANTS FOR CURRENT_USER(),确认有 SELECT on *.*,以及 LOCK TABLES(即使没显式加 --lock-tables,某些版本也会默认启用)
  • 临时规避:加 --skip-lock-tables,但要注意这会导致 MyISAM 表可能不一致;InnoDB 表靠 --single-transaction 更可靠
  • 如果必须用最小权限账号,改用 --ignore-table=db1.table1 跳过有问题的表,别硬扛

大库备份慢、IO 扛不住?别只盯着压缩,先关掉默认的 --opt

mysqldump 默认开启 --opt(等价于 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables),其中 --lock-tables 和 --disable-keys 对大库反而拖慢速度,尤其当单表几千万行时,DISABLE KEYS 本身要遍历索引结构。

MySQL
MySQL

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

下载
  • 换成 --skip-opt --single-transaction --routines --triggers --events 组合:前者关掉所有默认优化项,后者按需补关键功能
  • 导出后用 gzip full_backup.sql.gz 比 mysqldump ... | gzip > ... 更稳定——管道中断会导致整个备份丢失,分两步可校验 SQL 文件完整性
  • 如果磁盘 IO 是瓶颈,加 --quick(逐行 fetch,不缓存整结果集),对内存小的机器很关键

还原时提示 ERROR 1044 (42000):Access denied for user,其实是 CREATE DATABASE 权限缺失

用 --databases 或 --all-databases 导出的 SQL 文件开头有 CREATE DATABASE IF NOT EXISTS `xxx`,还原时如果账号没 CREATE 权限,就会在第一行报错退出,而不是继续执行后面的 USE 和建表语句。

  • 还原前先确认权限:GRANT CREATE ON *.* TO 'user'@'host',注意不是 CREATE DATABASE(这是旧语法,5.7+ 已弃用)
  • 不想授全局 CREATE?那就手动删掉 SQL 文件里的所有 CREATE DATABASE 行,改用 mysql -e "CREATE DATABASE IF NOT EXISTS db1" 单独建库后再导入
  • 如果目标实例已有同名库且结构不同,IF NOT EXISTS 不会覆盖,但后续 CREATE TABLE 会因表已存在而失败——此时得加 --add-drop-table 或手动清理

真正麻烦的是跨版本还原:MySQL 8.0 的 CREATE USER 语句带 caching_sha2_password 插件,在 5.7 上直接报错。这种细节不试一次根本想不到。

相关文章

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

4223

8

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

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

2023.10.27

891

4

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

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

2024.02.23

1089

5

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

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

2024.03.06

6121

10

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

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

2024.03.06

2983

4

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

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

2024.04.07

6080

11

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

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

2024.04.29

8201

6

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

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

2024.04.29

1110

5

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

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

2024.04.29

972

5

热门下载

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

精品课程

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

共1课时 | 183人学习