DriteStudioDRITESTUDIODRITESTUDIO
หน้าแรกบทความเกี่ยวกับเราติดต่อเรา
หน้าแรก
VPSเซิร์ฟเวอร์เสมือนประสิทธิภาพสูง พร้อมสิทธิ์ Root เต็มรูปแบบ
VPS ForexVPS เทรด Forex หน่วงต่ำพิเศษ สำหรับ EA และระบบเทรดอัตโนมัติ
เว็บโฮสติ้งโฮสติ้งพร้อมใช้งาน มี Plesk และ SSL ฟรี
โฮสติ้งเกมเซิร์ฟเวอร์รองรับเกมมากกว่า 20 เกมทั่วโลก เพียงเช่า VPS แล้วแจ้งเกมที่ต้องการติดตั้งกับเรา
เซิร์ฟเวอร์เฉพาะเซิร์ฟเวอร์เฉพาะระดับองค์กร พร้อม IPMI
ฝากวางเซิร์ฟเวอร์ฝากเซิร์ฟเวอร์ในศูนย์ข้อมูลมาตรฐานสากล
ความปลอดภัยWAF ระบบป้องกัน DDoS และ SOC เฝ้าระวังตลอด 24/7
รับทำเว็บไซต์ออกแบบและพัฒนาเว็บไซต์ด้วยเทคโนโลยีสมัยใหม่
บริการ SEOดันอันดับด้วยบทความ Backlink และ Technical SEO
สถานะระบบตรวจสอบสถานะระบบและความพร้อมใช้งาน
บทความเกี่ยวกับเราติดต่อเรา
0%
เชื่อมต่อฐานข้อมูลไม่ได้ สาเหตุและวิธีแก้ไขทีละขั้นตอนฉบับ System Admin
กลับหน้ารายการบทความ

เชื่อมต่อฐานข้อมูลไม่ได้ สาเหตุและวิธีแก้ไขทีละขั้นตอนฉบับ System Admin

คู่มือแก้ปัญหาเชื่อมต่อฐานข้อมูลไม่ได้อย่างครบถ้วน อธิบายสาเหตุที่พบบ่อย วิธีแก้ไขทีละขั้นตอน และแนวทางป้องกันเพื่อให้ระบบฐานข้อมูลทำงานได้อย่างเสถียร

Universal-18 สิงหาคม 2566-อัปเดต: 10 เมษายน 2569

เชื่อมต่อฐานข้อมูลไม่ได้เป็นปัญหาที่ทำให้ระบบหยุดชะงักทันที ไม่ว่าจะเป็นเว็บไซต์ แอปพลิเคชัน หรือระบบหลังบ้าน บทความนี้รวมสาเหตุที่พบบ่อยทั้งหมด พร้อมวิธีแก้ไขทีละขั้นตอนที่ System Admin ทำตามได้ทันที

สาเหตุที่ทำให้เชื่อมต่อฐานข้อมูลไม่ได้

ข้อมูลการเชื่อมต่อผิดพลาด

สาเหตุอันดับหนึ่งคือ Hostname, Username, Password หรือชื่อ Database สะกดผิด มักเกิดหลังย้ายเซิร์ฟเวอร์หรือเปลี่ยนรหัสผ่าน ตรวจไฟล์ config ให้ละเอียด:

# ตรวจไฟล์ .env
cat .env | grep -i "db\|database\|mysql\|postgres"

# ตรวจไฟล์ config.php ของ WordPress
grep "DB_" wp-config.php

Database Service หยุดทำงาน

Service ฐานข้อมูลอาจหยุดโดยไม่คาดคิด ตรวจสอบสถานะทันที:

# ตรวจสถานะ MySQL/MariaDB
sudo systemctl status mysql

# ตรวจสถานะ PostgreSQL
sudo systemctl status postgresql

ถ้า Service หยุด ให้ Start ใหม่แล้วตรวจ Log:

# Start MySQL ใหม่
sudo systemctl start mysql

# ตรวจ Log หาสาเหตุ
sudo tail -50 /var/log/mysql/error.log

# สำหรับ PostgreSQL
sudo tail -50 /var/log/postgresql/postgresql-16-main.log

พอร์ตถูกบล็อกโดย Firewall

MySQL ใช้พอร์ต 3306, PostgreSQL ใช้ 5432 ตรวจสอบและเปิดพอร์ต:

# ตรวจว่าพอร์ตเปิดอยู่หรือไม่
sudo ss -tlnp | grep 3306

# ทดสอบเชื่อมต่อพอร์ตจากเครื่องอื่น
telnet db-server-ip 3306

# เปิดพอร์ตใน UFW Firewall
sudo ufw allow from 10.0.0.0/24 to any port 3306
sudo ufw status

สำหรับ iptables:

sudo iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/24 -j ACCEPT
sudo iptables -L -n | grep 3306

VPS ที่มีระบบจัดการ Firewall ที่ดีจะช่วยตั้งค่าพอร์ตได้สะดวกและปลอดภัย

Bind Address จำกัดการเข้าถึง

ฐานข้อมูลหลายตัวตั้ง bind-address เป็น 127.0.0.1 ยอมรับ Connection จาก localhost เท่านั้น

สำหรับ MySQL แก้ไข /etc/mysql/mysql.conf.d/mysqld.cnf:

# เปลี่ยนจาก
bind-address = 127.0.0.1
# เป็น (รับจากทุก IP) หรือระบุ IP ที่ต้องการ
bind-address = 0.0.0.0

สำหรับ PostgreSQL แก้ไข /etc/postgresql/16/main/postgresql.conf:

listen_addresses = '*'

รีสตาร์ท Database หลังแก้ไข:

sudo systemctl restart mysql
# หรือ
sudo systemctl restart postgresql

