วันอังคารที่ ๒๗ พฤษภาคม พ.ศ. ๒๕๕๑

Command MySQL ผู้ดูแลระบบ

Command MySQL ผู้ดูแลระบบ

วันนี้ขอเขียนเกี่ยวกับ MySQL บ้างครับ เพราะวันนี้ได้ติดตั้ง MySQL Version ใหม่บน RedHat Enterprise 3 เลยได้โอกาสในการทบทวนความรู้ของ mysql ด้วย เพราะนานมากแล้วครับที่ไม่ค่อยได้ยุ่งเกี่ยวกับ mysql เลย วันนี้ผมขอรวบรวม command line ที่ควรทราบเบื้องต้นครับ เล็กๆน้อยๆก่อนครับ วันหลังมีเวลาหรือได้ศึกษาเพิ่มเติมจะเข้ามาเขียนเพิ่มเรื่อยๆครับ อย่างน้อยผมคิดว่าสามารถเปิดมาดูได้ เวลาปฏิบัติงาน

commandline ที่ควรทราบสำหรับ mysql
===============================
คำสั่งในการเปลี่ยน password ของ root สำหรับ mysql
mysqladmin -u root password new-password

หรืออาจจะใช้อีกวิธี คือเมื่อทำการติดตั้ง mysql เสร็จใหม่ๆ password สำหรับ root จะไม่มี ดังนั้นเราสามารถเข้าสู่ command line ของ mysql ได้ดังนี้
#mysql -u root -p
mysql>
เราสามารถเปลี่ยน password ได้จาก command นี้
mysql>set password = password("enterpassword")
mysql>

คำสั่ง Create Database
mysql> create database databasename;

คำสั่งแสดง database
mysql> show databases;

คำสั่งเข้าใช้ database
mysql> use databasename;

คำสั่งแสดง table ใน database
mysql> show tables;

คำสั่งดูข้อมูลของ table
mysql> describe tablename;

ต่อไปเป็นคำสั่งในการสร้าง database
คำสั่งสร้าง database
mysql> create database databasename;

คำสั่งลบ database
mysql> drop database databasename;



การ backup mysql
===================
ตัวอย่างการใช้ mysqldump ในการ backup mysql
mysqldump -u username -p database_name > /path/backup.sql
เป็นการ backup ทุก table ใน database ที่ชื่อ database_name ไปไว้ที่ไฟล์ backup.sql สามารถ Restart กลับคืนได้ด้วยคำสั่ง
mysql -u username -p database_name < /path/backup.sql

แต่ถ้าต้องการบีบอัดไฟล์ที่ backup ก็สามารถทำได้โดยใช้ command
mysqldump -u username -p db_name | gzip > backup.sql.gz
ซึ่งเวลาคล้ายการบีบอัดไฟล์ก็ใช้คำสั่ง
gunzip backup.sql.gz

เราสามารถเขียน shell script ให้ทำการ backup ทุกๆวันได้ ซึ่ง shell script อาจจะเขียนได้ดังนี้
#!/bin/sh
date=`date -I`
mysqldump --opt --all-databases | gzip
> /var/backup/databasebackup-$date.sql.gz

จาก shell script เป็นการ backup ทั้ง database ที่มีอยู่

การ Reset Password MySQL
หากลืม password หรือต้องการ reset วิธีตามนี้เลยครับ
เปิด /etc/my.cnf
ในส่วนของ [mysqld] ใส่คำนี้เพิ่ม
skip-grant-tables
ทำการ save แล้ว restart mysqld ด้วยคำสั่ง
service mysqld restart

เข้าไปแก้ password ดังนี้


mysql -uroot
mysql>use mysql;
mysql> update user set Password = PASSWORD('pass') where User ='root';
mysql> FLUSH PRIVILEGES;
mysql> exit


เสร็จแล้วเอาค่า skip-grant-tables ออกใน /etc/my.cnf
แล้ว restart mysqld ใหม่ คำสั่ง
service mysqld restart

การ Backup Database MySql ผมว่าทำได้ค่อนข้างง่ายและสะดวกดี นอกจากนี้ยังสามารถดูผลการ backup ได้ง่ายๆ ด้วยเนื่องจากจะถูกสร้างออกมาเป็น SQL statement ที่สามารถอ่านได้ไม่ยากครับ จริงๆการทำการ backup อาจจะใช้ phpMyAdmin ทำก็ได้ แต่หลังจากผมลองใช้ mysqldump ดูแล้ว พบว่าการใช้ mysqldump เร็วกว่ากันแบบเทียบไม่ติด และยังสามารถทำให้เป็น auto ก็ได้โดยใช้ร่วมกัน cron บน unix ครับ ก่อนอื่นมาดู format ของ command ดูก่อนครับ

mysqldump --user [username] --password=[password] [databasename] > [dump file]

โดย --user [username] ก็ใช้ใส่ username ของ database เข้าไปครับ หรือ password ก็ให้ใส่ password ที่ใช้กับ username ที่ระบุเข้าไปครับ หากไม่มี username และ password ก็ไม่ต้องใส่เข้าไปครับ ส่วน databasename ก็คือชื่อ database ที่เราจะทำการ backup ครับ dump file ก็เป็น file backup ที่เราจะเก็บเอาไว้ครับ ลองดูตัวอย่าง เช่น database ชื่อ abc , username เป็น user1 และ password เป็น pass1 ให้เก็บไว้ใน dump file ชื่อ back.sql ก็ใช้ command ได้ดังนี้ครับ

mysqldump --user user1 --password=pass1 abc > back.sql

จะเห็นว่าไม่ยากเลยนะครับ หรือหากเป็น database ชื่อ abc แต่ไม่ได้สร้าง username กับ password ไว้ และให้เก็บไว้ใน file back.sql ก็สามารถระบุได้ดังนี้ครับ

mysqldump abc > back.sql

ครับเมื่อเรา backup database กันได้แล้วคราวนี้มาดูวิธีการ restore กันบ้างครับ วิธีการก็ไม่ยากครับ ใช้คำสั่ง mysql ได้เลยครับ โดยมี format ประมาณนี้ครับ

mysql [database name] < [backup file name]

เช่นเราจะเอาคืนจาก file ที่เรา backup ไว้เมื่อกี้ ก็

mysql abc2 <>

หรือหากเรามี username กับ password ด้วยก็เหมือนกันครับคือ

mysql --user user1 --password=pass1 abc2 <>

ซึ่งจะเห็นว่าผม restore กลับมาที่ database อีกตัวชื่อ abc2 ครับ ซึ่งก่อนจะ restore ได้ก็ต้องสร้าง database ตัวนี้ขึ้นมาก่อนนะครับ

เอาเป็นว่าผมจบแค่นี้ก่อนครับ จริงๆยังมี option ของ mysqldump อีกนิดหน่อย แต่คิดว่าคงน่าจะไม่ได้ใช้เท่าไหร่ ทำ backup


ข้อมูลจาก :: http://www1.tumserver.com/tumserver/content/74-command-mysql--.html