ทำไมต้องรู้วิธี Import/Export Database?
การ Import/Export Database MySQL เป็นทักษะสำคัญสำหรับทุกคนที่ดูแลเว็บไซต์ ไม่ว่าจะเป็นการ Backup ข้อมูลสำคัญ, ย้าย WordPress ไปยัง Hosting ใหม่, Restore จาก Backup หลังเกิดปัญหา, หรือ Clone เว็บสำหรับ Staging
วิธีหลักมีสองแบบ: ผ่าน phpMyAdmin (GUI ที่ใช้ง่าย) และ Command Line ด้วย mysqldump (เร็วกว่าและไม่ติด Upload Limit) บทความนี้จะครอบคลุมทั้งสองวิธี
Export ด้วย phpMyAdmin
Export เป็น SQL File
- เข้า phpMyAdmin ผ่าน cPanel > phpMyAdmin
- คลิก Database ที่ต้องการ Export ในแถบซ้าย
- คลิก Tab Export ด้านบน
- เลือก Method: Quick (SQL ทั้ง Database) หรือ Custom (เลือกตารางหรือ Format เพิ่มเติม)
- Format: เลือก SQL
- คลิก Export — จะดาวน์โหลดไฟล์ .sql
Export บางตารางหรือ Export เป็น CSV
ใน Custom Mode เลือกเฉพาะ Table ที่ต้องการ หรือเปลี่ยน Format เป็น CSV สำหรับนำไปใช้ใน Excel หรือ Google Sheets
Export ด้วย Command Line (mysqldump)
วิธีนี้เร็วกว่าและรองรับ Database ขนาดใหญ่ได้ดีกว่า phpMyAdmin:
# Export Database ทั้งหมด
mysqldump -u dbuser -p dbname > backup.sql
# Export พร้อม Compress ทันที
mysqldump -u dbuser -p dbname | gzip > backup_$(date +%Y%m%d).sql.gz
# Export เฉพาะบาง Table
mysqldump -u dbuser -p dbname table1 table2 > partial_backup.sql
# Export โครงสร้าง (Schema) อย่างเดียวไม่รวมข้อมูล
mysqldump -u dbuser -p --no-data dbname > schema_only.sql
# Export ข้อมูลอย่างเดียวไม่รวม Schema
mysqldump -u dbuser -p --no-create-info dbname > data_only.sql
Import ด้วย phpMyAdmin
- เข้า phpMyAdmin แล้วเลือก Database ปลายทาง (ต้องสร้างไว้ก่อน)
- คลิก Tab Import
- คลิก Choose File เลือกไฟล์ .sql หรือ .sql.gz
- ตรวจสอบ Character Set: ควรเป็น utf8 หรือ utf8mb4
- คลิก Import รอจนแถบ Progress เสร็จ
Import ด้วย Command Line (mysql command)
# Import จาก SQL File ปกติ
mysql -u dbuser -p dbname < backup.sql
# Import จากไฟล์ที่ Compress แล้ว
gunzip < backup.sql.gz | mysql -u dbuser -p dbname
# Import พร้อมดู Progress
pv backup.sql | mysql -u dbuser -p dbname
# Import พร้อมแสดง Verbose
mysql -u dbuser -p --verbose dbname < backup.sql
แก้ปัญหาไฟล์ใหญ่เกิน Upload Limit
เมื่อ Database ใหญ่เกิน Limit ของ phpMyAdmin มีหลายวิธีแก้:
วิธีที่ 1: แก้ไขค่า PHP สำหรับ phpMyAdmin
เพิ่มในไฟล์ .htaccess ใน Directory ของ phpMyAdmin หรือ Root:
php_value upload_max_filesize 512M
php_value post_max_size 512M
php_value max_execution_time 600
php_value memory_limit 512M
วิธีที่ 2: วางไฟล์บน Server แล้ว Import ผ่าน phpMyAdmin
Upload ไฟล์ .sql ขึ้น Server ผ่าน FTP ไปไว้ใน Directory ที่ phpMyAdmin สามารถอ่านได้ (ต้องตั้งค่า $cfg['UploadDir'] ใน config.inc.php ของ phpMyAdmin)
วิธีที่ 3: Import ผ่าน PHP Script
สร้าง PHP Script สำหรับ Import Database ขนาดใหญ่โดยเฉพาะ:
<?php
$host = 'localhost';
$user = 'dbuser';
$pass = 'dbpass';
$db = 'dbname';
$file = 'backup.sql';
$conn = new mysqli($host, $user, $pass, $db);
$conn->set_charset('utf8mb4');
$sql = file_get_contents($file);
$queries = explode(";\n", $sql);
foreach ($queries as $query) {
if (trim($query)) $conn->query($query);
}
echo "Import complete!";
?>
ตรวจสอบหลัง Import
# ตรวจสอบจำนวน Table หลัง Import
mysql -u dbuser -p -e "USE dbname; SHOW TABLES;"
# ตรวจสอบจำนวน Record ในตารางหลัก
mysql -u dbuser -p -e "SELECT COUNT(*) FROM dbname.wp_posts;"
# ตรวจสอบ Character Set
mysql -u dbuser -p -e "SHOW CREATE TABLE dbname.wp_options\G"
# ตรวจสอบว่าไม่มี Error ใน Import
mysql -u dbuser -p dbname < backup.sql 2>&1 | grep -i "error"
wp_options ด้วย: UPDATE wp_options SET option_value='https://newdomain.com' WHERE option_name IN ('siteurl','home');แก้ปัญหาที่พบบ่อย
Error: "Got a packet bigger than 'max_allowed_packet'"
เกิดเมื่อ Row ใน Database ใหญ่เกินค่า max_allowed_packet แก้ไขโดยเพิ่มค่าใน my.cnf หรือผ่าน Command Line:
mysql -u dbuser -p --max_allowed_packet=256M dbname < backup.sql
Error: "Unknown collation: utf8mb4_0900_ai_ci"
เกิดเมื่อ Export จาก MySQL 8 แต่ Import ไปยัง MySQL 5.7 ซึ่งไม่รองรับ Collation ใหม่ แก้ไขโดยแทนที่ใน SQL File:
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' backup.sql
Import ค้างไม่เสร็จ หรือ Timeout
เกิดจาก PHP Execution Time ไม่พอ ใช้ Command Line mysql แทน phpMyAdmin สำหรับ Database ขนาดใหญ่ หรือเพิ่ม max_execution_time ใน .htaccess
คำถามที่พบบ่อย
ควร Export เป็น SQL หรือ CSV?
SQL เหมาะสำหรับ Backup และ Restore เว็บไซต์เพราะเก็บทั้ง Schema และข้อมูลครบถ้วน CSV เหมาะสำหรับนำข้อมูลไปวิเคราะห์ใน Excel หรือโปรแกรมอื่น แต่ Import กลับ MySQL ได้ยากกว่า
Database ขนาดเท่าไหร่ถึงควรใช้ Command Line แทน phpMyAdmin?
ถ้า Database ใหญ่กว่า 50 MB ควรใช้ mysqldump/mysql ผ่าน SSH ดีกว่า phpMyAdmin เพราะไม่ติด Upload Limit และเร็วกว่ามาก สำหรับ Database ขนาดใหญ่มากกว่า 1 GB ควรใช้ Command Line เท่านั้น
หลัง Import WordPress แล้วเข้าไม่ได้ ต้องทำอะไร?
อัปเดต URL ใน Database ก่อนเป็นอันดับแรก จากนั้นตรวจสอบ wp-config.php ว่า Database credentials ถูกต้อง แล้วล้าง Cache ทั้งหมด ถ้ายังไม่ได้ ตรวจสอบ .htaccess ว่า WordPress Rewrite Rules ยังอยู่