最近,我遇到了一個(gè)麻煩:我的MySQL數(shù)據(jù)庫(kù)突然不能打開(kāi)了。我試了幾種方法,但都沒(méi)有解決問(wèn)題。下面讓我來(lái)介紹一下具體情況。
$ mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
當(dāng)我輸入以上命令時(shí),會(huì)出現(xiàn)如上的錯(cuò)誤提示,我的MySQL數(shù)據(jù)庫(kù)無(wú)法連接。
接下來(lái),我檢查了一下我的mysqld文件夾,發(fā)現(xiàn)里面的mysqld.sock文件不存在。
$ ls /var/run/mysqld/ mysqld.pid
于是,我嘗試重新啟動(dòng)MySQL服務(wù)。
$ sudo service mysql restart
但是,重新啟動(dòng)服務(wù)后,再次嘗試連接MySQL,還是無(wú)法打開(kāi)。
接下來(lái),我在MySQL的錯(cuò)誤日志里發(fā)現(xiàn)了一些有用的信息。
$ sudo less /var/log/mysql/error.log
錯(cuò)誤日志中出現(xiàn)了這樣一行錯(cuò)誤信息:
2018-01-01T12:34:56.789012Z 0 [ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position 14 to have type set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','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'), found type 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_A
根據(jù)錯(cuò)誤日志中的提示,我想到了一個(gè)可能的原因:可能是mysql.event表的定義出了問(wèn)題。于是,我打開(kāi)了mysql數(shù)據(jù)庫(kù),并執(zhí)行如下命令:
mysql>DROP EVENT event_name; DROP EVENT event_name mysql>DROP TABLE mysql.event; DROP TABLE mysql.event mysql>source /usr/share/mysql/mysql_system_tables.sql mysql>source /usr/share/mysql/mysql_system_tables_data.sql
以上命令的目的是刪除舊的mysql.event表,并重新創(chuàng)建一個(gè)新的表。這樣操作后,MySQL數(shù)據(jù)庫(kù)恢復(fù)了正常運(yùn)行。
以上就是我解決MySQL打不開(kāi)的過(guò)程。希望對(duì)需要的朋友提供一些參考。