ย้าย WordPress ด้วย CLI (WP-CLI + mysqldump + rsync) – สำหรับเว็บขนาดใหญ่

สำหรับเว็บไซต์ WordPress ขนาดใหญ่ที่มีข้อมูลหลาย GB การย้ายด้วย Plugin อาจไม่เหมาะสม การใช้ Command Line ผ่าน WP-CLI, mysqldump และ rsync เป็นวิธีที่เร็วและเชื่อถือได้มากกว่า บทความนี้จะแนะนำวิธีย้าย WordPress มายัง Cloud VPS ของ de.co.th ด้วยเครื่องมือ CLI

ทำไมต้องย้ายด้วย CLI?

การย้ายด้วย CLI มีข้อดีหลายประการ ได้แก่ รองรับเว็บขนาดใหญ่ได้โดยไม่มีข้อจำกัดขนาดไฟล์ rsync โอนเฉพาะไฟล์ที่เปลี่ยนแปลงทำให้เร็วกว่าการดาวน์โหลดทั้งหมด สามารถเขียน Script อัตโนมัติได้ WP-CLI จัดการ URL และการตั้งค่าได้อย่างรวดเร็ว และ mysqldump สำรองฐานข้อมูลได้แม่นยำ

เครื่องมือที่ต้องใช้

ต้องมี SSH Access ทั้ง Server เดิมและ Cloud VPS ใหม่ WP-CLI ติดตั้งบน Server ปลายทาง (Cloud VPS ของ de.co.th สามารถติดตั้งได้ทันที) rsync สำหรับโอนไฟล์ และ mysqldump สำหรับสำรองฐานข้อมูล

ขั้นตอนที่ 1: สำรองฐานข้อมูลด้วย mysqldump

SSH เข้า Server เดิมแล้วใช้คำสั่ง mysqldump เพื่อ Export ฐานข้อมูล คำสั่งนี้จะสร้างไฟล์ SQL ที่มีข้อมูลทั้งหมดของฐานข้อมูล WordPress

# ดูข้อมูลฐานข้อมูลจาก wp-config.php
grep -E "DB_NAME|DB_USER|DB_PASSWORD|DB_HOST" wp-config.php

# Export ฐานข้อมูล
mysqldump -u db_user -p'db_password' db_name > wordpress_db.sql

# บีบอัดเพื่อประหยัดพื้นที่และเวลาโอน
gzip wordpress_db.sql

ขั้นตอนที่ 2: โอนไฟล์ด้วย rsync

rsync เป็นเครื่องมือที่ดีที่สุดสำหรับการโอนไฟล์จำนวนมากระหว่าง Server เพราะโอนเฉพาะไฟล์ที่เปลี่ยนแปลงเท่านั้น ไม่ต้องโอนไฟล์ทั้งหมดใหม่ทุกครั้ง

# โอนไฟล์ทั้งหมดจาก Server เดิมไป VPS ใหม่
rsync -avz --progress -e "ssh -p 22" \
  /var/www/html/wordpress/ \
  user@new-vps-ip:/var/www/vhosts/example.com/httpdocs/

# โอนไฟล์ฐานข้อมูลด้วย
rsync -avz --progress -e "ssh -p 22" \
  wordpress_db.sql.gz \
  user@new-vps-ip:/tmp/

# หรือใช้ scp สำหรับไฟล์เดี่ยว
scp wordpress_db.sql.gz user@new-vps-ip:/tmp/

ขั้นตอนที่ 3: Import ฐานข้อมูลบน Cloud VPS

SSH เข้า Cloud VPS ใหม่ สร้างฐานข้อมูลและ User ผ่าน Plesk ก่อน แล้ว Import ไฟล์ SQL

# แตกไฟล์บีบอัด
gunzip wordpress_db.sql.gz

# Import ฐานข้อมูล
mysql -u new_db_user -p'new_db_password' new_db_name < /tmp/wordpress_db.sql

ขั้นตอนที่ 4: แก้ไข wp-config.php

