運行環(huán)境:
云安ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
操作系統(tǒng):CentOS release 6.8 (Final)
數(shù)據(jù)庫:MySQL 5.5.52-cll-lve
Web應(yīng)用軟件:Apache/2.2.15(Unix)
問題:操作mysql數(shù)據(jù)庫的user表,計劃刪除一條重復(fù)的記錄,不小心刪除了整個user表,當(dāng)時操作的命令是:delete from mysql.user;忘記加where條件。最終導(dǎo)致Linux系統(tǒng)上的考試系統(tǒng)、論壇和監(jiān)控系統(tǒng)暫停服務(wù)。
強烈建設(shè):定期備份數(shù)據(jù),可以避免許多風(fēng)險性發(fā)生和損失。
先回顧在服務(wù)器上的整個操作過程:
mysql>select * from mysql.user;
22rows in set (0.01 sec) #該用戶表中存放了22條記錄
mysql>delete from mysql.user; #忘加where條件了
QueryOK, 22 rows affected (0.00 sec) #直接刪除了22條記錄
mysql>exit
Bye
[root@sky9896data]# mysql -u root -p
Enterpassword:
ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) #登錄不了數(shù)據(jù)庫系統(tǒng)
解決問題過程:
[root@sky9896lib]# find / -name mysql #找數(shù)據(jù)庫安裝路徑
/var/webmin/modules/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/var/lib/mysql20150811/mysql
/usr/bin/mysql
/usr/include/mysql
/usr/include/mysql/mysql
/usr/lib64/mysql
/usr/share/mysql
[root@sky9896mysql]# cd /etc
[root@sky9896etc]# vi my.cnf
[mysqld]
skip-grant-table #加該條語句,跳躍授權(quán)表的限制,無需密碼登錄數(shù)據(jù)庫
[root@sky9896data]# mysql -uroot –p
Enterpassword:
mysql>show databases;
+--------------------+
|Database |
+--------------------+
|information_schema |
|a |
|back20150625ultrax |
|cacti |
|cacti20151220 |
|cacti20160104 |
|edusoho |
|feifeicms |
|mysql |
|performance_schema |
|phpcom |
|qibosoft |
|qibosofts |
|skyboy |
|study |
|syslog |
|test |
|test1 |
|tt |
|ultrax |
|zabbix |
+--------------------+
21rows in set (0.02 sec)
Mysql>usemsyql;
mysql>UPDATE user SET Password=PASSWORD('***') WHERE user='root';
mysql>flushprivileges;
mysql>exit
#mysql–uroot -p
mysql>show databases; #新問題是更新密碼后,看不到大部分?jǐn)?shù)據(jù)庫,問題就是在mysql.user表,對數(shù)據(jù)庫沒有授好權(quán);
+--------------------+
|Database |
+--------------------+
|information_schema |
|cacti |
+--------------------+
2rows in set (0.00 sec)
通過多種方式測試,最終通過重新構(gòu)建user表
#service mysqld stop
#mysqld_safe --skip-grant-tables
還要重新開一個ssh連接:
#mysql
#delete mysql;
#INSERT INTO `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`) VALUES ('%','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','Y','Y','Y','','','','',0,0,0,0,'',''),
('127.0.0.1','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','Y','Y','Y','','','','',0,0,0,0,'',''),
('::1','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','Y','Y','Y','','','','',0,0,0,0,'',''),
('localhost','','','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','Y','Y','Y','','','','',0,0,0,0,'','');
#flush privileges;
#mysql restart mysql
#mysql –uroot –p
mysql>use mysql
mysql> update user setpassword=password("***") where host=”localhost” and user="root";
mysql> updateuser set password=password("***") where host=”%” and user="root";
mysql>flushprivileges;
通過以上操作,必須通過密碼登錄數(shù)據(jù)庫,同時對數(shù)據(jù)庫都授了相應(yīng)的權(quán)限,在數(shù)據(jù)庫系統(tǒng)中能看到所有數(shù)據(jù)庫。在業(yè)務(wù)系統(tǒng)配置文件時,要注意用戶名與密碼必須與數(shù)據(jù)庫系統(tǒng)保持一致,否則導(dǎo)致業(yè)務(wù)應(yīng)用系統(tǒng)連不上數(shù)據(jù)庫系統(tǒng)。
解決整個問題的過程中,要注意幾個事項:
1.數(shù)據(jù)非常重要,務(wù)必做好備份;
2.要掌握數(shù)據(jù)庫的安全理論,并對實戰(zhàn)授權(quán)的操作要熟練;
3.磁盤空間要留夠用,一般少也要幾GB字節(jié),這樣可以保障操作系統(tǒng)、web服務(wù)、數(shù)據(jù)庫服務(wù)運行穩(wěn)定,文件和日志可寫等操作。
解決整個問題的過程中,要注意幾個問題:
1. RROR 2002 (HY000): Can't connect to localMySQL server through socket '/var/lib/mysql/mysql.sock' (111)
2. ERROR 1045 (28000): Access denied for user'root'@'localhost' (using password: YES)
3. ERROR 2002 (HY000): Can't connect to localMySQL server through socket '/var/lib/mysql/mysql.sock' (2)
以上3個問題,原因在于mysql服務(wù)無法啟動,在啟動的過程中延時了,在該案例中,Apache也導(dǎo)致不能自動運行,有的地方說是磁盤空間點滿了造成的,的確是,刪除該 /var/log/httpd/ 目錄下的日志文件,確實能啟動mysql服務(wù)了;但其實是該根目錄磁盤空間滿造成服務(wù)無法啟動。
[root@sky9896 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 49G 46G 0 100%/
tmpfs 939M 904K 938M 1% /dev/shm
/dev/sda1 93M 54M 35M 61% /boot
/dev/sda5 179G 2.2G 168G 2% /home
當(dāng)時,根目錄下確實是滿了,并且導(dǎo)致httpd服務(wù)無法自啟,只能通過手動強行啟動,后面對“/”目錄刪除相關(guān)資料,可以使用300多兆,所以mysql和Apache服務(wù)行都可以運行正常。
[root@sky9896 www]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 49G 46G 381M 100% /
tmpfs 939M 100K 939M 1% /dev/shm
/dev/sda1 93M 54M 35M 61% /boot
/dev/sda5 179G 2.2G 168G 2% /home
在這里為止,mysql.user表建成了,數(shù)據(jù)庫更新了密碼并對用戶授權(quán)了,騰出“/"磁盤空間,保障各mysql和apache服務(wù)運行正常,同時配置各業(yè)務(wù)應(yīng)用系統(tǒng),成功連上數(shù)據(jù)庫,恢復(fù)了業(yè)務(wù)應(yīng)用系統(tǒng)。