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:

text
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:

cfg
set mysql_connection_string "mysql://user:password@localhost/dbname?charset=utf8mb4"

anahtar=değer biçimi de aynı işi yapar:

cfg
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:

cfg
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:

  1. 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:
bash
sudo systemctl status mariadb
# or: sudo systemctl status mysql
sudo systemctl start mariadb
  1. Host ve port doğru mu? localhost ve 127.0.0.1 aynı makinedir, varsayılan port 3306'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.
  2. 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:
bash
mysql -u fivem -p -h 127.0.0.1
  • root yerine ayrı bir kullanıcı oluşturun. MariaDB veya MySQL konsolunda:
sql
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 root genellikle 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:

cfg
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:
sql
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:

text
restart oxmysql

Bağ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:

cfg
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure my_script

QBCore 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.

Bu sorunu yaşatmayan scriptler

Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →

Okumaya devam edin