今天早上收到朋友的信息說他家的數(shù)據(jù)庫(kù)被人干了,很是緊張,但是后面逐步排除,發(fā)現(xiàn)mysql安裝目錄下的數(shù)據(jù)文件都是正常,從linux歷史執(zhí)行命令日志來看也沒有跡象表面是被人搞,同時(shí)mysql的錯(cuò)誤log里面只有些不穩(wěn)定的日志。最后搜索到兩篇這樣的文章,確定的確是權(quán)限這個(gè)問題導(dǎo)致的,但是為什么服務(wù)突然會(huì)有這種現(xiàn)象,目前還是查看中,同時(shí)整理下這兩篇文章,希望能夠幫到其他人。
參考的原文:
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 |

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

只顯示這個(gè)兩個(gè)數(shù)據(jù)庫(kù),看不到mysql數(shù)據(jù)庫(kù)

解決方法:

此問題實(shí)際上是用戶沒有權(quán)限:

1. 關(guān)閉mysql,service mysqld stop

2. 啟動(dòng)mysql: mysqld_safe --skip-grant-tables

3. 再打開一個(gè)ssh連接服務(wù)器,進(jìn)行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;

在這個(gè)模式下是可以看到mysql數(shù)據(jù)庫(kù)的。

在數(shù)據(jù)庫(kù)名mysql下的user表中,修改相應(yīng)權(quán)限,比如:

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);

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

然后再進(jìn)行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);

操作。

操作完成后,將兩個(gè)ssh連接都關(guān)閉,然后再重新連接一個(gè)ssh,啟動(dòng)mysql,service mysqld start,然后用mysql命令連接mysql數(shù)據(jù)庫(kù)

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

密碼為空。

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

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


第二種情況
1.首先停止mysql服務(wù):service mysqld stop
2.加參數(shù)啟動(dòng)mysql:/usr/bin/mysqld_safe --skip-grant-tables &
然后就可以無任何限制的訪問mysql了
3.root用戶登陸系統(tǒng):mysql -u root -p mysql
4.切換數(shù)據(jù)庫(kù):use mysql
5.顯示所有的表:show tables;
這里就可以訪問表了
6.查看user表中root用戶的localhost權(quán)限:select * from user where user='root' and host='localhost'
7.在顯示的列表中顯示:root用戶的localhost的權(quán)限都是'N',表示root用戶本地登陸不具有權(quán)限
8.修改root用戶的localhost權(quán)限:
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' //這里需注意是否有這個(gè)條件的用戶
9.更新一下:flush privileges;
10.然后重新啟動(dòng)下mysql,可以解決問題了