oxmysql bağlanamıyor: ECONNREFUSED, erişim reddedildi, bilinmeyen veritabanı
oxmysql FiveM veritabanınıza bağlanmıyor mu? ECONNREFUSED, ER_ACCESS_DENIED_ERROR ve bilinmeyen veritabanı hatasını doğru mysql_connection_string ile düzeltin.
Sunucunuz başladığında oxmysql bunlardan birini yazdırır ve ardından veritabanına dokunan her betik başarısız olur:
Error: connect ECONNREFUSED 127.0.0.1:3306
ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
Unknown database 'fivem'Her satır farklı bir anlama gelir. Bu rehber onları nasıl okuyacağınızı, bağlantı dizesini nasıl yazacağınızı ve veritabanı sunucusunda neyi kontrol etmeniz gerektiğini gösterir.
Bağlantı dizesi
oxmysql her şeyi server.cfg içindeki tek bir convar'dan alır. URL biçimi:
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"anahtar=değer biçimi de aynı işi yapar:
set mysql_connection_string "user=fivem;password=yourpassword;host=127.0.0.1;port=3306;database=fivem"Bunu ensure oxmysql satırının ve veritabanını kullanan tüm betiklerin üstüne koyun:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extendedİpucu: txAdmin tarifleri (recipes) bu satırı sizin için oluşturur. Elle düzenlerseniz tırnak işaretlerini koruyun ve satırı tek satırda tutun.
ECONNREFUSED: dinleyen bir şey yok
ECONNREFUSED, veritabanı sunucusunun bağlantıyı reddettiği veya o adres ve portta çalışmadığı anlamına gelir. Bunları sırayla kontrol edin:
- MariaDB veya MySQL çalışıyor mu? Windows'ta XAMPP ile, kontrol panelinden MySQL'i başlatın. Hizmet olarak kurduysanız Hizmetler'i kontrol edin. Linux'ta:
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb- Host ve port doğru mu?
localhostve127.0.0.1aynı makinedir, varsayılan port3306'dır. Veritabanınız başka bir makinede veya yönetilen bir hostingdeyse, onun adresini ve portunu kullanın ve güvenlik duvarının oyun sunucunuzun IP'sine izin verdiğini kontrol edin. - Veritabanı doğru adrese bağlı mı? Yalnızca yerel makinede dinliyorsa, uzaktaki bir oyun sunucusu ona ulaşamaz.
ER_ACCESS_DENIED_ERROR: yanlış giriş bilgileri
Access denied for user, sunucunun yanıt verdiği ama kullanıcıyı, şifreyi veya o kullanıcının bağlanmasına izin verilen host'u reddettiği anlamına gelir.
- Kullanıcı ve şifreyi kontrol edin; aynı değerlerle kendiniz giriş yapın:
mysql -u fivem -p -h 127.0.0.1rootyerine ayrı bir kullanıcı oluşturun. MariaDB veya MySQL konsolunda:
CREATE DATABASE fivem CHARACTER SET utf8mb4;
CREATE USER 'fivem'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON fivem.* TO 'fivem'@'localhost';
FLUSH PRIVILEGES;- Bir kullanıcı bir host'a bağlıdır.
'fivem'@'localhost'başka bir makineden bağlanamaz. Uzaktaki bir oyun sunucusu için kullanıcıyı o host için oluşturun. - Yeni kurulmuş bir Linux'ta
rootgenellikle soket kimlik doğrulaması kullanır, bu yüzden ağ üzerinden şifreyle giriş başarısız olur. Ayrı bir kullanıcı bu sorunu önler.
Şifredeki özel karakterler
mysql:// biçiminde şifre bir URL'nin içindedir. URL'de anlamı olan karakterler onu bozar ve aldığınız hata genellikle erişim reddedildi olur. Onları kodlayın:
| Karakter | Şöyle yazın |
|---|---|
@ |
%40 |
# |
%23 |
/ |
%2F |
: |
%3A |
% |
%25 |
? |
%3F |
Yani p@ss#1 şifresi şu hale gelir:
set mysql_connection_string "mysql://fivem:p%40ss%231@localhost/fivem?charset=utf8mb4"En basit alternatifler, yalnızca harf ve rakamlardan oluşan bir şifre ya da şifrede yalnızca ; karakterinin sorun olduğu user=...;password=... biçimidir.
Unknown database: bu ad mevcut değil
Unknown database 'fivem', girişin başarılı olduğu ama bu adda bir veritabanı olmadığı anlamına gelir. İki neden vardır:
- Ad yanlış yazılmış. Bağlantı dizesindeki ad tam olarak eşleşmelidir. Linux'ta veritabanı adları büyük/küçük harfe duyarlıdır.
- Hiç oluşturmadınız. Oluşturun, ardından framework'ünüzün SQL dosyasını içine aktarın:
CREATE DATABASE fivem CHARACTER SET utf8mb4;Bundan sonraki sorun genellikle eksik tablolardır; bu konu Table 'db.x' doesn't exist yazısında anlatılıyor.
Çalıştığını kontrol edin
Sunucu konsolundan oxmysql'i yeniden başlatın ve çıktıyı okuyun:
restart oxmysqlBağlantı başarılı olduğunda oxmysql veritabanı sunucusunun sürümünü bildirir ve ardından hata gelmez. Bir betik hâlâ başarısız oluyorsa sorun bağlantıda değil, o betiğin kendi sorgusundadır.
server.cfg içindeki sıra
oxmysql, veritabanını sorgulayan her şeyden önce başlatılmalıdır. Bir ESX sunucusu için çalışan sıra şudur:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_scriptQBCore veya QBox'ta es_extended yerine qb-core veya qbx_core yazın. oxmysql'den önce başlayan bir core, framework sorunlarına benzeyen hatalarla başarısız olabilir; örneğin ESX nil yazısındakiler gibi.
Kontrol listesi
| Belirti | Çözüm |
|---|---|
ECONNREFUSED |
MariaDB veya MySQL'i başlatın, ardından host ve portu kontrol edin (127.0.0.1, 3306) |
ER_ACCESS_DENIED_ERROR |
Yanlış kullanıcı, şifre veya host; ayrı bir kullanıcı oluşturup ona veritabanı yetkisi verin |
Unknown database |
Veritabanını oluşturun ve adını dizede tam olarak eşleştirin |
| Yalnızca bazı şifrelerle başarısız oluyor | Özel karakterleri URL kodlamasıyla yazın veya user=...;password=... biçimini kullanın |
| Dize yok sayılıyor gibi | set mysql_connection_string satırını ensure oxmysql üstüne, tek satır olarak koyun |
| Bağlanıyor ama tablolar eksik | .sql dosyasını o veritabanına içe aktarın |
Kısa yanıtlar
mysql_connection_string satırı nereye yazılır?
server.cfg içinde, ensure oxmysql satırının üstüne. oxmysql bu convar'ı başlarken okur, bu yüzden ondan sonra yazılan bir satır çok geç okunur.
Şifremde @ veya # var ve bağlantı başarısız oluyor. Neden?
mysql:// biçiminde şifre bir URL'nin parçasıdır, bu yüzden özel karakterler URL kodlamasıyla yazılmalıdır: @ %40, # %23, / %2F olur. user=...;password=... biçimi kodlama gerektirmez.
ESX ve QBCore farklı bir bağlantı dizesi mi kullanır?
Hayır. ESX, QBCore ve QBox, oxmysql üzerinden aynı mysql_connection_string convar'ını okur. Yalnızca içe aktardığınız veritabanı farklıdır.

