ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ย้ายเว็บไซต์ WordPress ไปโฮสต์ใหม่

ย้ายเว็บไซต์ WordPress ไปโฮสต์ใหม่

การย้ายเว็บไซต์ WordPress ไปโฮสต์ใหม่ประกอบด้วยการย้ายสองส่วนเสมอ คือ ไฟล์ (ตัว WordPress, ธีม, ปลั๊กอิน และไฟล์ใน wp-content/uploads) และ ฐานข้อมูล (บทความ หน้าเว็บ การตั้งค่า และผู้ใช้) เมื่อย้ายครบแล้วจึงชี้โดเมนไปที่โฮสต์ใหม่ คู่มือนี้อธิบายวิธีย้ายด้วยตนเองผ่าน SSH ซึ่งใช้ได้กับเว็บทุกขนาด และกล่าวถึงวิธีใช้ปลั๊กอินโดยสรุป

หัวใจของการย้ายโดยไม่ให้เว็บล่มคือ เตรียมเว็บบนโฮสต์ใหม่ให้เสร็จและทดสอบก่อน แล้วจึงเปลี่ยน DNS เป็นขั้นตอนสุดท้าย

สิ่งที่ต้องเตรียม

  • สิทธิ์ SSH หรืออย่างน้อย FTP และ phpMyAdmin บนโฮสต์เดิม
  • โฮสต์ใหม่ที่พร้อมใช้งาน เช่น Web Hosting ที่ใช้ Plesk หรือ DirectAdmin หรือ Cloud Server ที่ติดตั้ง Web Server, PHP และ MariaDB/MySQL แล้ว
  • เวอร์ชัน PHP บนโฮสต์ใหม่ที่ธีมและปลั๊กอินรองรับ ควรเท่ากับหรือใหม่กว่าโฮสต์เดิมเล็กน้อย
  • สิทธิ์แก้ไข DNS ของโดเมน
  • พื้นที่ว่างเพียงพอบนทั้งสองฝั่งสำหรับไฟล์สำรอง

หมายเหตุ: สำรองเว็บไซต์ทั้งไฟล์และฐานข้อมูลเก็บไว้ในเครื่องของคุณก่อนเริ่ม และงดแก้ไขเนื้อหาหรือรับคำสั่งซื้อบนเว็บเดิมระหว่างย้าย เพื่อไม่ให้ข้อมูลที่เกิดขึ้นระหว่างทางสูญหาย

ขั้นตอนที่ 1: ลดค่า TTL ของ DNS ล่วงหน้า

อย่างน้อย 24 ชั่วโมงก่อนย้าย ให้ลดค่า TTL ของ A Record ของโดเมนและ www ลงเหลือประมาณ 300 วินาที เพื่อให้การเปลี่ยน IP ในวันย้ายมีผลเร็ว ดูความหมายของ Record แต่ละชนิดได้ที่ ทำความรู้จัก DNS Record

ขั้นตอนที่ 2: ดูข้อมูลฐานข้อมูลจาก wp-config.php

บนโฮสต์เดิม เข้าไปที่โฟลเดอร์ของเว็บ (ตัวอย่างนี้ใช้ /var/www/example.com ให้เปลี่ยนเป็นพาธจริง) แล้วดูค่าฐานข้อมูล

cd /var/www/example.com
grep -E "DB_NAME|DB_USER|DB_HOST|table_prefix" wp-config.php

จดชื่อฐานข้อมูล ชื่อผู้ใช้ และ $table_prefix ไว้ ค่า prefix ต้องเหมือนเดิมบนโฮสต์ใหม่

ขั้นตอนที่ 3: Export ฐานข้อมูล

mysqldump --single-transaction --default-character-set=utf8mb4 -u DBUSER -p DBNAME > ~/site-db.sql

ระบบจะถามรหัสผ่านของผู้ใช้ฐานข้อมูล เมื่อเสร็จจะไม่มีข้อความแสดง ตรวจสอบว่าไฟล์มีขนาดสมเหตุสมผลและจบไฟล์สมบูรณ์

ls -lh ~/site-db.sql
tail -n 1 ~/site-db.sql

บรรทัดสุดท้ายควรเป็น -- Dump completed on ... หากใช้ Shared Hosting ที่ไม่มี SSH สามารถใช้เมนู Export ใน phpMyAdmin แทนได้ ดูรายละเอียดการสำรองเพิ่มเติมที่ สำรองและกู้คืนฐานข้อมูล MySQL/MariaDB ด้วย mysqldump

