ဒေတာဘေ့စ်နှင့်အထူးသဖြင့် MySQLI_Connect ( သို့မဟုတ် PDO ကိုအသုံးပြုခြင်းသည်ဒေတာဘေ့စ်များနှင့်ချိတ်ဆက်သောအခါ PHP ကိုအသုံးပြုသည့်အခါဘုံအမှားများအနက်မှတစ်ခုဖြစ်သည်။
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
ဤအမှားမက်ဆေ့ခ်ျဆိုသည်မှာဒေတာဘေ့စ်ဆာဗာသည်လက်ရှိ client host ထံမှဆက်သွယ်မှုတောင်းဆိုမှုကိုငြင်းပယ်သည်ဟုအဓိကအားဖြင့် Database server တွင်ခွင့်ပြုချက်ပြင်ဆင်မှုကိုဆက်သွယ်ခွင့်မပြုသည့်ကြောင့်ဖြစ်သည်။
ဤဆောင်းပါးသည်ဤပြ problem နာကိုဖြေရှင်းရန်နှင့်မည်သို့ဖြေရှင်းရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
MySQL ဆာဗာသည်အသုံးပြုသူများအားဆက်သွယ်မှုကိုခွင့်ပြုသည့်အခါအသုံးပြုသူအမည်နှင့်စကားဝှက်ကိုအတည်ပြုရုံသာမကဆက်သွယ်မှုမှလာသည့်အိမ်ရှင်လိပ်စာကိုလည်းစစ်ဆေးသည်။ အသုံးပြုသူအမည်နှင့်စကားဝှက်သည်မှန်ကန်မှုရှိလျှင်ပင် connection host သည်ခွင့်မပြုပါက၎င်းကိုငြင်းဆိုလိမ့်မည်။
ပုံမှန်အားဖြင့် MySQL သည် localhost (ဇာတိ) ဆက်သွယ်မှုများကိုသာခွင့်ပြုသည်။
ချိတ်ဆက်သောအခါမည်သည့် hostname သို့မဟုတ် IP ကိုဖြတ်သန်းသွားသနည်း။ များသောအားဖြင့် PHP code တွင်ရေးထားလေ့ရှိသည် -
$mysqli = new mysqli('db.m66.net', 'user', 'password', 'database');
ဤနေရာတွင် hostname သည်ဒေတာဘေ့စ်ဆာဗာအတွက်မှန်ကန်သော IP သို့မဟုတ် domain name ဖြစ်သည်ကိုသေချာအောင်လုပ်ပါ။
"အိမ်ရှင်အားဆက်သွယ်ခွင့်မပြုပါ" ပြ issue နာကိုဖြေရှင်းရန် MySQL server ပေါ်တွင်သတ်မှတ်ထားသော client host ကိုခွင့်ပြုရန်လိုအပ်သည်။
သင်၏ DataBase Username သည် DBUSER ကို ယူဆပြီး Remote Host IP မှဆက်သွယ်မှုများကို 123.123.1233.123 မှဆက်သွယ်မှုများကိုခွင့်ပြုရန်လိုအပ်သည်။
GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'123.123.123.123' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
အိမ်ရှင်ဆက်သွယ်မှုအားလုံးကိုခွင့်ပြုလိုပါက (ထုတ်လုပ်မှုပတ် 0 န်းကျင်အတွက်အကြံမခံနိုင်ပါ) သင် % wildcard ဇာတ်ကောင်ကိုသုံးနိုင်သည်။
GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
MySQL သည် 127.0.0.1 ကို default ဖြင့်ခညျြနှောငျပြီးလျှင်ဇာတိလက်လှမ်းမီမှုကိုသာကန့်သတ်ထားသည်။
MySQL configuration file (များသောအားဖြင့် /etc/mysql/my.cnf ormysql/mysql/mysql/ mysql.dysql.dsql.d /ysqlql.d/ysqlql.d/ysqlql.cfld/mysqlql.d/Sqld/mysqlqlql.d/Sqlql
bind-address = 127.0.0.1
ပြောင်းပါ
bind-address = 0.0.0.0
ထို့နောက် MySQL ဝန်ဆောင်မှုကိုပြန်လည်စတင်ပါ။
sudo service mysql restart
server firewall သည် MySQL default port 3306 ကိုပြင်ပသို့ဝင်ရောက်ခွင့်ပြုရန်သေချာပါစေ။
ဥပမာ UFW ကို သုံးပါ။
sudo ufw allow 3306/tcp
ဒေတာဘေ့စ်ဆာဗာလိပ်စာကို DB.M66.net ဟုယူဆခြင်းသည် DB.M66.net ဖြစ်သည်။ Connection Code ဥပမာ -
<?php
$host = 'db.m66.net';
$user = 'dbuser';
$password = 'password';
$dbname = 'database';
$mysqli = new mysqli($host, $user, $password, $dbname);
if ($mysqli->connect_error) {
die('ဆက်သွယ်မှုမအောင်မြင်ပါ: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
echo 'အောင်မြင်စွာဆက်သွယ်မှု!';
$mysqli->close();
?>
အသုံးပြုသူအမည်နှင့်စကားဝှက်သည်မှန်ကန်ကြောင်းအတည်ပြုပါ။
PHP နှင့် MySQL ဆာဗာကွန်ယက်များသည်အပြန်အလှန်ယိုယွင်းနေပြီးသင်စမ်းသပ်ရန် Ping သို့မဟုတ် Telnet DB.m66.net 3306 ကို သုံးနိုင်သည်။
အသုံးပြုသူသည်သတ်မှတ်ထားသောဒေတာဘေ့စ်ကိုဝင်ရောက်ရန်ခွင့်ပြုချက်ရှိကြောင်းသေချာစေရန်ဒေတာဘေ့စ်အသုံးပြုသူခွင့်ပြုချက်များကိုစစ်ဆေးပါ။
အသေးစိတ်အတွက် MySQL အမှားမှတ်တမ်းကိုစစ်ဆေးပါ။