Ако това е MySQL, свързването в мрежа на сървъра на базата данни не е активирано по подразбиране. За да активирате работата в мрежа в MySQL, трябва да намерите активния конфигурационен файл на MySQL с име my.cnf
. И го редактирайте.
Ще обясня как да направя това в Ubuntu 12.04, но инструкциите са подобни за повечето инсталирания на Linux.
Активиране на MySQL Networking
Първо отворете файла с помощта на редактор като nano
. Може да се наложи да изпълните командата чрез sudo
:
sudo nano /etc/mysql/my.cnf
След това потърсете областта във вашия конфигурационен файл с bind-address
опция:
# 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
Сега променете този bind-address
настройка на следното:
bind-address = 0.0.0.0
След това запазете файла и рестартирайте MySQL по следния начин:
sudo service mysql restart
И сега вашата MySQL база данни ще може да приема връзки, различни от локален хост от отдалечени машини.
Уверете се, че портът MySQL 3306
е отворена
Въпреки това, дори и при активирана работа в мрежа, все пак трябва да проверите дали можете да се свържете с отдалечената машина от командния ред с помощта на мрежов инструмент като nmap
. Може да имате защитна стена на 192.168.1.10
блокиране на MySQL порт 3306
така че трябва да проверите дали е отворен или затворен по следния начин:
nmap 192.168.1.10 -p3306
И ако порт 3306
е отворен, това ще бъде отговорът; обърнете внимание на open
под STATE
:
Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT
Nmap scan report for 192.168.1.10
Host is up (0.0035s latency).
PORT STATE SERVICE
3306/tcp open mysql
Но ако порт 3306
е затворен, ще получите това; обърнете внимание на closed
под STATE
:
Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT
Nmap scan report for 192.168.1.10
Host is up (0.0035s latency).
PORT STATE SERVICE
3306/tcp closed mysql
Проверете вашите MySQL User Grants
След като всичко е готово, вашият MySQL сървър на база данни трябва да бъде достъпен в мрежата. Но това каза, трябва да се уверите, че потребителят на вашата база данни, който използвате, има право да се свързва от отдалечена машина във вашата LAN. Така че влезте в MySQL и изпълнете тази команда, за да видите какви разрешения може да има потребителят:
SELECT user, host FROM `mysql`.`user`;
Това ще ви покаже списък с потребители и хостове, свързани с тези потребители в MySQL. Работата е там, че на повечето потребители се предоставят привилегии за достъп само до localhost
или 127.0.0.1
. На някои е предоставен хост с заместващ знак %
. Трябва да погледнете този списък и да видите дали потребителят, който искате да използвате, има заместващ хост (%
) или конкретен IP адрес, свързан с тях. Можете да проверите GRANT
на потребителя s като пуснете линия като тази; разбира се променете [your_database_user]
и [hostname]
за да съответства на вашите настройки:
SHOW GRANTS FOR '[your_database_user]'@'[hostname]';
Това трябва да ви покаже списък с наличните GRANT
s за потребител на конкретен хост. Ако имат GRANT
s, които биха позволили отдалечен достъп – като например използване на заместващ знак %
хост — тогава сте готови. Ако нямат GRANT
s можете да изпълнявате следните MySQL команди; разбира се променете [your_database]
и [your_database_user]
за да съответства на вашите настройки:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `[your_database]`.* TO '[your_database_user]'@'192.168.0.0/255.255.0.0';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `[your_database]`.* TO '[your_database_user]'@'10.0.0.0/255.0.0.0';
FLUSH PRIVILEGES;
И двете GRANT
линии прилагат доста стандартен набор от права за достъп до база данни. Първият ред ги прилага към всяка връзка в обхвата на LAN мрежата от 192.168.x.x
. Вторият ред ги прилага към всяка връзка в обхвата на LAN мрежата от 10.x.x.x
. Обичам да правя това, за да покрия всички бази във вътрешните мрежи. Последните FLUSH PRIVILEGES;
линия основно казва на MySQL да презареди таблиците с привилегии на потребителя, които позволяват на тези разрешения да влязат в сила.