存储过程mysql报错1271_mysqldump备份失败以及解决方法汇总
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一則: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
p.s. 如果③和④調換順序,則ALTER TABLE無法成功,則會等待MDL。
復現二:① 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時,備份到該表時,發現該表定義存在問題??赡躮erge的表不存在,或者該表合并的基表包含非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)
通過cat表MGR��義結構文件可以檢查MERGE表的基表:
[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的用戶權限。
總結
以上是生活随笔為你收集整理的存储过程mysql报错1271_mysqldump备份失败以及解决方法汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 固定长度队列_如何彻底搞懂 J
- 下一篇: 如何修改视频文案字幕视频怎么修改字幕文字