【MySQL】mysqldump备份失败与解决方案合集
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,〇 mysqldump: Error: Query execution was interrupted, maximum statement execution time exceeded when
千家信息网最后更新 2025年02月01日【MySQL】mysqldump备份失败与解决方案合集〇 mysqldump: Error: Query execution was interrupted, maximum statement execution time exceeded when trying to dump tablespaces
〇 mysqldump: Error 3024: Query execution was interrupted, maximum statement execution time exceeded when dumping table `$tb_name` at row: xxxx
版本:
MySQL 5.7.8+
原因:
max_execution_time过小
处理思路:
① 通过hints,增大N值(文档说,在hints用法中,将N改为0为无限制,但我测下来不生效,可设置成一个较大值如999999解决)
SELECT /*+ MAX_EXECUTION_TIME(N) */ * FROM t1 LIMIT 100000;
② 修改max_execution_time值,将该值设置为较大一个值,或设置为0(不限制)
附录:
该参数5.7.8被添加,单位为ms,动态参数,默认为0,设置为0时意味着SELECT超时不被设置(不限制超时时间)。不作用于存储过程中的SELECT语句,并且只作用于只读的SELECT,如INSERT ... SELECT ... 是不被作用的。
for more information:
http://blog.itpub.net/29773961/viewspace-2150443/
〇 mysqldump: Couldnt execute SHOW FIELDS FROM `$view_name`: View $db_name.$view_name references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356)
原因:
该view引用了无效的表,列,函数或者定义者。
处理思路:
可以根据报错信息,进入db,执行SHOW CREATE VIEW $view_name\G,查看该view的定义,逐一检查该view的基表,列,或相关函数与用户是否具有相关权限。考虑重建或删除视图。
〇 mysqldump: Couldnt execute show create table `$view_name`: Illegal mix of collations for operation UNION (1271)
原因:
创建view时,使用UNION时存在非法的排序规则组合。
处理思路:
检查该视图定义,检查字符集,考虑重建或删除视图。
〇 mysqldump: Couldnt execute SHOW FIELDS FROM `$view_name`: The user specified as a definer ($user@$host) does not exist (1449)
〇 mysqldump: Couldnt execute show table status like $view_name: SELECT command denied to user @% for column $col_name in table $tb_name (1143)
原因:
该视图的定义者$user@$host不存在。
处理思路:
检查mysql.user表,确认用户是否存在,考虑重建或删除视图。
〇 Error: Couldnt read status information for table Income_config ()mysqldump: Couldnt execute show create table `Tser_table`: Table $db_name.test_table doesnt exist (1146)
〇 mysqldump: Got error: 1049: Unknown database $db_name when selecting the database
原因一:
从lower_case_table_names的0设置成1,导致部分原来含有大写字母的库表"找不到"。
处理思路:
将lower_case_table_names设置回0。
若有必须将lower_case_table_names设置为1,需先设置为0,并将含有大写字母的库表改成小写,再设置为1。
原因二(MySQL 5.5及以下版本可能出现):
表损坏导致该表找不到(InnoDB)。frm和ibd文件都在,但无法SHOW CREATE TABLE xxx\G
error log一则:
从完整备份+binlog还原,对于有主或从的实例,可通过物理备份还原。
〇 mysqldump: Error 2020: Got packet bigger than max_allowed_packet bytes when dumping table `$tb_name` at row: xxxx
原因:
默认的max_allowed_packet过小
处理思路:
在mysqldump时增加max_allowed_packet的大小,如mysqldump --max-allowed-packet=268435456
〇 mysqldump: Error 1412: Table definition has changed, please retry transaction when dumping table `$tb_name` at row: 0
原因:
在备份该表时,表定义被修改。FLUSH TABLE WITH READ LOCK只保证数据一致性,并不保证schema不被修改。
处理思路:
备份时期不做DDL操作。
复现一:
复现二:
〇 mysqldump: Couldnt execute show create table `$tb_name`: Unable to open underlying table which is differently defined or of non-MyISAM type or doesnt exist (1168)
原因:
出现在表引擎为MERGE时,备份到该表时,发现该表定义存在问题。可能merge的表不存在,或者该表合并的基表包含非MyISAM引擎的表。
处理思路:
删除或者重建该MERGE表。
复现一(merge表中定义包含了非MyISAM表):
通过check table merge_t可以检查是哪张表有问题,如此处是t1:
〇 mysqldump: Couldnt execute show create table `$tb_name`: Table ./$db_name/$tb_name is marked as crashed and last (automatic?) repair failed (144)
〇 mysqldump: Couldnt execute show create table `$tb_name`: Table ./$db_name/$tb_name is marked as crashed and should be repaired (145)
〇 mysqldump: Error 1194: Table throne_tower is marked as crashed and should be repaired when dumping table `$tb_name` at row: xxxxx
原因:
mysqldump在拉取表定义时报错,表损坏。
处理思路:
该损坏发生在非事务表如MyISAM,通过mysqlcheck或者repair table修复即可。
〇 mysqldump: Couldnt execute SHOW FUNCTION STATUS WHERE Db = $db_name: Cannot load from mysql.$tb_name. The table is probably corrupted (1728)
原因:
字典表不正确,可能是表本身损坏,也有可能是导入了其他版本的mysql schema盖掉了字典表。
处理思路:
repair table修复,若仍无用,则可以尝试mysql_upgrade来修复,或找到对应版本的mysql_system_tables_fix.sql来导入。
〇 mysqldump: Couldnt execute show events: Cannot proceed because system tables used by Event Scheduler were found damaged at server start (1577)
原因:
字典表不正确,极大可能是导入了其他版本的mysql schema盖掉了字典表。
处理思路:
尝试mysql_upgrade来修复,或找到对应版本的mysql_system_tables_fix.sql来导入。该报错可能在upgrade操作之后重启实例。
〇 mysqldump: Error: Got error 28 from storage engine when trying to dump tablespaces
mysqldump: Couldnt execute show fields from `$tb_name`: Got error 28 from storage engine (1030)
原因:
@@tmpdir满了。
处理思路:
清除@@tmpdir,可以通过SELECT @@tmpdir;检查具体目录。
〇 mysqldump: Lost connection to MySQL server during query (2013)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '@@socket' (111)
原因:
mysqldump执行过程中mysqld被关闭。
处理思路:
检查mysqld被关闭的原因,一般常见原因是发生OOM。
〇 mysqldump: Couldn't execute 'SHOW SLAVE STATUS': Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation (1227)
原因:
mysqldump加了--dump-slave参数,缺少SUPER或REPLICATION CLIENT来执行SHOW SLAVE STATUS。
处理思路:
检查mysqldump的用户权限。
〇 mysqldump: Couldn't execute 'STOP SLAVE SQL_THREAD': Access denied for user 'dump'@'localhost' (using password: YES) (1045)
原因:
mysqldump加了--dump-slave参数,缺少SUPER权限使用STOP SLAVE SQL_THREAD。
处理思路:
检查mysqldump的用户权限。
〇 mysqldump: Error 3024: Query execution was interrupted, maximum statement execution time exceeded when dumping table `$tb_name` at row: xxxx
版本:
MySQL 5.7.8+
原因:
max_execution_time过小
处理思路:
① 通过hints,增大N值(文档说,在hints用法中,将N改为0为无限制,但我测下来不生效,可设置成一个较大值如999999解决)
SELECT /*+ MAX_EXECUTION_TIME(N) */ * FROM t1 LIMIT 100000;
② 修改max_execution_time值,将该值设置为较大一个值,或设置为0(不限制)
附录:
该参数5.7.8被添加,单位为ms,动态参数,默认为0,设置为0时意味着SELECT超时不被设置(不限制超时时间)。不作用于存储过程中的SELECT语句,并且只作用于只读的SELECT,如INSERT ... SELECT ... 是不被作用的。
for more information:
http://blog.itpub.net/29773961/viewspace-2150443/
〇 mysqldump: Couldnt execute SHOW FIELDS FROM `$view_name`: View $db_name.$view_name references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356)
原因:
该view引用了无效的表,列,函数或者定义者。
处理思路:
可以根据报错信息,进入db,执行SHOW CREATE VIEW $view_name\G,查看该view的定义,逐一检查该view的基表,列,或相关函数与用户是否具有相关权限。考虑重建或删除视图。
〇 mysqldump: Couldnt execute show create table `$view_name`: Illegal mix of collations for operation UNION (1271)
原因:
创建view时,使用UNION时存在非法的排序规则组合。
处理思路:
检查该视图定义,检查字符集,考虑重建或删除视图。
〇 mysqldump: Couldnt execute SHOW FIELDS FROM `$view_name`: The user specified as a definer ($user@$host) does not exist (1449)
〇 mysqldump: Couldnt execute show table status like $view_name: SELECT command denied to user @% for column $col_name in table $tb_name (1143)
原因:
该视图的定义者$user@$host不存在。
处理思路:
检查mysql.user表,确认用户是否存在,考虑重建或删除视图。
〇 Error: Couldnt read status information for table Income_config ()mysqldump: Couldnt execute show create table `Tser_table`: Table $db_name.test_table doesnt exist (1146)
〇 mysqldump: Got error: 1049: Unknown database $db_name when selecting the database
原因一:
从lower_case_table_names的0设置成1,导致部分原来含有大写字母的库表"找不到"。
处理思路:
将lower_case_table_names设置回0。
若有必须将lower_case_table_names设置为1,需先设置为0,并将含有大写字母的库表改成小写,再设置为1。
原因二(MySQL 5.5及以下版本可能出现):
表损坏导致该表找不到(InnoDB)。frm和ibd文件都在,但无法SHOW CREATE TABLE xxx\G
error log一则:
- 170820 17:43:17 [Note] Event Scheduler: scheduler thread started with id 1
- 170820 17:44:48 InnoDB: error: space object of table '$db_name/$tb_name',
- InnoDB: space id 4335 did not exist in memory. Retrying an open.
- 170820 17:44:48 InnoDB: Error: tablespace id and flags in file './$db_name/$tb_name.ibd' are 0 and 0, but in the InnoDB
- InnoDB: data dictionary they are 4335 and 0.
- InnoDB: Have you moved InnoDB .ibd files around without using the
- InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?
- InnoDB: Please refer to
- InnoDB: http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting-datadict.html
- InnoDB: for how to resolve the issue.
- 170820 17:44:48 InnoDB: cannot calculate statistics for table $db_name/$tb_name
- InnoDB: because the .ibd file is missing. For help, please refer to
- InnoDB: http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
- 170820 17:44:48 [ERROR] MySQL is trying to open a table handle but the .ibd file for
- table $db_name/$tb_name does not exist.
- Have you deleted the .ibd file from the database directory under
- the MySQL datadir, or have you used DISCARD TABLESPACE?
- See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
- how you can resolve the problem.
从完整备份+binlog还原,对于有主或从的实例,可通过物理备份还原。
〇 mysqldump: Error 2020: Got packet bigger than max_allowed_packet bytes when dumping table `$tb_name` at row: xxxx
原因:
默认的max_allowed_packet过小
处理思路:
在mysqldump时增加max_allowed_packet的大小,如mysqldump --max-allowed-packet=268435456
〇 mysqldump: Error 1412: Table definition has changed, please retry transaction when dumping table `$tb_name` at row: 0
原因:
在备份该表时,表定义被修改。FLUSH TABLE WITH READ LOCK只保证数据一致性,并不保证schema不被修改。
处理思路:
备份时期不做DDL操作。
复现一:
- ① session1> CREATE TABLE a (id int) ENGINE=InnoDB;
- ② session2> START TRANSACTION WITH CONSISTENT SNAPSHOT;
- ③ session1> ALTER TABLE a ADD COLUMN name varchar(32);
- ④ session2> SELECT * FROM a;
- ERROR 1412 (HY000): Table definition has changed, please retry transaction
复现二:
- ① session1> START TRANSACTION WITH CONSISTENT SNAPSHOT;
- ② session2> CREATE TABLE b (id int) ENGINE=InnoDB;
- ③ session1> SELECT * FROM b;
- ERROR 1412 (HY000): Table definition has changed, please retry transaction
〇 mysqldump: Couldnt execute show create table `$tb_name`: Unable to open underlying table which is differently defined or of non-MyISAM type or doesnt exist (1168)
原因:
出现在表引擎为MERGE时,备份到该表时,发现该表定义存在问题。可能merge的表不存在,或者该表合并的基表包含非MyISAM引擎的表。
处理思路:
删除或者重建该MERGE表。
复现一(merge表中定义包含了非MyISAM表):
- CREATE TABLE t1(id int) ENGINE=InnoDB;
- CREATE TABLE t2(id int) ENGINE=MyISAM;
- CREATE TABLE merge_t(id int)ENGINE=MERGE UNION=(t1, t2);
- SELECT * FROM merge_t;
- ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
- CREATE TABLE t1(id int) ENGINE=MyISAM;
- CREATE TABLE t2(id int) ENGINE=MyISAM;
- CREATE TABLE merge_t(id int)ENGINE=MERGE UNION=(t1, t2);
- SELECT * FROM merge_t;
- Empty set (0.00 sec) -- 正常返回
- DROP TABLE t1;
- SELECT * FROM merge_t;
- ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
通过check table merge_t可以检查是哪张表有问题,如此处是t1:
- [15:20:12] root@localhost [test]> check table merge_t\G
- *************************** 1. row ***************************
- Table: test.merge_t
- Op: check
- Msg_type: Error
- Msg_text: Table 'test.t1' is differently defined or of non-MyISAM type or doesn't exist
- *************************** 2. row ***************************
- Table: test.merge_t
- Op: check
- Msg_type: Error
- Msg_text: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
- *************************** 3. row ***************************
- Table: test.merge_t
- Op: check
- Msg_type: error
- Msg_text: Corrupt
- 3 rows in set (0.00 sec)
- [root@host test]# pwd
- /data/mysql-data/mysql57/data/test
- [root@host test]# cat merge_t.MRG
- t1
- t2
〇 mysqldump: Couldnt execute show create table `$tb_name`: Table ./$db_name/$tb_name is marked as crashed and last (automatic?) repair failed (144)
〇 mysqldump: Couldnt execute show create table `$tb_name`: Table ./$db_name/$tb_name is marked as crashed and should be repaired (145)
〇 mysqldump: Error 1194: Table throne_tower is marked as crashed and should be repaired when dumping table `$tb_name` at row: xxxxx
原因:
mysqldump在拉取表定义时报错,表损坏。
处理思路:
该损坏发生在非事务表如MyISAM,通过mysqlcheck或者repair table修复即可。
〇 mysqldump: Couldnt execute SHOW FUNCTION STATUS WHERE Db = $db_name: Cannot load from mysql.$tb_name. The table is probably corrupted (1728)
原因:
字典表不正确,可能是表本身损坏,也有可能是导入了其他版本的mysql schema盖掉了字典表。
处理思路:
repair table修复,若仍无用,则可以尝试mysql_upgrade来修复,或找到对应版本的mysql_system_tables_fix.sql来导入。
〇 mysqldump: Couldnt execute show events: Cannot proceed because system tables used by Event Scheduler were found damaged at server start (1577)
原因:
字典表不正确,极大可能是导入了其他版本的mysql schema盖掉了字典表。
处理思路:
尝试mysql_upgrade来修复,或找到对应版本的mysql_system_tables_fix.sql来导入。该报错可能在upgrade操作之后重启实例。
〇 mysqldump: Error: Got error 28 from storage engine when trying to dump tablespaces
mysqldump: Couldnt execute show fields from `$tb_name`: Got error 28 from storage engine (1030)
原因:
@@tmpdir满了。
处理思路:
清除@@tmpdir,可以通过SELECT @@tmpdir;检查具体目录。
〇 mysqldump: Lost connection to MySQL server during query (2013)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '@@socket' (111)
原因:
mysqldump执行过程中mysqld被关闭。
处理思路:
检查mysqld被关闭的原因,一般常见原因是发生OOM。
〇 mysqldump: Couldn't execute 'SHOW SLAVE STATUS': Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation (1227)
原因:
mysqldump加了--dump-slave参数,缺少SUPER或REPLICATION CLIENT来执行SHOW SLAVE STATUS。
处理思路:
检查mysqldump的用户权限。
〇 mysqldump: Couldn't execute 'STOP SLAVE SQL_THREAD': Access denied for user 'dump'@'localhost' (using password: YES) (1045)
原因:
mysqldump加了--dump-slave参数,缺少SUPER权限使用STOP SLAVE SQL_THREAD。
处理思路:
检查mysqldump的用户权限。
原因
思路
处理
检查
版本
备份
视图
参数
字典
权限
用户
作用
较大
函数
大写
大写字母
字母
实例
引擎
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发工程师劣势
二级数据库复习
网络安全事件应急情况说明
河南电力网络安全
智能家居网络安全事件
硕安网络安全
rt软件开发
黑马机器人软件开发
软件开发以及前端
云服务器接收消息的容量
武汉管理软件开发费用
dos防护服务器
世界级dnd服务器
法琳娜服务器开服
ad 同步到数据库
饿了吗软件开发费用
正付深圳网络技术有限公司
云中美食数据库表
服务器69码
数据库管理员能力要求
数据库怎么做完整视频
学生成绩数据库需求报告
迅雷网络技术有限公司
河北大型软件开发供应商
写一篇网络安全的博文英语作文
网络安全从我做起手抄报文字
网络安全周活动致辞
重庆什么是软件开发创新服务
临汾侯马dns服务器
服务器的防火墙在哪里关