最近,我遇到了一個麻煩:我的MySQL數據庫突然不能打開了。我試了幾種方法,但都沒有解決問題。下面讓我來介紹一下具體情況。
$ mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
當我輸入以上命令時,會出現如上的錯誤提示,我的MySQL數據庫無法連接。
接下來,我檢查了一下我的mysqld文件夾,發現里面的mysqld.sock文件不存在。
$ ls /var/run/mysqld/ mysqld.pid
于是,我嘗試重新啟動MySQL服務。
$ sudo service mysql restart
但是,重新啟動服務后,再次嘗試連接MySQL,還是無法打開。
接下來,我在MySQL的錯誤日志里發現了一些有用的信息。
$ sudo less /var/log/mysql/error.log
錯誤日志中出現了這樣一行錯誤信息:
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
根據錯誤日志中的提示,我想到了一個可能的原因:可能是mysql.event表的定義出了問題。于是,我打開了mysql數據庫,并執行如下命令:
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表,并重新創建一個新的表。這樣操作后,MySQL數據庫恢復了正常運行。
以上就是我解決MySQL打不開的過程。希望對需要的朋友提供一些參考。
上一篇css文字在最下面