แก้ไขข้อมูลการเชื่อมต่อฐานข้อมูลให้ตรงกับฐานข้อมูลบน Cloud VPS ใหม่

# แก้ไขด้วย sed
cd /var/www/vhosts/example.com/httpdocs/
sed -i "s/old_db_name/new_db_name/g" wp-config.php
sed -i "s/old_db_user/new_db_user/g" wp-config.php
sed -i "s/old_db_password/new_db_password/g" wp-config.php

# หรือแก้ด้วย nano/vim
nano wp-config.php

ขั้นตอนที่ 5: อัปเดต URL ด้วย WP-CLI

WP-CLI ทำให้การเปลี่ยน URL ในฐานข้อมูลเป็นเรื่องง่าย คำสั่ง search-replace จะค้นหาและเปลี่ยน URL ในทุกตารางของฐานข้อมูล รวมถึง Serialized Data ที่ Plugin หลายตัวใช้

# ติดตั้ง WP-CLI (ถ้ายังไม่มี)
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

# Search-Replace URL (ทดลองก่อนด้วย --dry-run)
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --all-tables --dry-run

# ทำจริง
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --all-tables

# ล้าง Cache
wp cache flush

ขั้นตอนที่ 6: ตั้งค่า Permission และ Ownership

# ตั้งค่า Ownership ตามรูปแบบ Plesk
chown -R example.com:psacln /var/www/vhosts/example.com/httpdocs/

# ตั้งค่า Permission
find /var/www/vhosts/example.com/httpdocs/ -type d -exec chmod 755 {} \;
find /var/www/vhosts/example.com/httpdocs/ -type f -exec chmod 644 {} \;

# ตั้งค่า wp-config.php ให้ปลอดภัยยิ่งขึ้น
chmod 600 wp-config.php

Migration Script อัตโนมัติ

สามารถรวมขั้นตอนทั้งหมดเขียนเป็น Script เพื่อใช้ซ้ำได้

#!/bin/bash
# WordPress Migration Script

# ตัวแปร
 OLD_SERVER="user@old-server-ip"
OLD_PATH="/var/www/html/wordpress"
NEW_PATH="/var/www/vhosts/example.com/httpdocs"
OLD_URL="https://old-domain.com"
NEW_URL="https://new-domain.com"
DB_NAME="wp_database"
DB_USER="wp_user"
DB_PASS="wp_password"

echo "=== Step 1: Sync files ==="
rsync -avz --progress -e ssh $OLD_SERVER:$OLD_PATH/ $NEW_PATH/

echo "=== Step 2: Import database ==="
rsync -avz -e ssh $OLD_SERVER:/tmp/wordpress_db.sql.gz /tmp/
gunzip /tmp/wordpress_db.sql.gz
mysql -u $DB_USER -p"$DB_PASS" $DB_NAME < /tmp/wordpress_db.sql

echo "=== Step 3: Update wp-config.php ==="
# แก้ไขข้อมูลฐานข้อมูลใน wp-config.php

echo "=== Step 4: Search-Replace URLs ==="
cd $NEW_PATH
wp search-replace "$OLD_URL" "$NEW_URL" --all-tables --allow-root

echo "=== Step 5: Fix permissions ==="
chown -R example.com:psacln $NEW_PATH/
find $NEW_PATH -type d -exec chmod 755 {} \;
find $NEW_PATH -type f -exec chmod 644 {} \;

echo "=== Step 6: Flush cache ==="
wp cache flush --allow-root

echo "=== Migration complete! ==="

สรุป

การย้าย WordPress ด้วย CLI เหมาะสำหรับเว็บขนาดใหญ่ที่ต้องการความเร็วและความแม่นยำ WP-CLI, mysqldump และ rsync เป็นเครื่องมือมาตรฐานที่ทำงานร่วมกันได้อย่างดี Cloud VPS ของ de.co.th พร้อม Plesk ให้ SSH Access และสามารถติดตั้ง WP-CLI ได้ทันที ทำให้การย้ายเว็บเป็นเรื่องง่าย