การติดตั้ง MySQL และเชื่อมต่อกับ WordPress บน Cloud VPS เป็นทักษะพื้นฐานที่ผู้ดูแลเซิร์ฟเวอร์ควรทำเป็น Workshop นี้จะพาคุณผ่านทุกขั้นตอนตั้งแต่ติดตั้ง MySQL Server, สร้าง Database, ตั้งค่า User, ติดตั้ง WordPress และเชื่อมต่อทั้งสองเข้าด้วยกัน พร้อมปรับแต่งเพื่อประสิทธิภาพที่ดี
Workshop นี้เหมาะสำหรับผู้ที่มี VPS ใหม่ที่ยังไม่ได้ติดตั้งอะไร หรือต้องการเรียนรู้กระบวนการติดตั้งตั้งแต่ต้นจนจบบนระบบปฏิบัติการ Ubuntu 22.04 LTS
สิ่งที่ต้องเตรียม
- Cloud VPS ที่ใช้ Ubuntu 22.04 LTS พร้อม root access
- Domain name ที่ชี้มาที่ IP ของ VPS แล้ว (ถ้าต้องการใช้ domain)
- SSH client สำหรับเชื่อมต่อเข้า VPS
- RAM อย่างน้อย 1 GB (แนะนำ 2 GB ขึ้นไปสำหรับ Production)
ขั้นตอนที่ 1 — อัพเดตระบบและติดตั้ง Nginx
เริ่มต้นด้วยการเชื่อมต่อ SSH เข้าสู่ VPS แล้วอัพเดตระบบให้เป็นเวอร์ชันล่าสุด จากนั้นติดตั้ง Nginx เป็น Web Server
# อัพเดตระบบ
sudo apt update && sudo apt upgrade -y
# ติดตั้ง Nginx
sudo apt install nginx -y
# เปิด Firewall สำหรับ HTTP และ HTTPS
sudo ufw allow 'Nginx Full'
sudo ufw enable
# ตรวจสอบสถานะ Nginx
sudo systemctl status nginx
เปิดเบราว์เซอร์แล้วเข้า http://your_server_ip จะเห็นหน้า Welcome ของ Nginx แสดงว่าติดตั้งสำเร็จ
ขั้นตอนที่ 2 — ติดตั้ง MySQL Server
# ติดตั้ง MySQL Server
sudo apt install mysql-server -y
# ตรวจสอบเวอร์ชันและสถานะ
mysql --version
sudo systemctl status mysql
# รัน Security Script เพื่อตั้งค่าความปลอดภัย
sudo mysql_secure_installation
เมื่อรัน mysql_secure_installation จะถามคำถามหลายข้อ ให้ตอบตามนี้:
- VALIDATE PASSWORD COMPONENT: กด Y เพื่อเปิดใช้งาน แล้วเลือกระดับ 1 (MEDIUM)
- Set root password: ตั้งรหัสผ่าน root ที่แข็งแกร่ง
- Remove anonymous users: กด Y
- Disallow root login remotely: กด Y
- Remove test database: กด Y
- Reload privilege tables: กด Y
ขั้นตอนที่ 3 — สร้าง Database และ User สำหรับ WordPress
เข้าสู่ MySQL แล้วสร้าง Database, User และกำหนดสิทธิ์ที่จำเป็นสำหรับ WordPress
# เข้า MySQL ด้วย root
sudo mysql
# สร้าง Database สำหรับ WordPress
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# สร้าง User เฉพาะสำหรับ WordPress (อย่าใช้ root)
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
# ให้สิทธิ์เฉพาะ database ที่สร้าง
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
# ล้าง Privilege Cache
FLUSH PRIVILEGES;
# ตรวจสอบว่าสร้างสำเร็จ
SHOW DATABASES;
SELECT user, host FROM mysql.user WHERE user = 'wp_user';
# ออกจาก MySQL
EXIT;
ข้อสำคัญด้านความปลอดภัย:
- ห้ามใช้ root user สำหรับ WordPress โดยเด็ดขาด
- ใช้รหัสผ่านที่ซับซ้อน ประกอบด้วยตัวอักษรใหญ่ เล็ก ตัวเลข และอักขระพิเศษ
- กำหนดสิทธิ์เฉพาะ database ที่ต้องการเท่านั้น ไม่ใช้
GRANT ALL ON *.* - ใช้
utf8mb4เพื่อรองรับภาษาไทยและ Emoji ได้สมบูรณ์
ขั้นตอนที่ 4 — ติดตั้ง PHP และ Extensions ที่จำเป็น
WordPress ต้องใช้ PHP ในการทำงาน ติดตั้ง PHP-FPM พร้อม Extensions ที่จำเป็น
# ติดตั้ง PHP-FPM และ Extensions ที่จำเป็น
sudo apt install php-fpm php-mysql php-curl php-gd php-intl \
php-mbstring php-soap php-xml php-xmlrpc php-zip php-imagick -y
# ตรวจสอบเวอร์ชัน PHP
php --version
# ตรวจสอบว่า PHP-FPM ทำงาน
sudo systemctl status php8.1-fpm
ปรับค่า PHP สำหรับ WordPress ให้เหมาะสม:
# แก้ไข php.ini
sudo nano /etc/php/8.1/fpm/php.ini
# ปรับค่าเหล่านี้:
# upload_max_filesize = 64M
# post_max_size = 64M
# max_execution_time = 300
# memory_limit = 256M
# Restart PHP-FPM หลังแก้ไข
sudo systemctl restart php8.1-fpm
ขั้นตอนที่ 5 — ตั้งค่า Nginx สำหรับ WordPress
สร้างไฟล์ Server Block ของ Nginx สำหรับ WordPress
# สร้างไฟล์ config สำหรับ WordPress
sudo nano /etc/nginx/sites-available/wordpress
# ใส่เนื้อหาต่อไปนี้ (แก้ your_domain.com เป็นโดเมนจริง):
server {
listen 80;
server_name your_domain.com www.your_domain.com;
root /var/www/wordpress;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
# เปิดใช้งาน site config
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
# ลบ default site (ถ้าไม่ต้องการ)
sudo rm /etc/nginx/sites-enabled/default
# ตรวจสอบ config ว่าถูกต้อง
sudo nginx -t
# Reload Nginx
sudo systemctl reload nginx
ขั้นตอนที่ 6 — ดาวน์โหลดและติดตั้ง WordPress
# สร้างโฟลเดอร์และดาวน์โหลด WordPress
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
# ย้ายไปที่ web root
sudo mv wordpress /var/www/wordpress
# ตั้งค่า permissions
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;
ขั้นตอนที่ 7 — ตั้งค่า wp-config.php
สร้างไฟล์ wp-config.php จาก template แล้วใส่ข้อมูล Database ที่สร้างไว้
# คัดลอก template
cd /var/www/wordpress
sudo cp wp-config-sample.php wp-config.php
# แก้ไขไฟล์ config
sudo nano wp-config.php
# แก้ไขค่าเหล่านี้ให้ตรงกับที่สร้างไว้ในขั้นตอนที่ 3:
# define('DB_NAME', 'wordpress_db');
# define('DB_USER', 'wp_user');
# define('DB_PASSWORD', 'YourStrongPassword123!');
# define('DB_HOST', 'localhost');
# define('DB_CHARSET', 'utf8mb4');
# define('DB_COLLATE', 'utf8mb4_unicode_ci');
เพิ่ม Security Keys โดยดึงจาก WordPress API:
# ดึง Security Keys
curl -s https://api.wordpress.org/secret-key/1.1/salt/
# คัดลอกผลลัพธ์ไปแทนที่ส่วน Authentication Keys ใน wp-config.php
# จะได้ค่า define() สำหรับ:
# AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY
# AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT
เพิ่มการตั้งค่าเพิ่มเติมเพื่อความปลอดภัยและประสิทธิภาพ:
// เพิ่มก่อนบรรทัด "That's all, stop editing!"
// ปิดการแก้ไขไฟล์จาก Dashboard
define('DISALLOW_FILE_EDIT', true);
// จำกัดจำนวน Post Revisions
define('WP_POST_REVISIONS', 5);
// กำหนด Memory Limit
define('WP_MEMORY_LIMIT', '256M');
// ตั้งค่า Table Prefix ให้ไม่ใช่ค่า default
// แก้บรรทัดนี้: $table_prefix = 'wp_';
// เป็น: $table_prefix = 'de_';
ขั้นตอนที่ 8 — รันตัวติดตั้ง WordPress
เปิดเบราว์เซอร์แล้วเข้า http://your_domain.com จะเห็นหน้าติดตั้ง WordPress ให้ดำเนินการดังนี้:
- เลือกภาษา (ภาษาไทย หรือ English)
- กรอกชื่อเว็บไซต์
- สร้าง Admin User (ห้ามใช้ชื่อ “admin”)
- ตั้งรหัสผ่านที่แข็งแกร่ง
- กรอกอีเมลสำหรับ Admin
- กด “Install WordPress”
ขั้นตอนที่ 9 — ติดตั้ง SSL ด้วย Let’s Encrypt
HTTPS เป็นสิ่งจำเป็นสำหรับเว็บไซต์ทุกเว็บ ติดตั้ง SSL Certificate ฟรีจาก Let’s Encrypt ด้วย Certbot
# ติดตั้ง Certbot
sudo apt install certbot python3-certbot-nginx -y
# ขอ SSL Certificate
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
# Certbot จะถามอีเมลและเงื่อนไข ตอบตามที่ต้องการ
# เลือก redirect HTTP to HTTPS
# ตรวจสอบว่า auto-renew ทำงาน
sudo certbot renew --dry-run
ขั้นตอนที่ 10 — ปรับแต่ง MySQL สำหรับ WordPress
ปรับค่า MySQL ให้เหมาะสมกับ WordPress เพื่อประสิทธิภาพที่ดีขึ้น
# สร้างไฟล์ custom config
sudo nano /etc/mysql/mysql.conf.d/wordpress-tuning.cnf
# ใส่เนื้อหาต่อไปนี้ (ปรับตาม RAM ที่มี):
[mysqld]
# === InnoDB Settings ===
innodb_buffer_pool_size = 512M # ปรับตาม RAM (50-70% ของ RAM ที่เหลือ)
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# === Connection Settings ===
max_connections = 100
wait_timeout = 300
interactive_timeout = 300
# === Query Cache (MySQL 8.0 ไม่มีแล้ว — ใช้ Redis แทน) ===
# สำหรับ MySQL 5.7:
# query_cache_type = 1
# query_cache_size = 64M
# === Temporary Tables ===
tmp_table_size = 64M
max_heap_table_size = 64M
# === Slow Query Log ===
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /var/log/mysql/slow.log
# Restart MySQL เพื่อใช้ค่าใหม่
sudo systemctl restart mysql
# ตรวจสอบว่า MySQL ทำงานปกติ
sudo systemctl status mysql
# ตรวจสอบค่าที่ปรับแล้ว
sudo mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
sudo mysql -e "SHOW VARIABLES LIKE 'max_connections';"
ขั้นตอนที่ 11 — ตั้งค่า Backup อัตโนมัติ
สร้าง Script สำหรับ Backup ฐานข้อมูล WordPress อัตโนมัติ
# สร้าง backup script
sudo nano /usr/local/bin/wp-backup.sh
#!/bin/bash
# WordPress MySQL Backup Script
BACKUP_DIR="/var/backups/wordpress"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="wordpress_db"
DB_USER="wp_user"
DB_PASS="YourStrongPassword123!"
KEEP_DAYS=7
# สร้างโฟลเดอร์ backup
mkdir -p $BACKUP_DIR
# Backup database
mysqldump --single-transaction --routines --triggers \
-u $DB_USER -p"$DB_PASS" $DB_NAME | gzip > "$BACKUP_DIR/db_${DATE}.sql.gz"
# Backup WordPress files
tar czf "$BACKUP_DIR/files_${DATE}.tar.gz" /var/www/wordpress/
# ลบ backup เก่ากว่า 7 วัน
find $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete
echo "[$(date)] Backup completed: db_${DATE}.sql.gz"
# ให้สิทธิ์ execute
sudo chmod +x /usr/local/bin/wp-backup.sh
# ตั้ง Cron Job สำหรับ backup ทุกวันตอนตี 2
sudo crontab -e
# เพิ่มบรรทัด:
# 0 2 * * * /usr/local/bin/wp-backup.sh >> /var/log/wp-backup.log 2>&1
# ทดสอบรัน backup
sudo /usr/local/bin/wp-backup.sh
# ตรวจสอบไฟล์ backup
ls -lh /var/backups/wordpress/
ทดสอบการเชื่อมต่อ MySQL กับ WordPress
หลังจากติดตั้งเสร็จ ทดสอบว่าทุกอย่างทำงานถูกต้อง
# 1. ทดสอบ connection จาก command line
mysql -u wp_user -p wordpress_db -e "SELECT 1;"
# 2. ตรวจสอบ table ที่ถูกสร้างขึ้น
mysql -u wp_user -p wordpress_db -e "SHOW TABLES;"
# ควรเห็น table เหล่านี้ (prefix อาจต่างตามที่ตั้ง):
# de_commentmeta, de_comments, de_links, de_options
# de_postmeta, de_posts, de_term_relationships
# de_term_taxonomy, de_termmeta, de_terms
# de_usermeta, de_users
# 3. ตรวจสอบขนาด database
mysql -u wp_user -p wordpress_db -e "
SELECT table_name,
ROUND(data_length/1024/1024, 2) AS 'Data (MB)',
ROUND(index_length/1024/1024, 2) AS 'Index (MB)'
FROM information_schema.tables
WHERE table_schema = 'wordpress_db'
ORDER BY data_length DESC;"
# 4. ตรวจสอบ Site Health ของเว็บไซต์
# เข้า Dashboard > Tools > Site Health
# ตรวจดูว่าไม่มี Critical Issues
ปัญหาที่มักเจอและวิธีแก้ไข
Error establishing a database connection:
- ตรวจสอบว่า DB_NAME, DB_USER, DB_PASSWORD ใน wp-config.php ถูกต้อง
- ตรวจสอบว่า MySQL Service ทำงานอยู่ด้วย
systemctl status mysql - ทดสอบ connection ด้วย
mysql -u wp_user -p wordpress_db
502 Bad Gateway:
- PHP-FPM อาจหยุดทำงาน ตรวจสอบด้วย
systemctl status php8.1-fpm - ตรวจสอบว่า path ของ PHP-FPM socket ใน Nginx config ถูกต้อง
Permission denied:
- ตรวจสอบ ownership:
ls -la /var/www/wordpress/ - ต้องเป็น
www-data:www-dataทั้งหมด
สรุป
Workshop นี้ครอบคลุมการติดตั้งตั้งแต่ระบบปฏิบัติการไปจนถึง WordPress ที่พร้อมใช้งาน ประกอบด้วยการติดตั้ง Nginx, MySQL, PHP-FPM, WordPress, SSL Certificate และการตั้งค่า Backup อัตโนมัติ สิ่งสำคัญคือต้องไม่ลืมเรื่องความปลอดภัย ไม่ว่าจะเป็นการใช้รหัสผ่านที่แข็งแกร่ง การแยก User สำหรับแต่ละ Database และการตั้งค่า Firewall
หลังจากติดตั้งเสร็จ ควรตรวจสอบ Site Health ของเว็บไซต์เป็นประจำ อัพเดต Core, Theme และ Plugin อย่างสม่ำเสมอ และ Monitor ประสิทธิภาพของเซิร์ฟเวอร์เพื่อให้เว็บไซต์ทำงานได้อย่างราบรื่น
แนะนำบริการ DE
หากคุณต้องการ VPS สำหรับติดตั้งเว็บไซต์พร้อม MySQL ด้วยตัวเอง Cloud VPS ของ DE มาพร้อม root access เต็มรูปแบบ รองรับ Ubuntu 22.04 LTS และมี SSD Storage ที่ช่วยให้ทั้ง Web Server และฐานข้อมูลทำงานได้รวดเร็ว เหมาะสำหรับผู้ที่ต้องการควบคุมทุกอย่างด้วยตนเอง
สำหรับผู้ที่ต้องการความสะดวกมากขึ้น ไม่อยากจัดการ Server เอง Cloud Hosting ของ DE รองรับเว็บไซต์โดยเฉพาะ พร้อม MySQL ที่ตั้งค่าให้เรียบร้อยแล้ว มี Control Panel ที่ใช้งานง่าย และระบบ Backup อัตโนมัติ

