วันพุธที่ ๑๒ กันยายน พ.ศ. ๒๕๕๐

ทิป ในการ backup เว็บไซต์ และฐานข้อมูล ง้ายย ง่าย

พอดีว่าเคยมีปัญหาเรื่องเผลอไปลบ ฐานข้อมูลของ MySql ไป ตัวที่เรา backup ไว้ล่าสุดก็ตั้งหลายเดือน แถมเป็นโรคขี้เกียจที่จะ backup ขี้เกียจพิมพ์คำสั่งหลาย ๆ คำสั่ง ที่สำคัญสุดคือ ไม่เก่งเรื่องนี้สักเท่าไร ก็เลยคิดหาวิธีการลดภาระตัวเองแบบลูกทุ่ง ๆ หน่อยโจทย์มีอยู่ว่า ต้องการ Backup ฐานข้อมูลของ MySql แล้วก็ไฟล์ของเว็บไซต์ต่าง ๆ ที่มีในระบบ ไปไว้อีกเครื่องที่เป็นระบบ Windows ซึ่งเป็น Windows server 2003 และทำการแชร์ไฟล์ แบบกำหนดสิทธิ์ไว้เรียบร้อยแล้ว ตัวอย่างนะครับ
Windows Server 2003 -- ชื่อเครื่อง (netbios) = "eserver"
เปิดแชร์โฟลเดอร์ d:\freebsd\backup เป็นชื่อ "freebsdbackup$" ($ นี้เอาใส่ตามท้ายชื่อที่เราตั้งตอนเปิดแชร์ จะทำให้ Share point ตรงนี้ซ่อนไว้ มองไม่เห็น แต่สามารถพิมพ์ที่ address bar เข้าใช้ได้โดยตรง) กำหนดสิทธิ์ให้ Administrator อ่านเขียนได้ และ user อื่น ๆ ไม่สามารถเข้าใช้ได้

คำสั่งที่ใช้ในการ mount โฟลเดอร์ที่แชร์จาก windows คือ mount_smbfs ครับ คำสั่งนี้เอาไว้ mount ระบบไฟล์ของ Samba ครับ ซึ่งก็สามารถใช้ mount ระบบไฟล์ของ Windows Share ได้เหมือนกัน

ก่อนอื่นให้เราทดสอบการ mount ผ่านเครือข่ายก่อนครับ เปลี่ยนสิทธิ์เป็น root ด้วย su ก่อน แล้วใช้คำสั่ง
#mount_smbfs //Administrator@eserver/freebsdbackup$ /mnt
สังเกตุครับ
  • mount_smbfs สั่งให้ mount ระบบ samba file system
  • //Administrator@eserver ให้เรากรอก ชื่อผู้ใช้ที่มีสิทธิ์@ชื่อเครื่องคอมพิวเตอร์ในระบบ Windows
  • /freebsdbackup$ เป็นชื่อของ Share ที่เราได้เปิดไว้
  • /mnt เป็นการกำหนดว่า จะให้ไป map ไว้ที่ไหน
พอพิมพ์คำสั่งเสร็จเคาะ Enter ถ้าไม่มีอะไรผิดพลาดก็จะขึ้น
password:_
ให้เรากรอกรหัสผ่านลงไปครับ ตรวจสอบว่าสำเร็จไหม โดยให้เราลองเ้ข้าไปที่ /mnt ครับ แล้วทดสอบการสร้างไฟล์ หรือ Folder ดู แล้วไปดูที่เครื่องที่เราแชร์ไว้ว่ามันมาไหม ถ้าสำเร็จเราจะมาเริ่มต้นกันล่ะ อ้อ ก่อนอื่น ให้ #umount /mnt ก่อนครับ ในตัวอย่างนี้ ผมจะเก็บฐานข้อมูลของ MySql ไว้ที่ /var/db/mysql และ เก็บเว็บไซต์ต่าง ๆ ไว้ที่ /usr/local/www

ทำการสร้างไฟล์ .nsmbrc ไปไว้ที่ /root ครับ เนื้อหาในไฟล์ตามนี้ ( ~/.nsmbrc ตัว ~ หมายถึง home directory ของ user นั้น ๆ ในที่นี้คือ /root)
[default]
workgroup=CBANET

[ESERVER]
addr=192.168.1.3