ขั้นตอนที่ 4: บีบอัดไฟล์เว็บไซต์

tar -czf ~/site-files.tar.gz -C /var/www/example.com .

คำสั่งนี้รวมทุกไฟล์รวมถึงไฟล์ซ่อนอย่าง .htaccess หากเว็บมีโฟลเดอร์ Cache ขนาดใหญ่ เช่น wp-content/cache สามารถยกเว้นได้ด้วย --exclude=./wp-content/cache (วางไว้ก่อน -C)

ขั้นตอนที่ 5: ส่งไฟล์ไปยังโฮสต์ใหม่

จากโฮสต์เดิม ส่งไฟล์ทั้งสองไปยังโฮสต์ใหม่ด้วย scp หรือ rsync

rsync -avP ~/site-db.sql ~/site-files.tar.gz user@NEW_SERVER_IP:~/

หากไม่มี SSH ทั้งสองฝั่ง ให้ดาวน์โหลดไฟล์ลงเครื่องของคุณแล้วอัปโหลดขึ้นโฮสต์ใหม่ผ่าน File Manager หรือ FTP

ขั้นตอนที่ 6: สร้างฐานข้อมูลและนำเข้าบนโฮสต์ใหม่

บน Plesk หรือ DirectAdmin ให้สร้างฐานข้อมูลและผู้ใช้จากหน้า Databases ของ Control Panel (ดู สร้างฐานข้อมูล MySQL บน DirectAdmin) บน Cloud Server ดูวิธีสร้างด้วยคำสั่งได้ที่ สร้างฐานข้อมูลและผู้ใช้ MySQL/MariaDB จากนั้นนำเข้า

mysql --default-character-set=utf8mb4 -u NEWDBUSER -p NEWDBNAME < ~/site-db.sql

ถ้าสำเร็จจะไม่มีข้อความแสดง

ขั้นตอนที่ 7: แตกไฟล์และแก้ไข wp-config.php

แตกไฟล์ลงในโฟลเดอร์เว็บของโดเมนบนโฮสต์ใหม่ บน Plesk มักเป็น /var/www/vhosts/example.com/httpdocs บน DirectAdmin มักเป็น /home/USERNAME/domains/example.com/public_html ให้ลบไฟล์หน้าเริ่มต้นที่ระบบสร้างไว้ เช่น index.html ก่อน

cd /path/to/document-root
tar -xzf ~/site-files.tar.gz

แก้ไข wp-config.php ให้ใช้ค่าฐานข้อมูลใหม่

define( 'DB_NAME', 'NEWDBNAME' );
define( 'DB_USER', 'NEWDBUSER' );
define( 'DB_PASSWORD', 'NEWDBPASSWORD' );
define( 'DB_HOST', 'localhost' );

ตรวจสิทธิ์เจ้าของไฟล์ให้ตรงกับผู้ใช้ที่ Web Server หรือ PHP-FPM ใช้งาน หากแตกไฟล์ด้วย root บน Cloud Server ที่ใช้ Nginx บน Ubuntu ตัวอย่างคือ

sudo chown -R www-data:www-data /path/to/document-root

บน Plesk และ DirectAdmin ให้แตกไฟล์ด้วยผู้ใช้ของโดเมนนั้นเอง ไม่ใช่ root เพื่อให้สิทธิ์ถูกต้องตั้งแต่แรก

ขั้นตอนที่ 8: เปลี่ยน URL (เฉพาะกรณีเปลี่ยนโดเมน)

ถ้าใช้โดเมนเดิม ข้ามขั้นตอนนี้ได้ ถ้าเปลี่ยนโดเมนหรือเปลี่ยนจาก http เป็น https ให้ใช้ WP-CLI ซึ่งจัดการข้อมูลแบบ Serialized ได้ถูกต้อง ห้ามใช้คำสั่ง Find/Replace ทั่วไปกับไฟล์ SQL เพราะจะทำให้ข้อมูล Serialized เสีย ทดลองก่อนด้วย --dry-run

wp search-replace 'https://old.example.com' 'https://new.example.com' --all-tables --dry-run

เมื่อเห็นจำนวนแถวที่จะถูกแก้ไขและถูกต้องแล้ว จึงรันจริงโดยตัด --dry-run ออก

