แก้ปัญหา Error Establishing a Database Connection ใน WordPress
ข้อความ Error establishing a database connection หมายความว่า WordPress ติดต่อฐานข้อมูล MySQL หรือ MariaDB ไม่ได้ เมื่อเกิดขึ้นทั้งหน้าเว็บและหน้า /wp-admin จะใช้งานไม่ได้ สาเหตุหลักมีไม่กี่อย่าง ได้แก่ ข้อมูลการเชื่อมต่อใน wp-config.php ไม่ถูกต้อง บริการฐานข้อมูลหยุดทำงาน ดิสก์เต็ม ตารางในฐานข้อมูลเสียหาย หรือฐานข้อมูลรับการเชื่อมต่อไม่ไหว
คู่มือนี้เรียงลำดับการตรวจจากสาเหตุที่พบบ่อยและตรวจง่ายที่สุดไปหายากที่สุด ขั้นตอนที่ 1 และ 2 ทำได้ทั้งบน Web Hosting และ Cloud Server ส่วนขั้นตอนที่ 3 และ 4 ต้องมีสิทธิ์ root บนเซิร์ฟเวอร์ของตนเอง
สิ่งที่ต้องเตรียม
- สิทธิ์เข้าถึงไฟล์ของเว็บผ่าน SSH, File Manager ของ Plesk/DirectAdmin หรือ FTP
- สิทธิ์จัดการฐานข้อมูลใน Control Panel หรือ root บน Cloud Server
- สำรองไฟล์
wp-config.phpก่อนแก้ไขทุกครั้ง
ขั้นตอนที่ 1: ตรวจค่าใน wp-config.php
เปิดไฟล์ wp-config.php ในโฟลเดอร์หลักของเว็บ แล้วดูค่าสี่บรรทัดนี้
define( 'DB_NAME', 'wp_example' );
define( 'DB_USER', 'wp_user' );
define( 'DB_PASSWORD', 'รหัสผ่าน' );
define( 'DB_HOST', 'localhost' );
นำค่าไปเทียบกับข้อมูลในหน้า Databases ของ Control Panel โดยตรวจว่า
- ชื่อฐานข้อมูลและชื่อผู้ใช้ตรงกันทุกตัวอักษร Control Panel บางระบบเติม Prefix ให้อัตโนมัติ เช่น DirectAdmin จะตั้งชื่อเป็น
username_dbname - รหัสผ่านไม่มีช่องว่างเกินมาหน้าหรือหลัง และถ้ารหัสผ่านมีเครื่องหมาย
'ต้อง Escape เป็น\' DB_HOSTถูกต้อง ส่วนใหญ่เป็นlocalhostหากฐานข้อมูลอยู่อีกเครื่องให้ใส่ IP หรือชื่อโฮสต์ และพอร์ตถ้าไม่ใช่ค่าปกติ เช่น10.0.0.5:3306
หากไม่แน่ใจเรื่องรหัสผ่าน ให้ตั้งรหัสผ่านใหม่ให้ผู้ใช้ฐานข้อมูลใน Control Panel แล้วใส่ค่าเดียวกันใน wp-config.php
ขั้นตอนที่ 2: ทดสอบเชื่อมต่อด้วยข้อมูลเดียวกัน
ถ้ามี SSH ให้ทดสอบด้วยค่าจาก wp-config.php โดยตรง
mysql -u wp_user -p -h localhost wp_example -e "SELECT 1;"
ผลลัพธ์ที่ปกติจะแสดงตารางที่มีเลข 1 หากขึ้น Error ให้ดูความหมายดังนี้
| ข้อความ | สาเหตุ |
|---|---|
ERROR 1045 (28000): Access denied for user | ชื่อผู้ใช้หรือรหัสผ่านผิด หรือผู้ใช้ไม่ได้รับอนุญาตจากโฮสต์นั้น |
ERROR 1044 (42000): Access denied ... to database | ผู้ใช้ถูกต้องแต่ไม่มีสิทธิ์ในฐานข้อมูลนี้ |
ERROR 1049 (42000): Unknown database | ชื่อฐานข้อมูลผิด หรือฐานข้อมูลยังไม่ถูกสร้าง |
ERROR 2002 (HY000): Can't connect to local server through socket | บริการฐานข้อมูลไม่ทำงาน หรือ Socket อยู่คนละตำแหน่ง |
ERROR 1040: Too many connections | จำนวนการเชื่อมต่อเกินค่า max_connections |
หากคำสั่งนี้เชื่อมต่อได้แต่ WordPress ยังขึ้น Error ให้ลองเปลี่ยน DB_HOST ระหว่าง localhost (เชื่อมผ่าน Socket) กับ 127.0.0.1 (เชื่อมผ่าน TCP) เพราะ PHP อาจหา Socket ไม่เจอ
ขั้นตอนที่ 3: ตรวจว่าบริการฐานข้อมูลทำงานอยู่ (Cloud Server)
ชื่อบริการขึ้นอยู่กับสิ่งที่ติดตั้ง ให้ตรวจสถานะด้วย
sudo systemctl status mariadb
หากติดตั้ง MySQL บน Ubuntu ใช้ mysql บน AlmaLinux หรือ Rocky Linux ใช้ mysqld
sudo systemctl status mysql
sudo systemctl status mysqld
ถ้าสถานะเป็น active (running) แสดงว่าทำงานปกติ ถ้าเป็น failed หรือ inactive ให้ลองเริ่มบริการและดู Log
sudo systemctl start mariadb
sudo journalctl -u mariadb -n 50 --no-pager
หากบริการหยุดเองบ่อย ให้ตรวจว่าถูก OOM Killer ปิดเพราะหน่วยความจำไม่พอหรือไม่
sudo journalctl -k | grep -i -E "out of memory|killed process"
ถ้าพบชื่อ mariadbd หรือ mysqld ในผลลัพธ์ แสดงว่า RAM ไม่พอ ควรเพิ่ม Swap ตามคู่มือ เพิ่ม Swap File บน Linux Server หรือเพิ่มสเปก และตรวจการใช้ทรัพยากรตาม ตรวจสอบ CPU, RAM และ Load Average
ขั้นตอนที่ 4: ตรวจพื้นที่ดิสก์
เมื่อดิสก์เต็ม ฐานข้อมูลจะเขียนข้อมูลไม่ได้และอาจเริ่มทำงานไม่ได้
df -h
ถ้าพาร์ทิชันที่เก็บ /var/lib/mysql ใช้งาน 100% ให้ลบไฟล์ที่ไม่จำเป็นออก ดูวิธีหาไฟล์ใหญ่ได้ที่ ดิสก์เต็ม: ตรวจสอบพื้นที่และหาไฟล์ขนาดใหญ่บน Linux ห้ามลบไฟล์ภายใน /var/lib/mysql โดยตรงเด็ดขาด แล้วจึงเริ่มบริการฐานข้อมูลใหม่
ขั้นตอนที่ 5: ซ่อมตารางที่เสียหาย
หากเชื่อมต่อได้แต่หน้า /wp-admin แจ้งว่า One or more database tables are unavailable แสดงว่าตารางเสียหาย ให้สำรองฐานข้อมูลก่อน แล้วเพิ่มบรรทัดนี้ใน wp-config.php เหนือบรรทัด /* That's all, stop editing! */
define( 'WP_ALLOW_REPAIR', true );
เปิด https://example.com/wp-admin/maint/repair.php แล้วคลิก Repair Database เมื่อเสร็จแล้ว ต้องลบบรรทัดนี้ออกทันที เพราะหน้าซ่อมนี้เปิดได้โดยไม่ต้องเข้าสู่ระบบ บน Cloud Server สามารถตรวจทั้งฐานข้อมูลด้วยคำสั่งได้เช่นกัน
sudo mysqlcheck --check wp_example
บน MariaDB รุ่นใหม่คำสั่งนี้มีชื่อ mariadb-check ด้วย ตารางแบบ InnoDB ไม่รองรับการ Repair แบบเดียวกับ MyISAM หากตาราง InnoDB เสียหาย ทางที่ปลอดภัยที่สุดคือกู้คืนจากไฟล์สำรอง
ตรวจสอบผลลัพธ์
- เปิดหน้าเว็บและ
/wp-adminได้ตามปกติ - คำสั่ง
mysql ... -e "SELECT 1;"ด้วยค่าจากwp-config.phpทำงานสำเร็จ - บน Cloud Server
systemctl statusของบริการฐานข้อมูลเป็นactive (running)และตั้งให้เริ่มอัตโนมัติด้วยsudo systemctl enable mariadb
ปัญหาที่พบบ่อย
เกิดหลังย้ายโฮสต์
เกือบทุกครั้งเกิดจาก wp-config.php ยังใช้ค่าของโฮสต์เดิม หรือยังไม่ได้ให้สิทธิ์ผู้ใช้ในฐานข้อมูลใหม่ ดูขั้นตอนครบถ้วนที่ ย้ายเว็บไซต์ WordPress ไปโฮสต์ใหม่
เกิดเป็นช่วง ๆ ตอนมีผู้เข้าชมมาก
มักเป็น Too many connections หรือ RAM ไม่พอ ให้ติดตั้งปลั๊กอิน Cache เพื่อลดการเรียกฐานข้อมูล ตรวจหาบอทที่เรียกหน้าเว็บจำนวนมากใน Access log และพิจารณาเพิ่มทรัพยากรของเซิร์ฟเวอร์
MariaDB เริ่มไม่ได้และ Log แจ้งว่าข้อมูลเสียหาย
อย่าลองแก้ไขไฟล์ข้อมูลเองโดยไม่มีไฟล์สำรอง ให้หยุดและคัดลอกโฟลเดอร์ /var/lib/mysql เก็บไว้ก่อน แล้วติดต่อผู้เชี่ยวชาญ
หากแก้ไขตามขั้นตอนแล้วเว็บยังใช้งานไม่ได้ ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ พร้อมแจ้งโดเมน เวลาที่เริ่มเกิดปัญหา และข้อความ Error ที่พบจากการทดสอบในขั้นตอนที่ 2
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


