FiveM Database Connection Failed แก้อย่างไร? oxmysql ต่อ MySQL/MariaDB ไม่ได้แก้ทีละจุด
ปัญหา FiveM Database Connection Failed หรือ oxmysql เชื่อม MySQL/MariaDB ไม่ได้ ควรแก้จากข้อความ Error ใน FXServer Console ก่อน เพราะ Error แต่ละแบบชี้ไปคนละ Layer เช่น Username/Password ผิด, Database ไม่มี, Database Service ไม่ทำงาน, Host หรือ Port ผิด, Firewall บล็อก หรือ mysql_connection_string ถูก Parse ไม่ถูกต้อง
ลำดับ Debug ที่แนะนำคือ
FXServer
↓
oxmysql Start ได้ไหม?
↓
Connection String ถูกไหม?
↓
Host Resolve ได้ไหม?
↓
Port ไปถึงไหม?
↓
MariaDB/MySQL ทำงานไหม?
↓
Authentication ผ่านไหม?
↓
Database มีไหม?
↓
Permission ถูกไหม?
↓
SELECT 1 ผ่านไหม?
อย่าเริ่มจากแก้ SQL ของ Garage หรือ Inventory ถ้า oxmysql ยังเชื่อม Database ไม่สำเร็จ
ตัวอย่าง Connection String
set mysql_connection_string "mysql://fivem_user:password@127.0.0.1:3306/fivem"
ensure oxmysql
สิ่งสำคัญคือ Connection String ต้องถูกกำหนด ก่อน Start oxmysql และ Resources ที่ใช้ Database
① FiveM Database Connection Failed คืออะไร
หมายถึง Database Layer ของ Server ไม่สามารถสร้าง Connection กับ MySQL/MariaDB ตาม Configuration ได้
ปัญหาอาจอยู่ที่
FiveM
oxmysql
Connection String
DNS
Network
Firewall
Database Service
Database Account
Database Permissions
Database Name
ดังนั้นคำว่า
Database Connection Failed
ยังไม่ใช่ Root Cause
ต้องอ่าน Error ที่อยู่หลังข้อความนั้น
② สิ่งแรกที่ต้องทำคืออ่าน FXServer Console
เวลา oxmysql Start ให้ดู Console
Error ที่อาจพบ เช่น
ECONNREFUSED
ETIMEDOUT
Access denied
Unknown database
ENOTFOUND
connection string invalid
แต่ละข้อความบอกทิศทาง Debug ได้มาก
อย่า Restart Server ซ้ำสิบครั้งโดยยังไม่ได้อ่าน Error
③ แยก Error เป็น 4 กลุ่มก่อน
ใช้วิธีนี้จะ Debug เร็วขึ้นมาก
กลุ่ม 1
Connection String
↓
Syntax / Password / Host
กลุ่ม 2
Network
↓
DNS / Port / Firewall / Timeout
กลุ่ม 3
Authentication
↓
Username / Password / Host permission
กลุ่ม 4
Database
↓
Database ไม่มี / Permission / Schema
รู้ว่าอยู่กลุ่มไหนก่อนค่อยลงรายละเอียด
④ ตรวจ mysql_connection_string ก่อน
ตัวอย่าง URI
set mysql_connection_string "mysql://fivem_user:password@127.0.0.1:3306/fivem"
แยกออกเป็น
USER
→ fivem_user
PASSWORD
→ password
HOST
→ 127.0.0.1
PORT
→ 3306
DATABASE
→ fivem
ตรวจทีละค่า
อย่ามอง Connection String ทั้งบรรทัดแล้วเดาว่าถูก
⑤ Connection String ต้องอยู่ก่อน oxmysql
ควรเป็น
set mysql_connection_string "mysql://fivem_user:password@127.0.0.1:3306/fivem"
ensure oxmysql
ensure my_core
ensure my_garage
ไม่ใช่
ensure oxmysql
set mysql_connection_string "..."
เพราะ Database Connector ต้องอ่านค่าตอนเริ่มทำงาน
⑥ ใช้ set ไม่ใช่ Credential แบบ Replicated
สำหรับ Connection String ใช้
set mysql_connection_string "..."
Database Password เป็นข้อมูล Server-side
อย่านำไปใส่ใน
client.lua
shared/config.lua
NUI
JavaScript ฝั่ง Client
เด็ดขาด
⑦ Connection String ใช้ได้กี่รูปแบบ
oxmysql รองรับทั้ง URI Format
set mysql_connection_string "mysql://user:password@localhost:3306/fivem"
และ Semicolon-separated Format
set mysql_connection_string "user=user;password=password;host=localhost;port=3306;database=fivem"
หาก Format หนึ่ง Parse Password ผิด สามารถลองอีก Format ได้
⑧ Password มีอักขระพิเศษต้องระวัง
เอกสาร oxmysql เตือนว่าบาง Character มีความหมายพิเศษใน Connection String เช่น
;
,
/
?
:
@
&
=
+
$
#
สมมติ Password คือ
MyPass@2026
URI
mysql://user:MyPass@2026@localhost/fivem
อาจทำให้ Parser แยกส่วนผิด
ถ้า Connection String ดูเหมือนถูกแต่ Authentication แปลก ให้ตรวจ Password ก่อน
⑨ วิธีแก้ Password Parsing
มีทางเลือก เช่น
① เปลี่ยน Connection String Format
② เปลี่ยน Password
③ ใช้ Encoding ที่เหมาะกับระบบ
สำหรับ Server ที่ควบคุมเอง วิธีง่ายคือใช้ Password ที่แข็งแรงแต่ไม่สร้าง Ambiguity กับ Connection String Parser
แต่ยังต้องยาวและเดายาก
⑩ ECONNREFUSED คืออะไร
Error เช่น
connect ECONNREFUSED 127.0.0.1:3306
โดยทั่วไปหมายถึงระบบพยายามเชื่อม TCP ไปยัง Host/Port แล้ว Connection ถูกปฏิเสธ
มักต้องตรวจ
MariaDB/MySQL เปิดอยู่ไหม?
Host ถูกไหม?
Port ถูกไหม?
Service Listen ที่ Address นั้นไหม?
Firewall หรือ Container Network ถูกไหม?
นี่ไม่ใช่ SQL Query Error
⑪ ECONNREFUSED แก้อย่างไร
เริ่มจาก Database Service
Linux ตัวอย่าง Concept
MariaDB Service
↓
Running?
Windows ตรวจ
Services
↓
MariaDB / MySQL
↓
Running
ถ้า Database Service ไม่ทำงาน ให้แก้ Service ก่อน FiveM
⑫ ตรวจ Port 3306
MySQL/MariaDB ปกติพบ Port
3306
แต่ Hosting Provider หรือ Custom Configuration อาจใช้ Port อื่น
ถ้าของจริงคือ
3307
แต่ Connection String ใช้
3306
ก็จะต่อผิดปลายทาง
⑬ อย่าเดา Port
ตรวจจาก
Hosting Panel
MariaDB Configuration
MySQL Configuration
Provider Database Details
แล้วใช้ค่าจริง
Connection String
set mysql_connection_string "mysql://user:password@host:3307/fivem"
ถ้า Provider กำหนด 3307
⑭ localhost กับ 127.0.0.1 ต่างกันไหม
ทั้งสองมักชี้กลับมาที่เครื่องเดียวกัน แต่พฤติกรรมของ Client/Database Account/Socket Configuration อาจแตกต่างตาม Environment
ถ้าใช้
localhost
ไม่ได้
แต่ Database ฟัง TCP ที่
127.0.0.1:3306
ลองตรวจ Configuration และใช้ Host ที่ Provider/Database ระบุจริง
อย่าเปลี่ยนแบบสุ่มโดยไม่ดู Error
⑮ Database อยู่เครื่องเดียวกับ FXServer
Architecture
FXServer
+
MariaDB
บนเครื่องเดียวกัน
Connection String มักใช้
127.0.0.1
เช่น
set mysql_connection_string "mysql://fivem_user:password@127.0.0.1:3306/fivem"
กรณีนี้ไม่จำเป็นต้องเปิด Port 3306 สู่ Internet
⑯ Database อยู่คนละเครื่อง
Architecture
FXServer
192.168.1.10
Database
192.168.1.20
ต้องตรวจเพิ่ม
Routing
Firewall
Database bind address
Database user host permission
Private/Public IP
Security group
การที่ Database ใช้งานได้บนเครื่อง Database เองไม่ได้หมายความว่า FXServer Remote จะต่อได้
⑰ ETIMEDOUT คืออะไร
Error Timeout มักหมายถึง Connection Attempt ไปถึงปลายทางไม่ได้ภายในเวลาที่กำหนด
สาเหตุที่ควรตรวจ
Firewall drop
IP ผิด
Port ผิด
Network route
Database host ไม่ตอบ
Cloud security rule
ต่างจาก ECONNREFUSED ที่มักเป็นการปฏิเสธ Connection อย่างชัดเจน
⑱ Connection Timeout ต้อง Debug Network ก่อน
ถ้า Database อยู่ Remote
ลองไล่
FXServer
↓
DNS/IP ถูก?
↓
Network Route?
↓
Port reachable?
↓
Firewall?
↓
MariaDB listen?
อย่าแก้
SELECT *
หรือ Database Table ในขั้นนี้
เพราะยังต่อ Server ไม่ได้เลย
⑲ ENOTFOUND คืออะไร
หากใช้ Hostname เช่น
mysql.example.internal
แล้วเกิด Error แนว DNS Resolve ไม่ได้ เช่น ENOTFOUND
ให้ตรวจ
Hostname สะกดถูกไหม?
DNS ใช้งานได้ไหม?
Provider Host ถูกไหม?
ชื่อ Host ใช้ได้จาก FXServer เครื่องนี้ไหม?
สามารถทดลองใช้ IP ที่ Provider กำหนดเพื่อแยกว่าเป็น DNS Problem หรือไม่ หาก Environment อนุญาต
⑳ Hostname ไม่ใช่ Database Name
อย่าสลับ
HOST
กับ
DATABASE
ตัวอย่าง
mysql://user:password@db.example.com:3306/fivem
ตรงนี้
db.example.com
→ Database Host
ส่วน
fivem
→ Database Name
เป็นคนละอย่าง
㉑ Access denied คืออะไร
Error เช่น
Access denied for user
หมายความว่า Connection ไปถึง Database Server แล้ว แต่ Authentication หรือ Permission ของ Account ไม่ผ่าน
นี่เป็นข้อมูลสำคัญมาก เพราะแปลว่า
Network
→ น่าจะไปถึง Database แล้ว
ตอนนี้ให้ตรวจ Account Layer
㉒ Access denied ต้องตรวจอะไร
ตรวจ
Username
Password
Database host rule
Account host
Authentication plugin
Privileges
เช่น Database Account อาจเป็น
'fivem_user'@'localhost'
แต่ FXServer Connect มาจาก Remote IP
Account นี้อาจไม่ตรง Host Rule ที่อนุญาต
㉓ MySQL/MariaDB Account มี Host ด้วย
Database User ไม่ได้มีแค่ Username อย่างเดียว
Concept คือ
'user'@'host'
เช่น
'fivem_user'@'localhost'
หรือ Account ที่อนุญาตเฉพาะ Host/IP หนึ่ง
ดังนั้น Username ถูกและ Password ถูกก็ยัง Access Denied ได้หาก Host Context ไม่ตรง
㉔ ตรวจ Database User
สามารถตรวจด้วย Database Admin Tool หรือ SQL ที่เหมาะสมกับ Version
เป้าหมายคือดูว่า
fivem_user
มี Account จาก Host ที่ FXServer ใช้อยู่หรือไม่
อย่าเปิด
'%'
ให้ทุก Host เข้าถึงโดยไม่มีเหตุผลด้าน Network/Security
㉕ Password ผิดแก้อย่างไร
วิธีที่ดีคือทดสอบ Credential นอก FiveM ก่อน
ใช้
MariaDB client
MySQL client
DBeaver
HeidiSQL
จากเครื่องหรือ Network Context ที่ใกล้เคียงกับ FXServer
ถ้า Client Database Login ยังไม่ได้
อย่าเสียเวลาแก้ Lua Script
㉖ Dedicated Database User ดีกว่า root
ไม่แนะนำให้ Resource Production ใช้
root
ถ้าไม่จำเป็น
สร้าง
fivem_user
แล้วกำหนด Permission เฉพาะ Database
ช่วยลดผลกระทบถ้า Credential รั่วหรือ Resource มีปัญหา
㉗ Unknown database คืออะไร
Error เช่น
Unknown database 'fivem'
หมายถึง Connection ไปถึง Database Server และพยายามเลือก Database ชื่อ fivem แต่ Database นั้นไม่มีตามที่ Server มองเห็น
ตรวจด้วย
SHOW DATABASES;
และดูชื่อจริง
㉘ Database Name ตัวพิมพ์ต้องตรงไหม
ควรใช้ชื่อให้ตรงกับ Database จริงทุกตัวอักษร
เช่น Database จริง
com_fivem
แต่ Connection String เป็น
/fivem
จะชี้คนละ Database
ควรกำหนด Naming Convention สม่ำเสมอ
㉙ สร้าง Database หากยังไม่มี
ตัวอย่าง
CREATE DATABASE com_fivem
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
จากนั้น Connection String
set mysql_connection_string "mysql://fivem_user:password@127.0.0.1:3306/com_fivem"
ชื่อท้าย URI ต้องตรง
㉚ Access denied to database ต่างจาก Login denied
มีกรณี Connect Account สำเร็จ แต่ Account ไม่มี Permission กับ Database นั้น
MariaDB สามารถแจ้ง Error ลักษณะ
Access denied ... to database
ต้อง Grant Permission ที่ Resource ต้องใช้
ไม่ใช่เปลี่ยน Password อย่างเดียว
㉛ Grant Permission ตัวอย่าง
ตัวอย่าง
GRANT SELECT, INSERT, UPDATE, DELETE
ON com_fivem.*
TO 'fivem_user'@'localhost';
Resource ที่ต้อง Migration Schema อาจต้อง Permission เพิ่ม เช่น
CREATE
ALTER
INDEX
ตาม Use Case
ใช้หลัก Least Privilege
㉜ FLUSH PRIVILEGES ต้องใช้ทุกครั้งไหม
คำสั่ง
FLUSH PRIVILEGES;
มักพบใน Setup Guides
พฤติกรรมขึ้นกับวิธีจัดการ Accounts/Privileges และ Database Version
ประเด็นสำคัญกว่าคือให้ Account มี Permission ถูกต้องจริง
ตรวจด้วยการ Login และทดลอง Query
㉝ Database Login ผ่านแต่ Table ไม่มี
นี่ไม่ใช่ Connection Failed แล้ว
ถ้า SELECT 1 ผ่าน แต่ Resource Error
Table 'characters' doesn't exist
แปลว่า
Connection Layer
→ ผ่าน
แต่
Schema Layer
→ มีปัญหา
ต้อง Import SQL/Migration ที่ Resource ต้องการ
㉞ Unknown column ก็ไม่ใช่ Connection Error
ตัวอย่าง
Unknown column 'garage'
หมายถึง Query พบ Table แล้ว แต่ Column ไม่มี
ตรวจ
Resource Version
SQL Migration Version
Database Schema
Column Name
อย่าแก้ Connection String
㉟ วิธีแยก Connection กับ Schema ง่ายที่สุด
ใช้
SELECT 1
ถ้าผ่าน
Database Connection
→ ใช้งานได้ระดับพื้นฐาน
จากนั้นลอง
SELECT DATABASE()
เพื่อยืนยัน Database ที่เลือก
แล้วค่อย Query Table จริง
㊱ สร้าง Resource Test แยก
สร้าง
db_test/
├── fxmanifest.lua
└── server.lua
Manifest
fx_version 'cerulean'
game 'gta5'
dependency 'oxmysql'
server_script '@oxmysql/lib/MySQL.lua'
server_script 'server.lua'
ทำให้ Debug Database โดยไม่ต้องผ่าน Framework ใหญ่
㊲ ทดสอบ SELECT 1
server.lua
CreateThread(function()
local result =
MySQL.scalar.await(
'SELECT 1'
)
print(
'[DB TEST] SELECT 1:',
result
)
end)
ถ้าได้
[DB TEST] SELECT 1: 1
ถือว่า Query พื้นฐานผ่าน
㊳ ตรวจ Database Name
เพิ่ม
local database =
MySQL.scalar.await(
'SELECT DATABASE()'
)
print(
'[DB TEST] Database:',
database
)
ถ้าคิดว่า Connect com_fivem
แต่ Console บอกชื่ออื่น
แสดงว่า Connection String/Configuration ที่ FXServer ใช้ไม่ใช่ตัวที่คุณคิด
㊴ มี Connection String ซ้ำใน server.cfg หรือไม่
ค้นหา
mysql_connection_string
ทั้ง Project Configuration
บางครั้งมี
set mysql_connection_string "database_A"
ด้านบน
แล้วอีกไฟล์ Config ที่ exec ถูกเรียกภายหลังตั้ง
set mysql_connection_string "database_B"
ค่าที่ Runtime ใช้อาจไม่ใช่บรรทัดที่คุณกำลังดู
㊵ ตรวจไฟล์ cfg ที่ถูก exec ด้วย
server.cfg สามารถเรียก Config อื่น
เช่น
exec database.cfg
ดังนั้นควรค้นทั้ง Config Tree
ไม่ใช่เปิด server.cfg ไฟล์เดียวแล้วสรุปทันที
㊶ Resource oxmysql ชื่อถูกไหม
ควรเป็น
oxmysql
ถ้า Rename เป็น
oxmysql-main
Resource อื่นที่ใช้
dependency 'oxmysql'
หรือ
@oxmysql/lib/MySQL.lua
อาจหาไม่เจอ
อย่า Rename Dependency Resource โดยไม่มีเหตุผล
㊷ oxmysql Folder ซ้อนหรือไม่
ผิด
resources/
└── oxmysql/
└── oxmysql/
├── fxmanifest.lua
└── ...
ถูก
resources/
└── oxmysql/
├── fxmanifest.lua
└── ...
ถ้า FXServer ไม่พบ oxmysql ให้แก้ Resource Discovery ก่อน Database Connection
㊸ ใช้ refresh เมื่อเพิ่งเพิ่ม oxmysql
ถ้า Server เปิดอยู่แล้ว
refresh
ensure oxmysql
จากนั้นอ่าน Console
ถ้า oxmysql Start ไม่ได้เพราะ Artifact/Resource Requirement ให้แก้ตรงนั้นก่อน Database Credentials
㊹ FXServer Artifact เก่ามีผลไหม
มีได้
oxmysql Version ปัจจุบันมี Resource Requirements ของตัวเอง
ดังนั้นควรใช้ Supported/Current FXServer Artifact ตาม Resource Stack ที่ติดตั้ง
ถ้า Console แจ้ง Server Constraint ไม่ผ่าน อย่าลบ Constraint จาก fxmanifest.lua ของ oxmysql เพื่อบังคับให้ Start
ให้ Update Server Environment ให้ Compatible
㊺ oxmysql Start แต่ Consumer Start ก่อน
ไม่ควรจัด
ensure my_core
ensure my_garage
ensure oxmysql
ถ้า Core/Garage ต้องใช้ Database
ควรเป็น
ensure oxmysql
ensure my_core
ensure my_garage
และ Resource ที่บังคับต้องใช้ oxmysql สามารถประกาศ
dependency 'oxmysql'
㊻ อย่าใช้ Wait แก้ Connection Failed
ไม่ควร
CreateThread(function()
Wait(10000)
MySQL.query.await(
'SELECT 1'
)
end)
ถ้า
Password ผิด
Host ผิด
Port ปิด
Database ไม่มี
รออีกหนึ่งชั่วโมงก็ยังไม่หาย
Wait() ไม่ใช่ Database Connection Configuration
㊼ Database Service เริ่มช้ากว่า FXServer ทำอย่างไร
บนเครื่องที่ Service Startup Order มีปัญหา ควรจัดระบบ Service/Container Orchestration ให้ Database Ready ก่อน FXServer
ตัวอย่าง Concept
MariaDB Healthy
↓
FXServer
↓
oxmysql
↓
Resources
ดีกว่ายัด Delay แบบสุ่มในทุก Resource
㊽ Docker ต้องระวัง localhost
ถ้า FXServer และ Database อยู่คนละ Container
localhost
ใน FXServer Container หมายถึง Container นั้นเอง
ไม่ใช่ Database Container
ต้องใช้
Container service name
Private network IP
ตาม Docker Network Configuration
นี่เป็นสาเหตุ Connection Refused ที่พบได้บ่อยใน Container Environment
㊾ Pterodactyl ต้องใช้ Host จาก Panel
Hosting/Panel อาจให้ Database Details เช่น
Host
Port
Database
Username
Password
ให้ใช้ค่าจาก Panel
อย่าเดาว่า Database อยู่
127.0.0.1:3306
เพราะ Pterodactyl Environment อาจแยก Database Server คนละ Host
㊿ Shared Hosting Database ต้องเปิด Remote Access
ถ้า Provider แยก FXServer กับ Database Server ต้องมี Permission ให้อุปกรณ์ FXServer Connect
บาง Provider จัดการ Allowlist ให้อัตโนมัติ
บางรายต้องกำหนด Source IP
ตรวจ Hosting Documentation/Panel ของผู้ให้บริการ
51 Firewall ต้องเปิดอย่างไร
ถ้า Database Remote ต้องอนุญาต Traffic ที่จำเป็นจาก FXServer ไป Database Port
แนวทางที่ปลอดภัยคือ
อนุญาตเฉพาะ FXServer IP
↓
Database Port
ไม่ใช่
เปิด 3306 ให้ทั้ง Internet
โดยไม่มีเหตุผล
52 bind-address คืออะไร
MariaDB/MySQL อาจถูกตั้งให้ Listen เฉพาะ
127.0.0.1
ถ้าต้องการ Remote Connection Database ต้อง Listen บน Interface ที่เหมาะสมตาม Network Architecture
แต่การเปลี่ยน Bind Address มีผลด้าน Security
ควรทำคู่กับ Firewall และ User Host Restrictions
53 Ping ได้แต่ Database ต่อไม่ได้
ping ทดสอบเพียง Network Reachability บางระดับ
ไม่ได้ยืนยันว่า
TCP 3306 เปิด
MariaDB กำลัง Listen
Database User ใช้งานได้
ดังนั้น
Ping ผ่าน
แต่
ECONNREFUSED 3306
ยังเป็นไปได้
54 Remote Port ต้องทดสอบจากฝั่ง FXServer
สิ่งสำคัญคือทดสอบจากเครื่อง/Container ที่ FXServer รันอยู่
เพราะ
Notebook ของคุณต่อ Database ได้
ไม่ได้หมายความว่า
FXServer Host ต่อได้
Firewall, VPN หรือ Allowlist อาจต่างกัน
55 SSL/TLS มีผลไหม
Database Provider บางรายบังคับ TLS/SSL
ถ้า Provider กำหนด SSL Configuration ต้องตั้ง Connection Options ตาม Requirement ของ Provider และ Driver
อย่า Disable SSL เพียงเพื่อให้ Error หายโดยไม่เข้าใจ Security Policy
กรณี Database Local/Private Network Requirements อาจแตกต่างกัน
56 Authentication Plugin Error คืออะไร
บาง MySQL/MariaDB Environment อาจมี Authentication Method/Plugin ที่ Driver หรือ Account Configuration ไม่เข้ากัน
ถ้า Error ชี้ไปที่ Authentication Plugin
ให้ตรวจ
Database Version
Account authentication method
oxmysql/mysql2 compatibility
Provider configuration
ไม่ควรสุ่ม Downgrade Database หรือ Driver ก่อนอ่าน Error เต็ม
57 MySQL 8 กับ MariaDB ต่างกันอย่างไรใน FiveM
oxmysql รองรับ MySQL 8 และ MariaDB
แต่ Documentation แนะนำ MariaDB สำหรับ Compatibility กับ Resources FiveM จำนวนมาก เพราะ Scripts เก่าบางตัวมี SQL Assumptions จากยุค MySQL 5.7
อย่างไรก็ตาม Connection Failed ต้องแยกจาก Query Compatibility
ถ้า Authentication ผ่านแต่ Query Syntax Error นั่นเป็นอีก Layer หนึ่ง
58 เปิด mysql_debug เมื่อไร
ถ้า Connection ผ่านแล้วและต้องตรวจ Queries สามารถใช้
set mysql_debug true
แต่ถ้า oxmysql ยังต่อ Database ไม่ได้ตั้งแต่ต้น Debug Queries จะไม่ใช่จุดหลัก
ให้แก้ Connection Layer ก่อน
59 Checklist Database Connection Failed
ตรวจทีละข้อ
① oxmysql Resource มีจริง?
② Folder ไม่ซ้อน?
③ FXServer เห็น oxmysql?
④ Artifact Compatible?
⑤ mysql_connection_string มีหรือไม่?
⑥ ใช้ set หรือไม่?
⑦ อยู่ก่อน ensure oxmysql หรือไม่?
⑧ มี Connection String ซ้ำหรือไม่?
⑨ URI Syntax ถูกหรือไม่?
⑩ Password มี Special Character ที่รบกวน Parser หรือไม่?
⑪ ลอง Semicolon Format หรือยัง?
⑫ Username ถูกหรือไม่?
⑬ Password ถูกหรือไม่?
⑭ Host ถูกหรือไม่?
⑮ Port ถูกหรือไม่?
⑯ Database Name ถูกหรือไม่?
⑰ MariaDB/MySQL Service Running หรือไม่?
⑱ ECONNREFUSED หรือไม่?
⑲ ETIMEDOUT หรือไม่?
⑳ DNS Resolve ได้หรือไม่?
㉑ Firewall อนุญาตหรือไม่?
㉒ Database Listen Interface ถูกหรือไม่?
㉓ User Host Permission ถูกหรือไม่?
㉔ User มี Permission Database หรือไม่?
㉕ Database มีอยู่จริงหรือไม่?
㉖ SELECT 1 ผ่านหรือไม่?
㉗ SELECT DATABASE() ถูก Database หรือไม่?
㉘ Consumer Start หลัง oxmysql หรือไม่?
㉙ Resource มี dependency 'oxmysql' หรือไม่?
㉚ Table/Column Error ถูกแยกจาก Connection Error หรือไม่?
⑥⓪ ตาราง Error FiveM Database Connection Failed
| Error/อาการ | จุดที่ควรตรวจ |
|---|---|
ECONNREFUSED | Database Service, Host, Port, Listen Address |
ETIMEDOUT | Network, Firewall, Route, Security Group |
ENOTFOUND | DNS/Hostname |
Access denied for user | Username, Password, Account Host, Authentication |
| Access denied to database | Database Privileges |
Unknown database | Database Name/Database ยังไม่มี |
| Connection string invalid | Syntax, Special Characters, Format |
| Table doesn't exist | Schema/SQL Import ไม่ใช่ Connection |
| Unknown column | Schema Version/Column ไม่ใช่ Connection |
No such export | Resource/Dependency/API ไม่ใช่ DB Authentication |
การจำตารางนี้ช่วยลดเวลาหาสาเหตุได้มาก
ตัวอย่างการ Debug ECONNREFUSED
สมมติ Console
connect ECONNREFUSED 127.0.0.1:3306
อย่าแก้ Password ก่อน
ไล่
127.0.0.1 ถูกเครื่องไหม?
↓
MariaDB Running?
↓
Listen Port 3306?
↓
Connection String Port ถูก?
↓
Docker/VM หรือไม่?
ถ้า Database อยู่ Remote Server แต่ Connection ใช้ 127.0.0.1
นั่นอาจเป็นสาเหตุทันที
ตัวอย่างการ Debug Access denied
Console
Access denied for user 'fivem_user'@'host'
ไล่
Username
↓
Password
↓
Host ของ Account
↓
Privileges
ลอง Login Database ด้วย Credential เดียวกัน
ถ้า Login ยังไม่ได้ แก้ Database Account ก่อน
ตัวอย่างการ Debug Unknown database
Console
Unknown database 'fivem'
ตรวจ
SHOW DATABASES;
ถ้ามีจริงชื่อ
com_fivem
Connection String ต้องเป็น
set mysql_connection_string "mysql://user:password@127.0.0.1:3306/com_fivem"
ไม่ใช่ /fivem
ตัวอย่าง Complete Test Resource
โครงสร้าง
com_db_test/
├── fxmanifest.lua
└── server.lua
fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'comsiam'
description 'FiveM database connection diagnostic'
version '1.0.0'
dependency 'oxmysql'
server_script '@oxmysql/lib/MySQL.lua'
server_script 'server.lua'
server.lua
CreateThread(function()
print(
'[DB TEST] Starting database test'
)
local result =
MySQL.scalar.await(
'SELECT 1'
)
if result ~= 1 then
print(
'[DB TEST] SELECT 1 failed'
)
return
end
local database =
MySQL.scalar.await(
'SELECT DATABASE()'
)
print(
'[DB TEST] Connection OK'
)
print(
'[DB TEST] Database:',
database
)
end)
server.cfg
set mysql_connection_string "mysql://fivem_user:CHANGE_PASSWORD@127.0.0.1:3306/com_fivem"
ensure oxmysql
ensure com_db_test
ถ้าได้
[DB TEST] Connection OK
[DB TEST] Database: com_fivem
แสดงว่า Connection Layer ทำงาน
จากนั้นค่อย Debug Tables และ Queries ของ Resource จริง
Connection ผ่านแล้วอย่าโทษ oxmysql ทุก Error
หลัง
SELECT 1
และ
SELECT DATABASE()
ผ่าน
หาก Garage Error
Unknown column 'stored'
ให้ไปแก้
Garage SQL
Schema
Migration
ไม่ใช่ Connection String
Developer ต้องรู้ว่าปัญหาอยู่ Layer ไหน
Database Connection Failed หลังเปลี่ยน Password
ถ้าเพิ่งเปลี่ยน Database Password
ต้องแก้ Connection String ให้ตรง
และ Restart oxmysql/Server ตาม Deployment Procedure ที่เหมาะสม เพื่อให้ Connector อ่าน Configuration ใหม่
แต่อย่าเปิดเผย Password ใหม่ใน Discord หรือ Screenshot Console
Credential รั่วต้องทำอย่างไร
หาก Connection String จริงหลุดสู่ Public
อย่าทำแค่ลบโพสต์
ควร
① เปลี่ยน Database Password
② ตรวจ Database Account
③ ตรวจ Logs หากจำเป็น
④ ตรวจ Permission
⑤ แก้ server.cfg
⑥ Restart Database Connector อย่างควบคุม
เพราะ Credential เดิมต้องถือว่าไม่ปลอดภัยแล้ว
อย่าเปิด Database Port สู่โลกเพราะแก้ Timeout
วิธีแก้ที่อันตรายคือ
Timeout
↓
เปิด 3306 ให้ 0.0.0.0/0
แม้อาจทำให้ Connection ผ่าน แต่สร้าง Attack Surface โดยไม่จำเป็น
ควรอนุญาตเฉพาะ Network/IP ที่ต้องใช้
Database User ก็ไม่ควรมีสิทธิ์เกินจำเป็น
Resource Gameplay อาจต้อง
SELECT
INSERT
UPDATE
DELETE
แต่ไม่จำเป็นต้องมี
SUPER
CREATE USER
GRANT OPTION
โดยไม่มีเหตุผล
ใช้ Least Privilege ช่วยจำกัดผลกระทบหาก Resource หรือ Credential ถูกโจมตี
คำถามที่พบบ่อยเกี่ยวกับ FiveM Database Connection Failed
FiveM Database Connection Failed แก้อย่างไร
เริ่มอ่าน Error จาก oxmysql แล้วแยกว่าเป็น Connection String, Network, Authentication หรือ Database/Permission Problem
ECONNREFUSED คืออะไร
โดยทั่วไปหมายถึง Host/Port ปฏิเสธ Connection ให้ตรวจ Database Service, Host, Port และ Listen Configuration
ETIMEDOUT คืออะไร
Connection ไม่ได้รับคำตอบภายในเวลาที่กำหนด มักตรวจ Network, Firewall และ Route
ENOTFOUND คืออะไร
Hostname/DNS ไม่สามารถ Resolve ได้
Access denied คืออะไร
Database Server ถูกติดต่อได้ แต่ Authentication/Account Host หรือ Permission ไม่ผ่าน
Unknown database คืออะไร
Database ที่ Connection String ระบุไม่มีหรือชื่อไม่ตรง
Unknown column เป็น Connection Failed ไหม
ไม่ เป็น Schema/SQL Problem หลัง Connection ทำงานแล้ว
Table doesn't exist เป็น Connection Failed ไหม
ไม่จำเป็น Connection อาจสมบูรณ์แต่ยังไม่ได้ Import Schema
Connection String อยู่ตรงไหน
ใน Server Configuration เช่น server.cfg
ต้องวางก่อน oxmysql ไหม
ใช่ ควรกำหนดก่อน Start oxmysql
ใช้ set หรือ setr
ใช้ set สำหรับ mysql_connection_string
oxmysql ใช้ Port อะไร
ใช้ Port ของ MySQL/MariaDB ที่ Configuration กำหนด ซึ่งมักพบ 3306
Database อยู่เครื่องเดียวกันใช้ Host อะไร
มักใช้ 127.0.0.1 หรือ Host ตาม Database Configuration
Database อยู่ Remote ใช้ localhost ได้ไหม
ไม่ หาก Database อยู่คนละ Host localhost จะชี้กลับมาที่เครื่อง/Container ที่ FXServer กำลังรัน
Pterodactyl ใช้ 127.0.0.1 เสมอไหม
ไม่ ต้องใช้ Host/Port ที่ Panel หรือ Provider ให้มา
Password มี @ แล้วต่อไม่ได้ทำอย่างไร
ตรวจ Special Characters และลองเปลี่ยน Connection String Format หรือ Password ที่เหมาะสม
URI กับ Semicolon Format อะไรดีกว่า
ทั้งสองรองรับ เลือกแบบที่ถูกต้องกับ Configuration และ Credentials ของคุณ
ใช้ root ได้ไหม
ไม่แนะนำสำหรับ Production ควรใช้ Dedicated User
Database User ต้องมี Permission อะไร
อย่างน้อยตาม Queries ที่ Resource ต้องใช้ เช่น SELECT/INSERT/UPDATE/DELETE และเพิ่ม Schema Permissions เมื่อมี Migration Requirement
เปิด Port 3306 สู่ Internet ได้ไหม
ควรหลีกเลี่ยง หากจำเป็นต้อง Remote ให้จำกัด Source IP/Network ด้วย Firewall
Database Service Running แต่ยัง ECONNREFUSED ทำไม
อาจ Listen คนละ Address/Port, Container Network ผิด หรือ Connection กำลังไป Host ที่ผิด
Docker ใช้ localhost ได้ไหม
ถ้า Database อยู่คนละ Container โดยทั่วไปต้องใช้ Container/Service Network Address ไม่ใช่ localhost ของ FXServer Container
SELECT 1 ใช้ทดสอบอะไร
ใช้ยืนยัน Database Query Connection ขั้นพื้นฐานโดยไม่พึ่ง Schema
SELECT DATABASE() ใช้ทำอะไร
ยืนยันว่า Connection กำลังเลือก Database ไหน
oxmysql ต้อง Start ก่อน Resource อื่นไหม
ต้อง Start ก่อน Resources ที่พึ่ง Database
ใส่ Wait(10000) แก้ Connection Failed ได้ไหม
ไม่ หาก Host, Password หรือ Database Configuration ผิด
mysql_debug ช่วย Connection Failed ไหม
ช่วย Debug Query หลัง Connection ได้มากกว่า ส่วน Connection Error ควรอ่าน Error จาก oxmysql โดยตรง
MariaDB หรือ MySQL
ทั้งคู่รองรับ แต่ Documentation oxmysql แนะนำ MariaDB เพื่อ Compatibility กับ FiveM Resources จำนวนมาก
สรุป FiveM Database Connection Failed แก้อย่างไร
วิธี Debug ที่เร็วที่สุดคือ อย่าเดา และแยกปัญหาตาม Error
ECONNREFUSED
→ Service / Host / Port
ETIMEDOUT
→ Network / Firewall
ENOTFOUND
→ DNS / Hostname
Access denied
→ User / Password / Host permission
Unknown database
→ Database Name
Unknown table / column
→ Schema ไม่ใช่ Connection
จากนั้นทดสอบด้วย Query ที่ง่ายที่สุด
local result =
MySQL.scalar.await(
'SELECT 1'
)
ถ้าได้
1
แล้วตรวจต่อด้วย
local database =
MySQL.scalar.await(
'SELECT DATABASE()'
)
เมื่อทั้งสองผ่าน จึงถือว่า Connection Layer พร้อมระดับหนึ่ง และค่อยไปตรวจ
Tables
Columns
Indexes
SQL
Framework migrations
ต่อ
Configuration ที่ดีควรมีลำดับ
set mysql_connection_string "mysql://user:password@host:3306/database"
ensure oxmysql
ensure my_core
ensure my_inventory
ensure my_garage
ไม่ควรเปิด Database Port กว้างเกินจำเป็น หรือใช้ root เพียงเพื่อทำให้ Error หาย
สำหรับ Developer ที่เรียน FiveM กับ comsiam หลักที่ควรจำคือ Error Database ต้องแก้จาก Layer ล่างขึ้นบน: Service → Network → Authentication → Database → Schema → Query → Application
และหลักจาก comsiam อีกข้อคือ ถ้า SELECT 1 ยังไม่ผ่าน อย่าเสียเวลาแก้ Garage, Inventory หรือ Framework เพราะระบบยังไปไม่ถึงระดับ Application Query เลย
หัวข้อถัดไปคือ FiveM SQL Error และ Slow Query แก้อย่างไร ซึ่งจะต่อจาก Connection โดยตรงและเจาะ Unknown column, Table doesn't exist, SQL Syntax Error, Duplicate Entry, Data Too Long, Lock/Transaction, N+1 Query, Index และวิธีลด Query ที่ทำให้ Server ช้า
Comments
Post a Comment