ขั้นตอนที่ 9: ทดสอบก่อนเปลี่ยน DNS

แก้ไขไฟล์ hosts บนเครื่องของคุณให้โดเมนชี้ไปที่ IP ของโฮสต์ใหม่ชั่วคราว เช่น

203.0.113.10  example.com www.example.com

บน Windows ไฟล์อยู่ที่ C:\Windows\System32\drivers\etc\hosts (เปิด Notepad ด้วย Run as administrator) บน macOS ดู วิธีการแก้ไข Hosts File บน macOS จากนั้นเปิดเว็บ ทดสอบหน้าแรก บทความ รูปภาพ ฟอร์ม และเข้าสู่ระบบ /wp-admin ไปที่ Settings > Permalinks แล้วกด Save Changes หนึ่งครั้งเพื่อสร้างกฎ Rewrite ใหม่

ขั้นตอนที่ 10: เปลี่ยน DNS และติดตั้ง SSL

เมื่อทุกอย่างถูกต้อง แก้ A Record ของโดเมนและ www ให้ชี้ไปยัง IP ใหม่ ตามคู่มือ ชี้โดเมนไปยังเซิร์ฟเวอร์ ระวังอย่าแก้ MX Record หากอีเมลยังใช้บริการเดิม เมื่อ DNS ชี้มาที่โฮสต์ใหม่แล้ว ให้ติดตั้ง SSL เช่น Let's Encrypt บน Plesk หรือ บน DirectAdmin อย่าลืมลบบรรทัดที่เพิ่มในไฟล์ hosts ออก

ทางเลือก: ย้ายด้วยปลั๊กอิน

สำหรับเว็บขนาดเล็ก สามารถใช้ปลั๊กอินอย่าง All-in-One WP Migration หรือ Duplicator ซึ่งรวมไฟล์และฐานข้อมูลเป็นไฟล์เดียวแล้วนำไปติดตั้งบนโฮสต์ใหม่ ข้อจำกัดคือขนาดไฟล์อัปโหลดของโฮสต์ปลายทาง และปลั๊กอินบางตัวจำกัดขนาดในเวอร์ชันฟรี ดูวิธีเพิ่มขนาดได้ที่ เพิ่มขนาดไฟล์อัปโหลดสูงสุดใน WordPress

ตรวจสอบผลลัพธ์

  • ตรวจว่า DNS ชี้ IP ใหม่แล้วด้วย dig +short example.com
  • เปิดเว็บด้วยเบราว์เซอร์แบบ Private ตรวจหน้าแรก บทความ และรูปภาพ
  • ใน /wp-admin ไปที่ Tools > Site Health ตรวจว่าไม่มีปัญหาสำคัญ
  • ทดสอบฟอร์มติดต่อและการส่งอีเมลจากเว็บ

ปัญหาที่พบบ่อย

ขึ้น Error establishing a database connection

ค่าใน wp-config.php ไม่ตรงกับฐานข้อมูลใหม่ หรือผู้ใช้ไม่มีสิทธิ์ในฐานข้อมูลนั้น ดู แก้ปัญหา Error Establishing a Database Connection

หน้าแรกเปิดได้ แต่หน้าอื่นขึ้น 404

กฎ Rewrite ยังไม่ทำงาน บน Apache ตรวจว่ามีไฟล์ .htaccess บน Nginx ต้องมี try_files $uri $uri/ /index.php?$args; ใน location / แล้วบันทึก Permalinks ใหม่อีกครั้ง

ภาษาไทยแสดงเป็นเครื่องหมายคำถามหรืออักขระแปลก

เกิดจาก Character set ไม่ตรงกันระหว่าง Export และ Import ให้ Export และ Import ใหม่ด้วย --default-character-set=utf8mb4 ตามตัวอย่าง

ถูก Redirect กลับไปโดเมนเก่า

ค่า siteurl และ home ในฐานข้อมูลยังเป็นโดเมนเดิม ให้ทำขั้นตอนที่ 8 และตรวจว่าไม่ได้กำหนด WP_HOME หรือ WP_SITEURL ค้างไว้ใน wp-config.php

หากต้องการความช่วยเหลือในการย้ายเว็บไซต์มายังบริการของ THAI DATA CLOUD ติดต่อทีมซัพพอร์ตได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security