MySQL ERROR 1577 (HY000) 一直困擾我的主備份、熱備份資料庫很久了。錯誤訊息顯示有資料表毀損,我也有用過遠端的基本修復和優化指令但都沒用。查一查資料可能是資料庫被升級但表結構沒升級的結果,反正能備份、能連能開能關就好,我不想進一步到系統層級去找網管自討沒趣。
這幾天開始有使用者來抱怨一些年代久遠(10y+)不維護的冷門AP「前幾天還在用怎今天就不行了」。我當時就知道應該是某個年代久遠的資料庫垮了,去問一定會遭受更多的侮辱「你怎麼不備份、你程式有問題..等」。想說服使用者別再用但最後被還是被使用者押著去找原因,想說好幸運沒碰到應該永遠也碰不到吧我多慮了,但下午還是被使用者去逮到網管(真神奇)。於是又押著我去找原因,弄沒多久使用者自知沒救跑了。我這時從他欲蓋彌彰的談話中知道,應該是「有某人」也發現了1577(HY000),「那個人」想嘗試解決時做了不正確的升級動作搞廢掉這台年代久遠的mysql,因此使用者的程式當然壞掉。
為了主資料庫著想,不要再有閒人想去修這個1577 (HY000)問題然後搞垮資料庫。還是讓專業的來吧,(十幾年前我也搞作業系統的(當時知道沒前途就改搞軟體))系統層其實也沒什麼我搞不定的。
根據錯誤訊息來看是event表出問題,查一下網路上都說去執行mysql_upgradeo指令沒什麼用。
重啟mysql後不再有錯誤訊息出現
這幾天開始有使用者來抱怨一些年代久遠(10y+)不維護的冷門AP「前幾天還在用怎今天就不行了」。我當時就知道應該是某個年代久遠的資料庫垮了,去問一定會遭受更多的侮辱「你怎麼不備份、你程式有問題..等」。想說服使用者別再用但最後被還是被使用者押著去找原因,想說好幸運沒碰到應該永遠也碰不到吧我多慮了,但下午還是被使用者去逮到網管(真神奇)。於是又押著我去找原因,弄沒多久使用者自知沒救跑了。我這時從他欲蓋彌彰的談話中知道,應該是「有某人」也發現了1577(HY000),「那個人」想嘗試解決時做了不正確的升級動作搞廢掉這台年代久遠的mysql,因此使用者的程式當然壞掉。
為了主資料庫著想,不要再有閒人想去修這個1577 (HY000)問題然後搞垮資料庫。還是讓專業的來吧,(十幾年前我也搞作業系統的(當時知道沒前途就改搞軟體))系統層其實也沒什麼我搞不定的。
根據錯誤訊息來看是event表出問題,查一下網路上都說去執行mysql_upgradeo指令沒什麼用。
靠別人不如靠自己。仔細再想想是因為被升級後系統表結構出的問題,那去找新的表結構吧..
mysql6以上的表 event 結構ddl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | CREATE TABLE `event` ( `db` char ( 64 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' , `name` char ( 64 ) NOT NULL DEFAULT '' , `body` longblob NOT NULL, `definer` char ( 77 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' , `execute_at` datetime DEFAULT NULL, `interval_value` int ( 11 ) DEFAULT NULL, `interval_field` enum ( 'YEAR' , 'QUARTER' , 'MONTH' , 'DAY' , 'HOUR' , 'MINUTE' , 'WEEK' , 'SECOND' , 'MICROSECOND' , 'YEAR_MONTH' , 'DAY_HOUR' , 'DAY_MINUTE' , 'DAY_SECOND' , 'HOUR_MINUTE' , 'HOUR_SECOND' , 'MINUTE_SECOND' , 'DAY_MICROSECOND' , 'HOUR_MICROSECOND' , 'MINUTE_MICROSECOND' , 'SECOND_MICROSECOND' ) DEFAULT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' , `last_executed` datetime DEFAULT NULL, `starts` datetime DEFAULT NULL, `ends` datetime DEFAULT NULL, `status` enum ( 'ENABLED' , 'DISABLED' , 'SLAVESIDE_DISABLED' ) NOT NULL DEFAULT 'ENABLED' , `on_completion` enum ( 'DROP' , 'PRESERVE' ) NOT NULL DEFAULT 'DROP' , `sql_mode` set( 'REAL_AS_FLOAT' , 'PIPES_AS_CONCAT' , 'ANSI_QUOTES' , 'IGNORE_SPACE' , 'NOT_USED' , 'ONLY_FULL_GROUP_BY' , 'NO_UNSIGNED_SUBTRACTION' , 'NO_DIR_IN_CREATE' , 'POSTGRESQL' , 'ORACLE' , 'MSSQL' , 'DB2' , 'MAXDB' , 'NO_KEY_OPTIONS' , 'NO_TABLE_OPTIONS' , 'NO_FIELD_OPTIONS' , 'MYSQL323' , 'MYSQL40' , 'ANSI' , 'NO_AUTO_VALUE_ON_ZERO' , 'NO_BACKSLASH_ESCAPES' , 'STRICT_TRANS_TABLES' , 'STRICT_ALL_TABLES' , 'NO_ZERO_IN_DATE' , 'NO_ZERO_DATE' , 'INVALID_DATES' , 'ERROR_FOR_DIVISION_BY_ZERO' , 'TRADITIONAL' , 'NO_AUTO_CREATE_USER' , 'HIGH_NOT_PRECEDENCE' , 'NO_ENGINE_SUBSTITUTION' , 'PAD_CHAR_TO_FULL_LENGTH' ) NOT NULL DEFAULT '' , `comment` char ( 64 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' , `originator` int ( 10 ) unsigned NOT NULL, `time_zone` char ( 64 ) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM' , `character_set_client` char ( 32 ) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `collation_connection` char ( 32 ) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `db_collation` char ( 32 ) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `body_utf8` longblob, PRIMARY KEY (`db`,`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT= 'Events' ; |
修復表
cd /var/lib/mysql/mysql
mysql_upgrade -u root -h localhost -p --verbose --force
重啟mysql後不再有錯誤訊息出現
沒有留言:
張貼留言