Nuotolinė prieiga prie MySQL leidžia administruoti ir naudoti duomenų bazes iš kito kompiuterio ar programos, esančios už serverio ribų. Tai ypač naudinga kuriant įvairias sistemas (pavyzdžiui, internetines svetaines, žaidimų serverius ir kt.), kurioms reikia pasiekti nutolusį duomenų bazės serverį ne vietiniame tinkle.
Dažna problema su kuria susiduria vartotojai įdiegiant nuotolinę duomenų bazę - MySQL aplikacija sukonfigūruota priimti tik lokalų ryšį. Tai yra numatytasis MySQL nustatymas, tačiau tai neveiks nuotolinės duomenų bazės konfigūracijoje, nes MySQL turi priimti ir išorinius IP adresus. Šioje pamokoje sužinosite, kaip Linux aplinkoje sukonfigūruoti MySQL su nuotoline prieiga.
Prieš pradedant konfigūravimą, prisijunkite prie savo Linux serverio per SSH (pvz., naudojant “PuTTY”). Įveskite savo serverio IP adresą ir prisijunkite su įprastu vartotoju.
Atsidarykite SSH konfigūracijos failą naudodami šią komandą:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Norint redaguoti sisteminius failus, reikalingos root privilegijos, todėl naudojame “sudo”. Paleidus komandą įveskite savo vartotojo slaptažodį, kad suteiktumėte leidimą failo redagavimui.Failui atsidarius, su klaviatūros klavišais nuspauskite CTRL + W ir į paiešką įveskite bind-address. Turėtumėte matyti kažką panašaus:
. . . lc-messages-dir = /usr/share/mysql skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 . . .
Numatytasis nustatymas yra 127.0.0.1, kuris leidžia serveriui pasiekti tik lokalius ryšius. Šį nustatymą pakeiskite į 0.0.0.0 - tai leis pasiekti jūsų MySQL serverį per išorinį tinklą.
. . . lc-messages-dir = /usr/share/mysql skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0 . . .
Kai kuriose MySQL versijose galite nerasti bind-address nustatymo konfigūracijos faile. Tokiu atveju failo apačioje pridėkite šią paryškintą eilutę:
. . .
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0
Pakeitus šį nustatymą išsaugokite failą su klaviatūros klavišais: CTRL + X, tada Y ir Enter.
Po konfigūracijos redagavimo reikia perkrauti MySQL servizą, kad įsigaliotų nauji pakeitimai. Tai galite atlikti naudodami žemiau nurodyta komanda:
sudo systemctl restart mysql
Jei jau turite MySQL vartotojo paskyrą, kurią planuojate naudoti prisijungimui prie duomenų bazės iš nuotolinio serverio, turėsite perkonfigūruoti tą paskyrą, kad ji jungtųsi iš nuotolinio serverio, o ne iš "localhost". Norint tai atlikti, atsidarykite MySQL klientą kaip root vartotojas (ar kitas privilegijuotas vartotojas) naudodami šią komandą:
sudo mysqlJeigu įjungėte slaptažodžio autentifikaciją root vartotojui, galite pamatyti šią klaidą:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Tuo atveju, jums reikės naudoti šią komandą, kad pasiekti MySQL komandinę eilutę:
mysql -u root -p
Norint pakeisti MySQL vartotojo tinklą iš vietinio į išorinį, galite naudoti šią RENAME USER komandą. Įveskite nurodytą komandą (įsitikinkite, kad pakeitėte "slapyvardis" ir "išorinis_serverio_ip" į savo slapyvardį ir serverio IP adresą):
RENAME USER 'slapyvardis'@'localhost' TO 'slapyvardis'@'išorinis_serverio_ip';
Pavyzdžiui, jeigu MySQL vartotojas - redfoxcloud, ir serverio IP adresas: 1.2.3.4, komanda būtų tokia:
RENAME USER 'redfoxcloud'@'localhost' TO 'redfoxcloud'@'1.2.3.4';
Arba kitu atveju, galite sukurti naują vartotoją, kuris galės prisijungti tik per nutolusį serverį:
CREATE USER 'slapyvardis'@'išorinis_serverio_ip' IDENTIFIED BY 'slaptažodis';
Dėmesio: Ši komanda sukurs vartotoją, kuris galės autentifikuoti su įprastiniu MySQL autentifikacijos įskiepiu - caching_sha2_password. Tačiau yra žinoma kai kurių versijų PHP problema, kuri gali sukelti problemų su šiuo įskiepiu.
Jeigu planuojate naudoti šią duomenų bazę su PHP aplikacija (pavyzdžiui, phpMyAdmin), jums gali prireikti sukurti nuotolinį vartotoją, kuris autentifikuos su senesniu (tačiau vis tiek saugiu) mysql_native_password įskiepiu:
CREATE USER 'slapyvardis'@'išorinis_serverio_ip' IDENTIFIED WITH mysql_native_password BY 'slaptažodis';
Jeigu ne esate tikri, kurį autentifikacijos įskiepį naudoja vartotojas, visada galite pakeisti egzistuojančio vartotojo autentifikavimo įskiepį su šia komanda:
ALTER USER 'slapyvardis'@'išorinis_serverio_ip' IDENTIFIED WITH mysql_native_password BY 'slaptažodis';
Tada suteikite vartotojui reikiamas privilegijas pagal jūsų panaudojimą. Šis pavyzdys vartotojui suteiks visas teises, leidžiančias sukurti, modifikuoti ir šalinti duomenų bazes, lenteles ir vartotojus, taip pat pridėti, atnaujinti ir ištrinti duomenis iš bet kurios lentelės serveryje. Tačiau vartotojams turėtumėte suteikti tik tuos leidimus, kurių jiems reikia, todėl būtinai koreguokite vartotojų teises pagal poreikį.
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'slapyvardis'@'išorinis_serverio_ip' WITH GRANT OPTION;
Tuo pačiu rekomenduotina paleisti FLUSH PRIVILEGES komandą, kuri atlaisvins bet kokią atmintį, kurią serveris kaupė talpykloje po ankstesnių CREATE USER ir GRANT komandų.
mysql> FLUSH PRIVILEGES;
Po šių žingsnių galite išeiti iš MySQL aplinkos:
mysql> exit
Galiausiai, jeigu jūsų serveryje naudojama ugniasienė, taip pat turėtumėte atidaryti 3306 prievadą, kad leistumėte srautą į MySQL.
sudo ufw allow 3306
Jeigu norite leisti pasiekti MySQL tik vienam išoriniam kompiuteriui, galite atidaryti prievadą specifiniam IP adresui:
sudo ufw allow from išorinis_serverio_ip to any port 3306
Iš kito kompiuterio išoriniame tinkle pabandykite pasiekti MySQL serverį naudodami šią komandą:
mysql -u user -h išorinis_serverio_ip -p
Jeigu prisijungti pavyksta, tada visus žingsnius atlikote teisingai.
Taigi, norint leisti nuotolinę prieigą prie MySQL, turite pakeisti vieną konfigūracijos nustatymą, ir perkonfigūruoti MySQL vartotoją, kad būtų naudojamas išorinis prisijungimas. Jei kyla sunkumų, parašykite mums į gyvąją pagalbą, arba el. paštu: [email protected]