[ESERVER:ADMINISTRATOR]
password=mypassword
อธิบาย
  • [default] --> กำหนด Section ปริยาย
  • workgroup=CBANET --> ตรงนี้กรอกชื่อ Work Group ของเรา
  • [ESERVER] --> Section นี้จะเป็นชื่อเครื่องที่เปิดแชร์ ในที่นี้เป็น Windows server 2003 ข้างต้น
  • addr=192.168.1.3 --> Ip ของเครื่องที่เปิดแชร์
  • [ESERVER:ADMINISTRATOR] --> Section นี้สำคัญครับ ชื่อเครื่อง:ชื่อ user ที่มีสิทธิ์เข้าใช้
  • password=mypassword --> รหัสผ่านของ user นั้น
เซฟแล้วเปลี่ยนสิทธิ์ไฟล์นี้เป็น 600 ครับ อนุญาติให้เฉพาะ root อ่านและเขียนได้
#chmod 600 /root/.nsmbrc
หลังจากนั้น ลองรันคำสั่ง
#mount_smbfs -N //Administrator@eserver/freebsdbackup$ /mnt
Option -N ที่เพิ่มเข้ามาจะไปเรียกรหัสผ่านที่อยู่ในไฟล์ ~/.nsmbrc ถ้าผ่าน แสดงว่าใช้งานได้แล้ว อ้อแล้วอย่าลืม #umount /mnt ด้วยนะครับ

หลังจากนั้นเราจะมาสร้าง Script ในการ backup ไฟล์กัน โดยผมสร้างไฟล์ที่ชื่อว่า backup.sh ไว้ใน /root ครับ เนื้อหาในไฟล์ ก็ตามนี้
#! /bin/bash
suffix=$(date +%Y%m%d)
mount_smbfs -N //Administrator@eserver/freebsdbackup$ /mnt
tar -czf /mnt/FreeBSD/backup/"$suffix"-mysql.tar.gz /var/db/mysql/
tar -czf /mnt/FreeBSD/backup/"$suffix"-www.tar.gz /usr/local/www/
umount /mnt
อธิบายนิดนึงครับ บรรทัดที่
  1. บอกว่าใช้ shell ตัวไหนในที่นี้ใช้ bash ครับ
  2. กำหนดตัวแปร suffix โดยให้เก็บค่า ปี(YYYY) เดือน(mm) และวันที่(dd) เช่น 20070921 จากคำสั่ง date
  3. ทำการ mount ไฟล์ระบบของวินโดวน์จากเครื่องชื่อ eserver ด้วยผู้ใช้ Administrator โดยใช้ password จากไฟล์ ~/.nsmbrc ไปไว้ที่ /mnt
  4. บีบอัดฐานข้อมูลจาก /var/db/mysql โดยใช้ tar ไปไว้ที่ /mnt/FreeBSD/backup/ โดยชื่อไฟล์จะอยู่ในรูปแบบ YYYYmmdd-mysql.tar.gz เช่น 20070921-mysql.tar.gz
  5. เหมือนบรรทัดที่ 4 แต่เป็นที่เก็บเว็บ (/usr/local/www)
  6. ไม่อธิบายได้ไหมครับ ^.^
ทดสอบครับว่าทำงานได้ไหม โดยรัน
#sh /root/backup.sh
แล้วลองเข้าไปดูที่ Folder ที่เราได้ แชร์ไว้ว่ามีไฟล์เพิ่มขึ้นมาไหม ถ้ามีแสดงว่า Script ผ่านแล้ว เอาหล่ะ หลังจากนั้นเราจะกำหนดให้ script นี้รันทุกวันครับโดยใช้ cron กัน ในนี้ผมใช้วิธีการแก้ไขไฟล์ /etc/crontab เพิ่มบรรทัด
1        4       *       *       *       root    sh /root/backup.sh
ไฟล์ /etc/crontab จะเป็นไฟล์ตั้งเวลาการทำงานของโปรแกรมต่าง ๆ ครับ ไฟล์นี้จะเป็นไฟล์ระบบ ดังนั้นจงระวังในการแก้ไขครับ อธิบายนิดหนึ่งสำหรับใครที่รู้เรื่อง crontab ดูบรรทัดที่เพิ่มเข้าไป จะแบ่งออกเป็น 7 ส่วนส่วนต่าง ๆ ทำงานดังนี้



หมายถึงให้ทำงาน ทุกวัน ที่เวลา ตี 04:01 น.

เสร็จแล้วครับ หลังจากนั้น เราก็จะมี ระบบ backup ที่สมบูรณ์แบบ หุหุ เวอร์ไปครับ

1 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

ง่าย ๆ กว่านั้นก็มีน้อ...

เอา script ทั้งหมดมาเขียนใน contrab เลยก็ได้น้อ ไม่ต้อง bush ให้ยุ่ง เด้อ...