今天早上收到朋友的信息說他家的數據庫被人干了,很是緊張,但是后面逐步排除,發現mysql安裝目錄下的數據文件都是正常,從linux歷史執行命令日志來看也沒有跡象表面是被人搞,同時mysql的錯誤log里面只有些不穩定的日志。最后搜索到兩篇這樣的文章,確定的確是權限這個問題導致的,但是為什么服務突然會有這種現象,目前還是查看中,同時整理下這兩篇文章,希望能夠幫到其他人。
參考的原文:
http://www.yebihai.com/kuangjiaxitong/linux/801.html
http://www.unixdo.com/DataBase/1909.html
[root@localhost ~]# mysql -uroot -p123

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| test |

+--------------------+

只顯示這個兩個數據庫,看不到mysql數據庫

解決方法:

此問題實際上是用戶沒有權限:

1. 關閉mysql,service mysqld stop

2. 啟動mysql: mysqld_safe --skip-grant-tables

3. 再打開一個ssh連接服務器,進行mysql操作

[root@localhost ~]#mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>show databases;

在這個模式下是可以看到mysql數據庫的。

在數據庫名mysql下的user表中,修改相應權限,比如:

INSERT INTO `user` VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);

如果已經存在了host為localhost的記錄,則先刪除該記錄,delete from user where host='localhost';

然后再進行INSERT INTO `user` VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);

操作。

操作完成后,將兩個ssh連接都關閉,然后再重新連接一個ssh,啟動mysql,service mysqld start,然后用mysql命令連接mysql數據庫

[root@localhost ~]#mysql -uroot -p

密碼為空。

[如果此時還連接不上,再重啟一下mysql就好了,service mysqld restart]。

然后就可以用 [root@localhost ~]#mysqladmin -uroot password 'newpassword' 來設置密碼了。


第二種情況
1.首先停止mysql服務:service mysqld stop
2.加參數啟動mysql:/usr/bin/mysqld_safe --skip-grant-tables &
然后就可以無任何限制的訪問mysql了
3.root用戶登陸系統:mysql -u root -p mysql
4.切換數據庫:use mysql
5.顯示所有的表:show tables;
這里就可以訪問表了
6.查看user表中root用戶的localhost權限:select * from user where user='root' and host='localhost'
7.在顯示的列表中顯示:root用戶的localhost的權限都是'N',表示root用戶本地登陸不具有權限
8.修改root用戶的localhost權限:
update user set
`Select_priv` = 'Y',
`Insert_priv` = 'Y',
`Update_priv` = 'Y',
`Delete_priv` = 'Y',
`Create_priv` = 'Y',
`Drop_priv` = 'Y',
`Reload_priv` = 'Y',
`Shutdown_priv` = 'Y',
`Process_priv` = 'Y',
`File_priv` = 'Y',
`Grant_priv` = 'Y',
`References_priv` = 'Y',
`Index_priv` = 'Y',
`Alter_priv` = 'Y',
`Show_db_priv` = 'Y',
`Super_priv` = 'Y',
`Create_tmp_table_priv` = 'Y',
`Lock_tables_priv` = 'Y',
`Execute_priv` = 'Y',
`Repl_slave_priv` = 'Y',
`Repl_client_priv` = 'Y',
`Create_view_priv` = 'Y',
`Show_view_priv` = 'Y',
`Create_routine_priv` = 'Y',
`Alter_routine_priv` = 'Y',
`Create_user_priv` = 'Y',
`Event_priv` = 'Y',
`Trigger_priv` = 'Y'
where user='root' and host='localhost' //這里需注意是否有這個條件的用戶
9.更新一下:flush privileges;
10.然后重新啟動下mysql,可以解決問題了