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

จบ.

copy with magic

เรามี subdomain แบบนี้

/home/nginx/files.sourcode.com/htdocs/
/home/nginx/project.sourcode.com/htdocs/
/home/nginx/threee.sourcode.com/htdocs/
/home/nginx/xxx.sourcode.com/htdocs/
/home/nginx/yes.sourcode.com/htdocs/
/home/nginx/intel.sourcode.com/htdocs/
/home/nginx/th.sourcode.com/htdocs/

เราจะโยน robots.txt เข้าไปใน htdocs ของแต่ละ subdomain

เราทำแบบนี้

$ echo /home/nginx/*sourcode.com/htdocs/ | xargs -n 1 cp robots.txt

Like a magic !

java jdk7

http://www.oracle.com/technetwork/java/javase/downloads/index.html

# mkdir -p /opt/java
# cd /opt/java/
# wget http://download.oracle.com/otn-pub/java/jdk/7u25-b15/jdk-7u25-linux-x64.tar.gz
# tar xvzf jdk-7u25-linux-x64.tar.gz
# rm -rf jdk-7u25-linux-x64.tar.gz
# nano /etc/profile.d/java.sh

export JAVA_HOME=/opt/java/jdk1.7.0_25
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

# exit
$ exit

login again

$ java -version
$ javac -version

bzip2: Cannot exec: No such file or directory

เพราะอะไร?

# tar jxf openx-2.8.10.tar.bz2
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

แก้โดย

# aptitude install bzip2

ibdata1 ใหญ่ไป!

วัันหนึ่ง คุณตื่นเช้ามา และพบว่าพื้นที่ใน databases server ไม่พอใช้

คุณพยายามหาทางลบอะไรบางอย่าง ออกเพื่อให้ได้พื้นที่คืนมา…
แล้วคุณก็พบว่า ibdata1 ใช้พื้นที่ไปถึง 3.3GB !!!

total 3.3G
-rw-r----- 1 mysql root   64K Aug  5 14:16 db3.err
-rw-r--r-- 1 root  root     0 Jul 11 14:50 debian-5.5.flag
-rw-rw---- 1 mysql mysql 3.3G Aug  5 14:16 ibdata1
-rw-rw---- 1 mysql mysql 5.0M Aug  5 14:16 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Jul 31 14:19 ib_logfile1
drwxr-xr-x 2 mysql root  1.5K Jul 11 14:51 mysql
-rwxr-xr-x 1 root  root   353 Jul 13 16:08 MySQL_dump.sh
-rw------- 1 root  root     6 Jul 11 14:51 mysql_upgrade_info
drwx------ 2 mysql mysql  400 Jul 11 14:51 performance_schema
drwx------ 2 mysql mysql  200 Jul 31 14:18 project_logger

คุณคิดในใจว่า ‘ลอง drop database แล้ว dump ขึ้นไปใหม่ มันคงลดขนาดลง’

คุณคิดผิด!

วิธีแก้ปัญหาจริงๆแล้วคือ
1. mysqldump -u root -p –all-databases > all_databases.sql
2. drop databases ทิ้งให้หมด รวมทั้ง mysql database ด้วย (แต่ไม่ต้อง drop information_schema กับ performance_schema )
3. service mysqld stop
4. rm ibdata1 ib_log*
5. service mysqld start
6. mysql -u root -p < all_databases.sql ปล. หลังจากที่คุณเริ่มต้นทำงาน mysql ใหม่ในขั้นตอนที่ 5 คุณจะพบว่า ibdata1 มีขนาดเล็กลง... จริงๆนะ [sourcecode language="plain"] total 29M drwxrwxrwt 5 mysql mysql 260 Aug 5 14:17 . drwxr-xr-x 30 root root 4.0K Jul 1 13:35 .. -rw-r----- 1 mysql root 69K Aug 5 14:17 db3.err -rw-rw---- 1 mysql mysql 5 Aug 5 14:17 db3.pid -rw-r--r-- 1 root root 0 Jul 11 14:50 debian-5.5.flag -rw-rw---- 1 mysql mysql 18M Aug 5 14:17 ibdata1 -rw-rw---- 1 mysql mysql 5.0M Aug 5 14:17 ib_logfile0 -rw-rw---- 1 mysql mysql 5.0M Aug 5 14:16 ib_logfile1 drwxr-xr-x 2 mysql root 1.5K Jul 11 14:51 mysql -rwxr-xr-x 1 root root 353 Jul 13 16:08 MySQL_dump.sh -rw------- 1 root root 6 Jul 11 14:51 mysql_upgrade_info drwx------ 2 mysql mysql 400 Jul 11 14:51 performance_schema drwx------ 2 mysql mysql 200 Jul 31 14:18 project_logger [/sourcecode]