วันนี้ผมจะมาแนะนำการทำการ backup ข้อมูลของ MySQL ไปเก็บไว้ที่ gmail โดยจะทำการตั้งเวลาการ backup โดยใช้ crontab ผ่านทาง controlpanel ของ PLESK (ถ้าหากว่าใครใช้ controlpanel ตัวอื่นก็ไปหาวิธีการตั้ง crontab เอาเองนะครับ) โดยจะตั้งให้ทำการ backup database MySQL ในเวลา เวลา 24.00 น. ของทุกๆวัน
หลังจากห่างหายไม่ได้เขียนบทความหลายวัน วันนี้เลยขอเสนอบทความที่คิดว่าจะมีประโยชน์มากสำหรับ หลายๆคนที่มี website อยู่และต้องการที่ จะทำการ backup ข้อมูล เพราะเราไม่อาจจะทราบได้ว่า server ที่เราใช้อยู่จะตายเมื่อไร
ถ้า หากว่าคุณมี server เป็นของตัวเอง 2 ตัว การที่จะทำการ backup ข้อมูลจากเครื่องหนึ่งไปไว้ที่อีกเครื่องหนึ่งก็ไม่ใช่เรื่องอยากอะไร แต่ถ้าหากว่าเราเป็นแค่ผู้เช่า hosting ธรรมดารายหนึ่ง ไม่มีเงินพอที่จะไปซื้อ server ไปว่างที่ ISP เองก็คงจะอยากที่จะทำการ backup ข้อมูล ถึงแม้ว่า hosting หลายรายเขาจะบอกว่าเขาทำการ backup ข้อมูลให้เรา ทุกๆวันก็ตาม ผมก็ยังไม่ใว้ใจอยู่ดี
วันนี้ผมจะมาแนะนำ การทำการ backup ข้อมูลของ MySQL ไปเก็บไว้ที่ gmail โดยจะทำการตั้งเวลาการ backup โดยใช้ crontab ผ่านทาง controlpanel ของ PLESK (ถ้าหากว่าใครใช้ controlpanel ตัวอื่นก็ไปหาวิธีการตั้ง crontab เอาเองนะครับ) โดยจะตั้งให้ทำการ backup database MySQL ในเวลา เวลา 24.00 น. ของทุกๆวัน
บทความนี้ ผมไม่ลงลึกถึงรายละเอียดของตัวโปรแกรมนะครับว่ามีหลักการทำงานยังไง แต่จะบอกแค่ว่า ต้องเปลี่ยนตัวค่าของตัวแปร ตรงไหน แค่นั้น เพราะลงลึงไม่ได้เดี่ยวจะยาวกว่านี้
มาเริ่มกันเลย อย่างแรก download sql2gmail.zip ไปก่อนนะครับ จากนั้น unzip จะได้ออกมา 7 file ดังนี้
1. check_php_path.php // ใช้หา path ของ PHP ว่าอยู่ที่ path อะไร
2. class.phpmailer.php // เป็น class ที่ใช้ส่ง email มีคนเขียนไว้แล้วฟรีด้วย และแนบ file ได้ด้วย หรือใคร อยากจะเขียน code ที่ใช้ส่ง email แล้วแนบ file ได้ด้วยก็เอาเลยครับ
3. class.smtp.php
4. class.export.mysql.php // ตัวนี้เป็น function ที่ใช้ export ข้อมูลใน MySQL ออกมาเป็นคำสั่งของ SQL (เขียนเอง)
5. sql2gmail.php // ตัวนี้เป็นโปรแกรมที่จะส่ง email พร้อมแนบ file ที่เรา export จาก MySQL ไปที่ gmail
6. mysql.sql // เป็น file ที่เราจะเก็บข้อมูลที่ใช้ในการ backup
7. run.php // เป็น file ที่เราจะสั่งให้ crontab เข้ามา run เพื่อจะทำการ run sql2gmail.php อีกทีหนึง
เพิ่มเติม ที่จริงเราสามารถสั่งให้ crontab run sql2gmail.php ได้โดยตรงโดยไม่ต้องผ่าน run.php ก็ได้ในบาง server นะครับ แต่ server ของผมได้ทำการป้องกันการเข้าใช้งาน folder ของระบบเอาไว้ทำให้ไม่สามารถเรียกใช้งานได้โดยตรงต้องทำการ run ผ่านโปรแกรมอีกตัวหนึ่งก่อน
ต่อไปทำการ up file check_php_path.php ขึ้นไปที่ server จากนั้นทำการเรียก file check_php_path.php จะได้ข้อมูลออกมา แบบนี้
1 2 3 | Server Time : 2005-08-28 09:18:33 Server Path : /usr/local/psa/home/vhosts/yourdomain.com/httpdocs/sql2gmail/check_php_path.php PHP Path : #!/usr/local/bin/php |
ถ้าหากว่าค่าของ PHP Path ไม่ออกมาก็ต้องมาเด่ากันละครับว่าเขาลง php ไว้ที่ไหน แต่โดยทั่วไปก็จะอยู่ที่ /usr/local/bin/php หรือไม่ก็ที่ /usr/bin/php เพราะเราจำเป็นต้องรู้ path ที่ใช้ลง php ในการ run โปรแกรม
จาก นั้นทำการเปิด file run.php ขึ้นมา และทำการเปลี่ยน path ของ php ในบรรทัดแรกให้เป็นค่าที่เราได้จากขั้นตอนที่แล้ว และทำการเปลี่ยน path ของ sql2gmail.php เป็น URL ที่เราจะทำการ upload file ขึ้นไป
run.php
1 2 3 4 5 6 7 8 9 | #!/usr/local/bin/php <?php $handle = fopen("http://www.yourdomain.com/sql2gmail/sql2gmail.php", "r"); while (!feof($handle)) { $buffer = fgets($handle, 4096); echo $buffer; } fclose($handle); ?> |
จากนั้นทำการเปิด file sql2gmail.php เพื่อทำการแก้ไข ค่าต่างๆ ดังนี้
sql2gmail.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?php /***************************************************************** File: sql2gmail.php Description: ทำการ Backup SQL ไปที่ gmail Created: 8/21/2005 Author: Error code 1 E-mail : [email protected] Website : www.unzeen.com Copyright (C) 2005, www.unzeen.com all rights reserved. *****************************************************************/ require("class.phpmailer.php"); require("class.export.mysql.php"); $dbname = "database"; // ชื่อ database ของคุณ $dbuser = "root"; // username database ของคุณ $dbpass = ""; // password database ของคุณ $dbhost = "localhost"; $filename = "mysql.sql"; mysql_connect($dbhost, $dbuser, $dbpass); mysql_select_db($dbname); $handle = fopen($filename, 'w'); fwrite($handle,"-- Created : ".date("Y-m-d H:i:s")." "); fclose($handle); //$table = list_table($dbname); // ใช้ตัวนี้หากว่าต้องการ backup ทั้ง database $table = array("table1","table2"); // ใช้ตัวนี้หากต้องการเลือก table เอง for($i=0;$i<count($table);$i++){ $handle = fopen($filename, 'a'); fwrite($handle,export_db($table[$i])); fclose($handle); } $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = "localhost"; $mail->CharSet = "iso-8859-11"; $mail->AddReplyTo("[email protected]","Webmaster"); $mail->From = "[email protected]"; // ชื่อ email ที่จะใช้ส่ง $mail->FromName = "Webmaster"; $mail->AddAddress("[email protected]"); // e-mail ของคุณที่จะใช้รับ file backup $mail->IsHTML(true); $mail->Subject = "MySQL Backup ".date("Y-m-d H:i:s"); $mail->Body = "MySQL Backup ".date("Y-m-d H:i:s"); $mail->AddAttachment($filename, $filename); if($mail->Send()){ print "Yes"; }else{ print "No"; } ?> |
ต่อไปก็ทำการ upload ทุก file ขึ้นไปที่ server ได้เลยครับ และทำการ เปลี่ยน permission ของ mysql.sql เป็น 777 เพื่อให้โปรแกรมของเราทำการเขียนข้อมูลลงไปได้ และทำการเปลี่ยน permission ของ sql2gmail.php และ run.php ให้เป็น 755 จะได้ทำการ run ผ่าน command line ได้
จากนั้นก็มาทดสอบโปรแกรมกันเลย ให้ทำการเรียกโปรแกรม sql2gmail.php ผ่านทาง webbrowser ถ้าได้ค่ากลับมาเป็น Yes ก็ แสดงว่าโปรแกรมของเราได้ทำการส่ง backup database ไปที่ email ที่เรากำหนดไว้แล้ว แต่ถ้าค่าที่ได้เป็น No ก็แสดงว่าส่ง email ออกไปไม่ได้ อาจจะเป็นจากตัว file backup ที่จะให้ส่งออกไปมีขนาดใหญ่เกินไป ให้คุณลองทำการเลือก table ที่มีขนาดเล็กๆ ก่อนว่าได้หรือเปล่า
จากนั้นลองไปเช็คดูที่ email ว่ามีข้อมูลถูกส่งไปหรือยัง ถ้าหากว่าไม่มีอะไรผิดพลาดก็ทำขั้นตอนต่อไปได้เลย
ต่อไปก็มาถึงขั้นตอนการกำหนด crontab กันแล้ว ให้ทำการ login เข้าไปที่ controlpanel ของ PLESK ที่ทาง hosting ให้เรามา
ทำการ Login เข้า PLESK Controlpanel
ทำการ click ที่ Crontab Manager
ทำการ click ที่ Add เพื่อเพิ่ม crontab
กำหนดค่าเวลาที่ต้องการให้โปรแกรมทำงานลงไป ในตัวอย่างคือ เวลา 24.00 น. ของทุกวัน และในช่อง command ให้กำหนดเป็น path ของโปรแกรม run.php ลงไป โดยต้องกำหนดเป็น path เต็มของ server ซึ่งสามารถดู path ของ server ได้จาก โปรแกรม check_php_path.php ซึ่งจากตัวอย่างนี้ก็ คือ Server Path ที่ได้คือ /usr/local/psa/home/vhosts/yourdomain.com/httpdocs/sql2gmail/check_php_path.php
ฉะนั้น Path ของ run.php ของเราก็จะเป็น usr/local/psa/home/vhosts/yourdomain.com/httpdocs/sql2gmail/run.php
เมื่อกำหนดค่าต่างๆ แล้วให้ทำการ click ที่ update
ส่วนในช่อง Send crontab messages to address: ให้กำหนดเป็น email address ของเราเพราะว่าเวลาที่ crontab ทำงานจะได้มีข้อมูล ส่งไปหาเราด้วยว่า โปรแกรมทำงานถูกต้องหรือยัง หรือว่ามี error ที่ตรงไหน แต่ถ้าหากว่าแน่ใจแล้วก็ไม่ต้องใส่ก็ได้ ครับ
และ ต่อไปเราก็ไม่ต้องห่วงเรื่องการ backup ข้อมูลใน database ที่สำคัญของเราแล้ว เพราะว่าเรามีโปรแกรม backup ข้อมูลที่ทำงาน ทุกๆ วันอยู่แล้ว
อีกนิดหนึง อย่าลืมไปลบข้อมูล file backup เก่าๆใน email ออกด้วยนะครับเดี่ยว email จะเต็มโดยไม่รู้ตัว