lost mysql root privileges

วันหนึ่งครับ

MySQL admin พบว่า สิทธิ root ของ MySQL servre เครื่อง master ตัวใหญ่ที่สุดถูกจำกัดเหลือแค่นี้

[[email protected] mysql]# mysql -u root -p
Enter password: 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| theprince          |
+--------------------+
2 rows in set (0.00 sec)

งานเข้าละครับ – -!
จะด้วยเหตุผลอะไรก็ตาม hacker, physical crash , bla bla bla

แก้ด้วยการ
1. ปิด MySQL ก่อน
Redhat base

services mysqld stop

Debian base

/etc/init.d/mysql stop

2. start MySQL แบบไม่ใช้ password

mysqld_safe --skip-grant-tables &

3. login เป็น root โดยไม่ต้องใส่ password

mysql -u root

4.เพิ่มสิทธิให้ root

use mysql;
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';

5. หยุดการทำงานของ MySQL ในโหมดไม่ใช้ password
Redhat base

services mysqld stop

Debian base

/etc/init.d/mysql stop

6. เริ่มการทำงาน MySQL
Redhat base

services mysqld start

Debian base

/etc/init.d/mysql start

จบ.