สำรองข้อมูล WordPress
คำสั่งที่ใช้ในการสำรองข้อมูลไฟล์เว็บไซต์ของเรา
บทความนี้ คือรูปแบบและวิธีการสำรองข้อมูล WordPress ในกรณีที่เราติดตั้งหรือสร้าง Hosting ผ่านทาง Droplet ของ DigitalOcean ซึ่งเป็นการติดตั้งผ่าย Linux ที่ทางผู้ให้บริการจำลองไว้ให้ แล้วเรามาติดตั้ง Famp เพิมเติม หลังจากจากนั้น ได้ติดตั้ง WordPress ลงบน Hosting ที่เราสร้าง
ต้องการใช้งานเร่งด่วน
สำหรับคนที่เข้าใจ แต่อาจจะลืมในการใช้คำสั่งหรือขั้นตอนต่างๆๆ และไม่ต้องการอ่านรายละเอียดมาก
กรณีการสำรอง ไฟล์ และ mysql
ssh username@Ip Address
mkdir -p /backup/wordpress
tar -czf /backup/wordpress-`date '+%m%d%y'`.tar.gz /var/www/knupan
mysqldump -u your_username -p your_database_name > your_database_name-$(date +%F).sql
กรณีนำข้อมูลเข้า
mysql -u [username] -p newdatabase < [database name].sql
sudo cp -a /backup/wordpress/. /var/www/wordpress
sudo chown -R www-data:www-data /var/www/knupan
sudo find /var/www/knupan/ -type d -exec chmod 750 {} \;
sudo find /var/www/knupan/ -type f -exec chmod 640 {} \;
sudo systemctl restart apache2
สำหรับคนที่ยังไม่เข้าใจและต้องการอ่านรายละเอียด
สำหรับวิธีการสำรอง WordPress ต้องสำรอง 2 ส่วน คือ สำรองไฟล์ข้อมูล และสำรองไฟล์ MySQL
ในการสำรอง เราต้องเลือกที่ตั้งสำหรับเก็บข้อมูลไว้ในก่อนใน Server ของเรา เมื่อเราสำรองเสร็จ เราก็นำลงมาเก็บไว้ในคอมพิวเตอร์ของเรา โดยใช้ Filezilla
เริ่มจากการเข้าไปจัดการ server ของเราก่อน ยกตัวอย่างผ่านทาง SSH โดยใช้คำสั่ง โดย Username คือผู้ใช้ กับ Ipaddress
ssh username@Ip Address
ยกตัวอย่าง ผู้ใช้คือ root หมายเลขไอพีของเว็บเรา 125.252.255.12
ssh root@125.252.255.12
กสร้างที่สำหรับเก็บข้อมูลที่เราจะสำรองมาเก็บไว้ก่อนในตัวอย่างคือสร้าง /backup/WordPress หรือจะสร้างเฉพาะ /blackup อย่างเดียวก็ได้หากเราสร้างเว็บไซต์แค่ตัวเดียว หากสร้างหลายตัวน่าจะต้องแยกแบบตัวอย่างข้างล่าง
mkdir -p /backup/wordpress
หรืออาจจะสร้างแบบนี้ หากเราต้องการสะดวก
mkdir -p /backup/
ต่อมา ใช้คำสั่ง tar -czf ในการบีบอัดข้อมูล ในตัวอย่างสมมุติว่า ที่เก็บข้อมูลเว็บไซต์ของเราอยู่ที่ /var/www/knupan ในเฟาเดอร์ Knupan นั้นแหละเป็นที่เก็บข้อมูลเว็บไซต์
ส่วนชื่อของข้อมูลเพื่อให้สะดวกในการจำ อาจจะกำหนด แบบนี้ลงไปก็ได้
tar -czf /backup/wordpress-`date '+%m%d%y'`.tar.gz /var/www/knupan
หรือเพื่อให้ง่ายในการจำ กรณีที่เราสร้างเว็บไซต์ไว้หลายเว็บอาจจะกำหนดแบบนี้ได้ แล้วแต่สะดวกว่าจะใช้แบบไหน
tar -czf /backup/knupan-`date '+%m%d%y'`.tar.gz /var/www/knupan
หลังจากที่สำรองข้อมูลที่เป็นไฟล์ต่างๆ เสร็จแล้ว ต้องการตรวจสอบแค่ใช้คำสั่ง ls
ในขั้นตอนต่อมาคือการสำรอง MySQL เช่นกัน เราต้องกำหนดว่า จะเก็บไว้ที่ วิธีการให้เราเข้าไปยังห้องที่เราต้องการเก็บ อย่างเช่นที่ผ่านมา เราสร้าง mkdir -p /backup/wordpress หากเราต้องการจะเก็บไว้ในห้องหรือฟาวเดอร์หรือไดเร็กเตอรี่ แล้วแต่เราจะเรียก ให้เราเข้าไปยังห้องที่เราต้องการก่อน แล้วใช้คำสั่ง
รูปแบบของคำสั่งในกรณีต้องการสำรอง MySQL
mysqldump -u [username] -p [database name] > [database name].sql
หรือในกรณีที่เราต้องการกำหนดชื่อของฐานข้อมูลที่เราต้องการสำรองให้ปรากฏวันเดือนปีที่สำรองด้วย อาจจะเพิ่มเติมโดยใช้คำสั่งตามด้านล่าง
mysqldump -u your_username -p your_database_name > your_database_name-$(date +%F).sql
ยกตัวอย่างเพื่อให้เข้าใจง่าย เช่น สมมุติว่า
เรามีฐานข้อมูลชื่อ drupal และมีผู้ใช้คือ root (โดยปกติจะมีการสร้างผู้ใช้ MySQL แทน root แต่ อันนี้ แค่ยกตัวเอง จะได้เข้าใจง่าย)
การใช้คำสั่งตามตัวอย่าง โดยไฟล์ที่เราสำรองจะมีวันเวลามาด้วย เมื่อเราใช้คำสั่งดังกล่าว จะมีการถาม Password
mysqldump -u root -p drupal > drupal-$(date +%F).sql
หลังจากนั้น ใช้โปแกรม filezilla ดาวโหลดน์ข้อมูลมาเก็บไว้ในเครื่องเพื่อสำรองไว้อีกชั้นหนึ่ง แต่ต้องจำขั้นตอนการสร้าง Database ไว้ให้ดี เพราะหากเราปรับแต่งขั้นตอนการสร้างหรือติดตั้งตัวฐานข้อมูลไว้ไม่เหมือนเดิม อาจจะมีปัญหาตอนเรียกคืนได้ เช่น ก่อนเว็บมีปัญหาเราใช้ Mysql หรือ Mariadb มีการติดตั้งแบบ Unix socket หรือแบบไหนอย่างไร
คำสั่งในการเรียกคืน
ขั้นตอนในการเรียกคืน MySQL ในกรณีที่ฐานข้อมูลของเรามีปัญหา
เริ่มจากสร้างฐานข้อมูลก่อน โดยการเรียกใช้งาน MySQL โดยใช้คำสั่ง
# mysql -u root -p
แล้วใช้คำสั่งสร้าง ฐานข้อมูลพร้อมกันคำสั่งออกจากฐานข้อมูลในคำสั่งเดียวกัน
CREATE DATABASE database_name; exit
เมื่อสร้างฐานข้อมูลและออกจาก MySQL แล้ว ใช้คำสั่งตัวอย่าง เพื่อเรียกฐานข้อมูลที่เราสำรองไว้กลับคืนมา ในขั้นตอนนี้ เช่นเดียวกันเราต้องเข้าไปยัง ไดเร็กเตอรี่ที่เราเก็บข้อมูลไว้ หรือไม่ต้องสร้างเส้นทางบอกว่า ไฟล์ .sql ดังกล่าวอยู่ในไดเร็กเตอรี่ไหน คำสั่งเป็นการเรียกใช้ผ่าน commandline
mysql -u [username] -p newdatabase < [database name].sql
สรุป คำสั่ง
mysql คือเรียกให้ mysql ทำงาน
-u คือใส่ชื่อผู้ใช้
-p คือรหัสผ่าน ไม่จำเป็นต้องใส่ก่อนในตอนนี้ โปรแกรมจะเรียกให้เติมเอง เมื่อใช้คำสั่ง
newdatabase คือ ชื่อฐานข้อมูลที่เราสร้างใหม่ แต่ยังไม่มีข้อมูล
database name คือชื่อฐานข้อมูลที่เราสำรองไว้ แล้วต้องการ Import เข้าฐานข้อมูลใหม่
หลังจากเสร็จสิ้นการนำเข้าฐานข้อมูลแล้ว ในขั้นตอนต่อไปคือการนำไฟล์ข้อมูลไปเก็บไว้ที่สำหรับเรียกใช้งาน เว็บไซต์
ขั้นการการนำไฟล์สำรองไปเก็บไว้
ใช้วิธีการเปิดโปรแกรม filezila แล้วส่งไฟล์เข้าไปเก็บแทนที่เดิม หรือในกรณีที่เราเคยสำรองไว้ใน Server ยังมีอยู่อาจจะใช้วิธีการ โดยใช้คำสั่งดังนี้
tar xzvf knupan-071323.tar.gz
รูปแบบคำสั่ง ในการนำเข้าไปเก็บไว้ในส่วนที่เป็นเอกสารของเว็บไซต์จะอยู่ในลักษณะนี้
sudo cp -a /backup/wordpress/. /var/www/wordpress
ยกตัวอย่าว
หลังจากที่เราแตกไฟล์มาแล้ว ข้อมูล จะอยู่ในลักษณะนี้
/var/www/knupan ส่วนที่เราต้องการจะเอาข้อมูลไปแทนที่เคยเสียหาย คือในไดเร็กเตอรี่ knupan
/var/www/knupan อีกตัวคือ พื้นที่สำหรับเก็บข้อมูลเว็บไซต์
คำสั่งที่ต้องใช้
sudo cp -a /backup/var/www/knupan/. /var/www/knupan
sudo chown -R www-data:www-data /var/www/knupan
sudo find /var/www/knupan/ -type d -exec chmod 750 {} \;
sudo find /var/www/knupan/ -type f -exec chmod 640 {} \;
sudo systemctl restart apache2
การแก้ปัญาหาเกี่ยวกับ MySQL
การรีเซ็ต Root Password
หยุดการทำงานของ MySQL
/etc/init.d/mysql stop
เปลี่ยนการทำงานของ MySQL ไปเป็น Safe Mode
sudo mysqld_safe --skip-grant-tables &
mysql -u root mysql
เปลี่ยนรหัสผ่าน
update user set password=PASSWORD("newpassword") where User='root';
FLUSH PRIVILEGES;
เป็นบทความที่อ้างอิงจาก How To Create An Off-Site Backup Of Your Site With Rsync On Centos 6
แม้ว่าในระบบ Server ที่ใช้จะใช้ Ubuntu หรือ Linux ตัวอื่น สามารถใช้ได้ แต่ อาจจะปรับบางตัวนิดหน่อยเพื่อให้เหมาะสมกับการใช้งานของเรา ทางที่ในการทำตามคำแนะนำของบทความนี้ ให้ทดสอบเพื่อทำความเข้าใจก่อน กับ Linux ตัวที่เราใช้ว่าเป็นอย่างไรบ้าง
แต่เท่าที่ทดสอบในการใช้คำสั่งต่างๆๆ สามารถใช้งานได้ไม่มีปัญหา
อีกวิธีการหนึ่งในการสำรองข้อมูล เป็นตัวเลือก
Remote Offsite Backup with Rsync
- Pull up a terminal or SSH into the target server.
- Logon as root
sudo -i
- Download the script(s).
wget https://raw.githubusercontent.com/clusterednetworks/rsync-offsite-backup/master/rsync.server.ssh.key.sh
หรืออาจจะสร้างเองได้ ตามสคริปต์ข้างล่าาง
#!/bin/sh
# Copyright (C) 2021 Ron Billings #
# info@clusterednetworks.com #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
#
#----------------------------------------
# OPTIONS
#----------------------------------------
# connection info
REMOTE_HOST=yourserver.yourdomain.com
REMOTE_USER=your-login-user
REMOTE_PORT=22
# path to private key
KEY=/home/??/
# path to backup to files to
LOCAL_PATH=/home/backup/backuptest
# path to pull the files from
REMOTE_PATH=/home/backup/backuptest
#----------------------------------------
echo "Copying files from $REMOTE_HOST to backup server ........"
/usr/bin/rsync -rsh -e "ssh -i $KEY" $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH $LOCAL_PATH
echo "Done"
wget https://raw.githubusercontent.com/clusterednetworks/rsync-offsite-backup/master/rsync.server.ssh.password.sh
#!/bin/sh
# #
# Copyright (C) 2021 Ron Billings #
# info@clusterednetworks.com #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
#
#----------------------------------------
# OPTIONS
#----------------------------------------
# connection info
REMOTE_HOST=yourserver.yourdomain.com
REMOTE_USER=username
REMOTE_PASSWORD=user1234
REMOTE_PORT=22
# local path to download the files to
LOCAL_PATH=/home/backup/backuptest
# remote path to get the files from
REMOTE_PATH=/home/backup/serverbackup
#----------------------------------------
echo "Copying files from $REMOTE_HOST to Backup Server ........"
sshpass -p $REMOTE_PASSWORD /usr/bin/rsync -rsh -e ssh $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH $LOCAL_PATH
echo "Done"
# connection info
REMOTE_HOST=yourserver.yourdomain.com
REMOTE_USER=your-login-user
REMOTE_PORT=22
# path to private key
KEY=/root/.ssh/id_rsa
# path to backup to files to
LOCAL_PATH=/root/backup
# path to pull the files from
REMOTE_PATH=/var/www/knupan
Make the script executable
chmod +x rsync.server.ssh.key.sh
- Run the script.
./rsync.server.ssh.key.sh
Setup a cronjob to run the script daily/weekly if you choose.
5 1 * * * /etc/rsync.server.ssh.key.sh >/dev/null 2>&1