วิธีแก้ไขทีละขั้นตอน

ขั้นตอนที่ 1 ตรวจสถานะ Database Service

sudo systemctl status mysql
# ถ้าหยุดอยู่
sudo systemctl start mysql
# ตรวจ Log
sudo journalctl -u mysql --since "30 minutes ago"

ขั้นตอนที่ 2 ทดสอบ Connection จาก Command Line

# ทดสอบ MySQL
mysql -u root -p -h 127.0.0.1

# ทดสอบ PostgreSQL
psql -h 127.0.0.1 -U postgres -d mydb

# ทดสอบจากเครื่องอื่น
mysql -u appuser -p -h db-server-ip mydb

ถ้าเชื่อมต่อได้จาก command line แต่แอปเชื่อมต่อไม่ได้ ปัญหาอยู่ที่ไฟล์ Config ของแอป

ขั้นตอนที่ 3 ตรวจสิทธิ์และ Authentication

สำหรับ MySQL ตรวจสิทธิ์และ GRANT ใหม่:

-- ดูสิทธิ์ปัจจุบัน
SHOW GRANTS FOR 'appuser'@'10.0.0.%';

-- GRANT สิทธิ์ใหม่
CREATE USER 'appuser'@'10.0.0.%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'10.0.0.%';
FLUSH PRIVILEGES;

สำหรับ PostgreSQL แก้ไข /etc/postgresql/16/main/pg_hba.conf:

# เพิ่มบรรทัดนี้เพื่ออนุญาต Connection จาก subnet
host    mydb    appuser    10.0.0.0/24    scram-sha-256
sudo systemctl reload postgresql

ขั้นตอนที่ 4 ตรวจ Connection Limit

-- MySQL: ดูจำนวน Connection ปัจจุบัน
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';

-- เพิ่ม max_connections ถ้าจำเป็น
SET GLOBAL max_connections = 300;
-- PostgreSQL: ดู Connection ปัจจุบัน
SELECT count(*) FROM pg_stat_activity;
SHOW max_connections;

สำหรับ Security ควรเปิดเฉพาะพอร์ตที่จำเป็นอย่างปลอดภัย

การป้องกันปัญหาในระยะยาว

Connection Pooling

ติดตั้ง PgBouncer สำหรับ PostgreSQL:

sudo apt install pgbouncer -y
sudo systemctl enable pgbouncer

Monitoring และ Alert

ตรวจสอบจำนวน Connection และการใช้ทรัพยากรแบบ Real-time:

# MySQL: ดูสถานะแบบ real-time
mysqladmin -u root -p status
mysqladmin -u root -p processlist

Dedicated Server สำหรับฐานข้อมูลโดยเฉพาะให้ประสิทธิภาพและความน่าเชื่อถือสูงสุด

บริการ Colocation ในศูนย์ข้อมูลมาตรฐานสูงช่วยเพิ่มความมั่นใจเรื่องความปลอดภัยของข้อมูล

คำถามที่พบบ่อย (FAQ)

เชื่อมต่อ Database จากเครื่องอื่นไม่ได้ทั้งที่ตั้งค่าถูกแล้ว ทำอย่างไร

ตรวจสอบ 3 จุด: Firewall ด้วย sudo ufw status, bind-address ในไฟล์ config ว่าไม่ได้จำกัดเฉพาะ localhost, และ User ว่าได้รับ GRANT สิทธิ์จาก IP ที่เชื่อมต่อมา

Connection ถูกตัดบ่อย ๆ เกิดจากอะไร

อาจเกิดจาก wait_timeout ตั้งไว้สั้นเกินไป ตรวจด้วย SHOW VARIABLES LIKE 'wait_timeout'; และปรับค่าให้เหมาะสม หรือใช้ Connection Pool ที่ตั้ง Keep-alive

ควรใช้ Connection Pooling ตั้งแต่เมื่อไหร่

ควรใช้ตั้งแต่มี Concurrent User มากกว่า 50 คนขึ้นไป หรือเมื่อเริ่มเห็นปัญหา Connection เต็มบ่อย ๆ

MySQL กับ PostgreSQL ปัญหา Connection ต่างกันหรือไม่

หลักการคล้ายกัน แต่ PostgreSQL ใช้ pg_hba.conf ในการควบคุม Authentication ที่ซับซ้อนกว่า MySQL ส่วน MySQL ใช้ระบบ GRANT ที่ระบุได้ทั้ง User และ Host


ปัญหาเชื่อมต่อฐานข้อมูลมีหลายสาเหตุ แต่แก้ไขได้อย่างเป็นระบบตามขั้นตอนที่แนะนำ สำหรับการป้องกันระยะยาว ควรเลือก Hosting ที่มีโครงสร้างพื้นฐานแข็งแกร่ง และหากต้องการเซิร์ฟเวอร์เฉพาะสำหรับ Database DriteStudio พร้อมให้บริการ Dedicated Server ที่ปรับแต่งมาสำหรับ Database Workload โดยเฉพาะ

แชร์บทความ:
ดูบทความเพิ่มเติม
D

DriteStudio | ไดรท์สตูดิโอ

ผู้ให้บริการโครงสร้างพื้นฐานดิจิทัลสำหรับ VPS เว็บโฮสติ้ง และบริการฝากวางเซิร์ฟเวอร์ในประเทศไทย

ดำเนินการโดย บริษัท คราฟต์ อินเตอร์เทค (ประเทศไทย) จำกัด

© 2026 บริษัท คราฟต์ อินเตอร์เทค (ประเทศไทย) จำกัด สงวนลิขสิทธิ์

นโยบายความเป็นส่วนตัวข้อกำหนดการให้บริการสถานะระบบ