mysql mysqldump报错怎么办_mysql备份导出日志分析

来源:这里教程网 时间:2026-02-28 20:49:49 作者:

mysqldump 报错:Access denied for user

这是权限不足的典型表现,

mysqldump
连接数据库时用的账号没被授予足够权限。不是只要能登录 MySQL 就能导出——它至少需要
SELECT
(读表)、
LOCK TABLES
(锁表防写入干扰)、
SHOW VIEW
(导出视图)、
TRIGGER
(导出触发器)等权限。

实操建议:

mysql -u root -p
登录后,执行:
SHOW GRANTS FOR 'backup_user'@'%';
确认权限是否完整
若缺失,补全权限:
GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON *.* TO 'backup_user'@'%'; FLUSH PRIVILEGES;
避免用
root
账号跑定时备份脚本,最小权限原则更安全

mysqldump 报错:Got error: 2013: Lost connection to MySQL server during query

常见于导出大表(比如单表超 1GB)或网络不稳时。本质是连接超时或服务端主动断开,不是数据损坏。

实操建议:

增大客户端和服务端的超时参数:
mysqldump --connect-timeout=600 --net-read-timeout=600 --net-write-timeout=600 -u user -p db_name
服务端需同步调整:
wait_timeout
interactive_timeout
(建议设为 600 或更高),改完重启或
SET GLOBAL
生效
对超大库,优先考虑分表导出:
mysqldump -u user -p db_name table1 table2 > part1.sql

mysqldump 日志里出现 Warning: Skipping the data of table mysql.xxx

这是正常行为,不是错误。默认情况下

mysqldump
会跳过系统库
mysql
information_schema
performance_schema
sys
的数据(只导结构或完全跳过),因为这些表内容依赖运行时状态,直接还原可能引发权限混乱或元数据冲突。

实操建议:

如需备份用户权限,用
--all-databases
--skip-lock-tables
,但必须配合
--skip-comments
和显式排除
information_schema
等库,否则会报错
更稳妥的方式是单独导出权限:
mysqldump --no-create-info --skip-extended-insert mysql user db tables_priv > grants.sql
注意
mysql.user
表在 8.0+ 已弃用密码字段,权限导出后需人工校验兼容性

mysqldump 导出 SQL 文件开头没有 SET NAMES 或 character_set_client

这会导致还原时中文乱码,尤其当源库用

utf8mb4
而目标库默认字符集是
latin1
mysqldump
默认不强制写字符集声明,靠客户端连接时协商,但还原时容易失效。

实操建议:

导出时显式指定:
mysqldump --default-character-set=utf8mb4 -u user -p db_name > dump.sql
检查生成文件前几行是否含:
SET NAMES utf8mb4;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
若已导出但缺该声明,可在文件开头手动插入
SET NAMES utf8mb4;
,但要注意不能插在
CREATE DATABASE
语句之前(否则可能被忽略)

实际恢复前,务必用

head -n 20 dump.sql
快速扫一眼字符集和库名是否符合预期;大库导出别只看最后有没有 “Dump completed”,得 grep 看有无 “Warning” 或 “ERROR” 行——很多失败静默发生。

相关推荐