DriteStudioDRITESTUDIODRITESTUDIO
ホーム記事会社情報お問い合わせ
ホーム
VPS高性能な仮想サーバー。フル Root 権限付き
VPS FX取引超低遅延VPS。FXと自動売買に最適化
WebホスティングPlesk と無料 SSL を備えたマネージド Web ホスティング
ゲームサーバーホスティング世界中の20種類以上のゲームに対応しています。VPSをレンタルして、希望するゲームをお知らせください。
専用サーバーIPMI に対応したエンタープライズ向けハードウェア
コロケーションセキュアなデータセンタースペース
セキュリティWAF、DDoS保護、24/7 SOC監視
Web開発モダンフレームワークによるカスタムWebサイト設計・開発
SEOサービス記事、被リンク、テクニカルSEOでランキング向上
ステータスシステム稼働状況とサービス可用性を確認
記事会社情報お問い合わせ
0%
เชื่อมต่อฐานข้อมูลไม่ได้ สาเหตุและวิธีแก้ไขทีละขั้นตอนฉบับ System Admin
記事一覧へ戻る

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

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

Universal-August 18, 2023-更新: April 22, 2026

เชื่อมต่อฐานข้อมูลไม่ได้เป็นปัญหาที่ทำให้ระบบหยุดชะงักทันที ไม่ว่าจะเป็นเว็บไซต์ แอปพลิเคชัน หรือระบบหลังบ้าน บทความนี้รวมสาเหตุที่พบบ่อยทั้งหมด พร้อมวิธีแก้ไขทีละขั้นตอนที่ 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、Webホスティング、コロケーションを提供するデジタルインフラ事業者

Craft Intertech (Thailand) Co., Ltd. が運営

© 2026 Craft Intertech (Thailand) Co., Ltd. 無断転載を禁じます。

プライバシーポリシー利用規約システムステータス