- Katılım
- 23 Eki 2022
- Mesajlar
- 8,740
- Çözümler
- 12
- Tepkime puanı
- 6,299
- Puanları
- 113
- Yaş
- 28
Metin2 MySQL 5.6–5.7 "Using a password on the command line interface can be insecure" Hatası ve Kesin Çözümü (mysql_config_editor + mysql_query Fix Rehberi)
Metin2 sunucularında özellikle MySQL 5.6 ve 5.7 kullanan sistemlerde sıkça görülen uyarılardan biri:"Using a password on the command line interface can be insecure."
Bu hata aslında kritik bir crash değildir, ancak hem log kirliliği oluşturur hem de bazı sistemlerde güvenlik riskine işaret eder. Özellikle questlib.lua içindeki mysql_query fonksiyonu doğrudan shell üzerinden MySQL çağırdığı için bu uyarı sürekli tetiklenir.
Sorunun Temel Sebebi
Metin2'de klasik yapı şu şekildedir:- Lua → os.execute()
- Shell → mysql -u user -pPASSWORD
- MySQL → uyarı üretir
Buradaki problem:
- Şifre komut satırında açık şekilde taşınır
- MySQL bunu güvenli bulmaz
- Log'a sürekli warning düşer
Neden Bu Bir Problem?
Bu uyarı şunlara sebep olur:- SSH / shell loglarının şişmesi
- Hosting panelinde gereksiz alarm görünmesi
- Paylaşımlı sunucularda güvenlik zafiyeti riski
- Debug sırasında gerçek hataların görünmemesi
- Profesyonel olmayan server görünümü
EN DOĞRU ÇÖZÜM: mysql_config_editor Kullanımı
MySQL'in önerdiği en temiz yöntem budur.1. Login Path Oluşturma
Normal kullanıcı:mysql_config_editor set --login-path=local --host=localhost --user=YOURUSERNAME --password
Root kullanıcı:
mysql_config_editor set --login-path=local --host=localhost --user=root --password
Şifreyi girdikten sonra MySQL bunu şifreli şekilde saklar.
Oluşan Dosya
Sistem şu dosyayı oluşturur:- User:
/home/USER/.mylogin.cnf - Root:
/root/.mylogin.cnf
Bu dosya:- Direkt okunamaz
- Şifreli formatta saklanır
- Manuel edit önerilmez
2. Login Test
Artık MySQL'e giriş:mysql --login-path=local
✔ Şifre yazılmaz
✔ Warning oluşmaz
✔ Güvenli bağlantı sağlanır
Metin2 Questlib.lua MYSQL QUERY FIX
Şimdi en önemli kısım: Metin2 tarafı.Standart sistemde:
os.execute("mysql -u root -p12345 -e 'query'")
Bu yapı warning üretir.
Temiz ve Optimize mysql_query (FIX)
Aşağıdaki yapı hem log temizler hem güvenli çalışır:mysql_query = function(query)
math.randomseed(os.time())
local file = 'mysql_data_' .. math.random(1000000000)
local t, out = {}, {}
os.execute('mysql --login-path=local -e' .. string.format('%q', query) .. ' > ' .. file)
local f = io.open(file, 'r')
if not f then return {} end
for line in f:lines() do
table.insert(t, split(line, '\t'))
end
f:close()
os.remove(file)
for i = 2, #t do
for k, v in pairs(t[1]) do
out[i-1] = out[i-1] or {}
out[i-1][k] = tonumber(t[k]) or t[k] or 'NULL'
out[t[1][k]] = out[t[1][k]] or {}
out[t[1][k]][i-1] = tonumber(t[k]) or t[k] or 'NULL'
end
end
out.__lines = t[1]
return out
end
Bu Fix Ne Sağlar?
✔ Şifre artık Lua içinde yok✔ Command line password warning ortadan kalkar
✔ Daha stabil mysql çağrısı
✔ Temiz temp file sistemi
✔ Metin2 quest sisteminde daha az crash riski
DİKKAT EDİLMESİ GEREKENLER
- mysql_config_editor sadece Linux ortamında düzgün çalışır
- Login path adı (local) değiştirilebilir ama sabit tutulmalı
- Questlib içinde aynı anda eski mysql_query bırakılmamalı
- File write permission hatalarına dikkat edilmeli
EXTRA OPTİMİZASYON ÖNERİSİ
Daha profesyonel sunucularda:- Direct socket mysql driver (C++ source mod) kullanılır
- Lua os.execute tamamen kaldırılır
- Query cache sistemi eklenir
SONUÇ
Bu hata aslında kritik bir bug değil, ama:- Sunucu temizliği
- Güvenlik
- Profesyonel görünüm
açısından mutlaka düzeltilmelidir.
En doğru çözüm:
✔ mysql_config_editor + login-path
✔ güncellenmiş mysql_query wrapper
