MySQL – популярная система управления базами данных, доступная уже много лет. Благодаря своей гибкости и простоте управления он используется во многих небольших разработках и крупных проектах.
В большинстве случаев сервер MySQL и основное приложение размещаются на одном компьютере. Таким образом, MySQL прослушивает соединения только с локальной машины. Однако с появлением распределенных систем, в которых приложение и база данных размещаются на отдельных серверах, прослушивание на локальном хосте не совсем идеально.
Если такие случаи происходят, разработчикам необходимо убедиться, что MySQL прослушивает удаленные подключения или просто подключения за пределами локальной машины. Сделать это можно двумя способами:
- Измените адрес привязки в файле конфигурации MySQL или
- Получите доступ к серверу MySQL через туннель SSH.
В этой статье мы рассмотрим, как отредактировать файл конфигурации MySQL, чтобы изменить адрес привязки сервера MySQL.
Предварительные условия
Прежде чем мы начнем, убедитесь, что у вас есть:
- Установлен сервер MySQL или MariaDB.
- Пользователь root или учетная запись с привилегиями sudo.
Как только вы выполните указанные выше требования, мы сможем продолжить.
Первым шагом к изменению адреса привязки сервера MySQL является редактирование файла конфигурации.
По умолчанию файл конфигурации MySQL находится в /etc/mysql/mysql.conf.d/mysqld.conf для Ubuntu 20.10.
Расположение файла конфигурации может меняться в зависимости от установленного сервера MySQL и дистрибутива Linux.
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
Пока файл открыт, найдите запись с содержимым как (адрес привязки) и измените значение на IP-адрес, который сервер должен прослушивать.
По умолчанию установлено значение localhost.
В моем примере я изменю адрес привязки на all, что позволяет серверу MySQL прослушивать все адреса IPv4.
Примечание
Если вы используете сервер MySQL версии 8.0 и выше, запись адреса привязки может быть недоступна. В этом случае вы можете добавить его в раздел [mysqld].
Если вас устраивают изменения в файле конфигурации, сохраните изменения и закройте редактор.
Шаг 2 – перезапустите MySQL
Чтобы применить изменения к файлам конфигурации, необходимо перезапустить службу сервера MySQL. Вы можете сделать это, используя systemd как:
sudo systemctl restart mysql.service
Шаг 3 – Разрешите брандмауэр
По умолчанию MySQL прослушивает 3306, который иногда может блокироваться вашим брандмауэром. Чтобы разрешить порт сервера MySQL, используйте команду IP-таблиц как:
sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT
Шаг 4 – Проверить соединение
После завершения всех настроек вы можете проверить соединение с сервером MySQL.
mysql -u root -h [mysql_remote/-ip] -p
Если у вас правильно настроен сервер, вы должны получить запрос пароля для конкретного пользователя.
Заключение
В этой краткой статье мы рассмотрели, как изменить адрес привязки MySQL, чтобы сервер MySQL мог прослушивать подключения за пределами локальной машины. Это может быть очень полезно при работе с распределенными системами.
Спасибо, и поделитесь, помогла ли вам эта статья.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
I change the ip address of my apache in my xampp but i cannot connect to my MySQL. I think the problem is that my apache is not on the same network in my database. My apache is on 192.168.1.10. while my MySQL is on 127.0.0.1. Please help me. I don’t know what to do. Thankyou.
asked Jul 21, 2015 at 14:28
Jemuel ElimancoJemuel Elimanco
3962 gold badges3 silver badges18 bronze badges
2
search for config.inc.php
in phpmyadmin folder
and change this
$cfg['Servers'][$i]['host'] = '127.0.0.1';
answered Jul 21, 2015 at 14:31
3
For the version of phpmyadmin I had installed (4.6.6) the configuration file was at
/etc/phpmyadmin/config-db.php
It looks like:
<?php
##
## database access settings in php format
## automatically generated from /etc/dbconfig-common/phpmyadmin.conf
## by /usr/sbin/dbconfig-generate-include
##
## by default this file is managed via ucf, so you shouldn't have to
## worry about manual changes being silently discarded. *however*,
## you'll probably also want to edit the configuration file mentioned
## above too.
##
$dbuser='phpmyadmin';
$dbpass='myrealpassword';
$basepath='';
$dbname='phpmyadmin';
$dbserver='localhost';
$dbport='3306';
$dbtype='mysql';
And then obviously you just change dbserver
to 127.0.0.1
. This is especially useful if you’ve turned of mysql name resolution by setting skip-name-resolve=1
in the mysql configuration file
/etc/mysql/mysql.conf.d/mysqld.cnf
answered Oct 24, 2019 at 3:23
user2682863user2682863
3,0571 gold badge24 silver badges38 bronze badges
Редко, но бывают ситуации, когда требуется подключение к базе MySQL с любого хоста.
Для того чтобы это было возможно, нужно сначала изменить конфигурацию самого MySQL сервера.
Ее мы меняем в файле /etc/mysql/my.cnf
Там нужно найти строки bind-address и закомментировать их.
Должно получиться что-то похожее на:
#bind-address = 127.0.0.1
#bind-address = 192.168.0.201
Теперь нужно создать пользователя (или изменить существующего), где в записи пользователя в поле host будет % , что означает любой хост.
Список пользователей и прав доступа с хоста можно посмотреть сделав сделав выборку по таблице user в базе mysql.
Для этого подключаемся к базе от имени пользователя, который имеет привелегии на просмотр и редактирование данной таблицы (например пользователь root)
mysql -uroot -p
и выполняем следующие команды.
use mysql;
select host, user from user;
На выходе получаем список пользователей
+--------------+------------------+
| host | user |
+--------------+------------------+
| % | malinina |
| 127.0.0.1 | root |
| 192.168.0.96 | falc |
| ::1 | root |
| localhost | |
| localhost | debian-sys-maint |
| localhost | falc |
| localhost | malinina |
| localhost | phpmyadmin |
| localhost | root |
| web-server | |
| web-server | root |
+--------------+------------------+
Далее изменяем нужного пользователя (для примера взят пользователь falc с хостом 192.168.0.96):
update user set host=’%’ where user=’falc’ and host=’192.168.0.96’;
flush privileges;
Теперь пользователь falc может подключиться с любого IP.
Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности
Быть уверенным в своей IT-инфраструктуре – это быть уверенным в завтрашнем дне.
Для того, чтобы сделать заказ:
Безопасные и надежные IT решения
По умолчанию подключиться к MySQL можно только с того же хоста. Чтобы получить доступ к серверу с другого IP-адреса, нужно настроить удалённое подключение.
Внимание! После ручной правки конфигураций MySQL — my.cnf требуется перезапустить сервер MySQL.
ISPmanager5 — Службы
— MySQL/MariaDB
— Рестарт
или в консоли сервера:
systemctl restart mysql systemctl restart mariadb
- Создание удалённого подключения в ISPmanager 6
- Создание удалённого подключения в консоли
Создание удалённого подключения в ISPmanager 6
В панели ISPmanager — раздел Настройки
— Серверы баз данных выделите сервер MySQL
и нажмите кнопку Изменить
.
В открывшемся окне поставьте галочку Удаленный доступ
. В поле IP-адрес
выберите IP, по которому будет доступно подключение.
В панелях с версией ниже 5.95 опции Удаленный доступ
нет. Необходимо выполнить настройки вручную. В конфигурационном файле /etc/my.cnf
(/etc/mysql/my.cnf
для Debian) должна отсутствовать строка skip-networking
, если она присутствует — следует её закомментировать:
#skip-networking
Также следует добавить/изменить:
bind-address = IP_сервера
Для удалённого подключения к базам данных требуется при создании базы отметить Удалённый доступ
.
Если при создании базы вы не выбрали данную опцию, её можно указать в Управлении пользователями баз данных
. Для этого перейдите в раздел Инструменты
— Базы данных
— выделите нужную базу — нажмите кнопку Пользователи
— затем кнопку Изменить
.
Пустое поле списка IP-адресов делает возможным подключение с любого IP.
Создание удалённого подключения в консоли
В конфигурационном файле /etc/my.cnf
(/etc/mysql/my.cnf
для Debian) должна отсутствовать строка skip-networking
, если она присутствует — следует её закомментировать:
#skip-networking
Также следует добавить/изменить:
bind-address = IP_сервера
Подключитесь к сервер MySQL суперпользователем:
mysql -u root -p
Далее создайте пользователя, например, dbuser
(если вместо % указать localhost, авторизация будет возможна только с текущего сервера):
create user 'dbuser'@'%' identified by 'password'
Можно проверить, что мы создали, командой, выводящей всех пользователей с их хостом и паролем:
select user,host,password from mysql.user;
Создайте базу, например, testdb
:
create database testdb;
Предоставление прав пользователю
Права, назначенные пользователю, определяют, какие действия он сможет выполнять с базой данных. Можно назначать несколько привилегий одному пользователю.
Наиболее часто назначаемые права:
ALL PRIVILEGES
— пользователю предоставляется полный доступ к базе данных.CREATE
— пользователю разрешено создавать базы данных и таблицы.DROP
— пользователю разрешено удалять базы данных и таблицы.DELETE
— пользователю разрешено удалять строки из определенной таблицы.INSERT
— пользователю разрешено вставлять строки в определенную таблицы.SELECT
— пользователю разрешено читать базу данных.UPDATE
— пользователю разрешено обновлять строки таблицы.GRANT OPTION
— пользователю разрешено изменять права других пользователей.
Назначить привилегии пользователю можно, используя синтаксис:
GRANT permission ON database.table TO 'username'@'%';
где permission
— вид предоставляемой привилегии.
Например, установите полные права на базу testdb
пользователю dbuser
:
GRANT ALL PRIVILEGES ON testdb.* TO 'dbuser'@'%';
Предоставить права на вставку:
GRANT INSERT ON *.* TO 'dbuser'@'%';
Предоставить несколько привилегий пользователю:
GRANT SELECT, INSERT, DELETE ON testdb.* TO 'dbuser'@'%';
Можно ограничить права пользователя на добавление данных в определенной базе, указав её перед точкой. Для ограничения прав на доступ к определенной таблице укажите нужную таблицу после точки:
GRANT INSERT *database_name.table_name* TO 'dbuser'@'%';
Отозвать все привилегии пользователя:
REVOKE ALL PRIVILEGES ON testdb.* FROM 'dbuser'@'%';
Посмотреть текущие привилегии пользователя:
SHOW GRANTS FOR 'dbuser'@'%';
Удалить пользователя:
DROP USER 'dbuser'@'%';
После завершения настройки прав необходимо перезагрузить привилегии:
FLUSH PRIVILEGES;
Этот материал был полезен?
Introduction
It is not uncommon to host databases and web servers on the same local machine. However, many organizations are now moving to a more distributed environment.
A separate database server can improve security, hardware performance, and enable you to scale resources quickly. In such use cases, learning how to manage remote resources effectively is a priority.
This tutorial shows you how to enable remote connections to a MySQL database.
Prerequisites
- Access to a terminal window/command line
- Remote MySQL server
- Sudo or root privileges on local and remote machines
Note: If you do not have direct access to your MySQL server, you need to establish a secure SSH connection. In case you need assistance, we have prepared a comprehensive tutorial on how to use SSH to connect to a remote server. This article a must-read for anyone new to the process.
MySQL Server Remote Connection
Allowing connections to a remote MySQL server is set up in 3 steps:
1. Edit MySQL config file.
2. Configure firewall.
3. Connect to remote MySQL server.
Step 1: Edit MySQL Config File
1.1 Access mysqld.cnf File
Use your preferred text editor to open the mysqld.cnf file. This example uses the nano text editor in Ubuntu 18.04. Enter the following command in your command-line interface to access the MySQL server configuration file:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
The location of the file may vary based on the distribution and version in use. If the MySQL configuration file is not it its default location try using the Linux find
command to detect it.
1.2 Change Bind-Address IP
You now have access to the MySQL server configuration file. Scroll down to the bind-address line and change the IP address. The current default IP is set to 127.0.0.1. This IP limits MySQL connections to the local machine.
The new IP should match the address of the machine that needs to access the MySQL server remotely. For example, if you bind MySQL to 0.0.0.0, then any machine that reaches the MySQL server can also connect with it.
Once you make the necessary changes, save and exit the configuration file.
Note: Remote access is additionally verified by using the correct credentials and user parameters you have defined for your MySQL users.
1.3 Restart MySQL Service
Apply the changes made to the MySQL config file by restarting the MySQL service:
sudo systemctl restart mysql
Next, your current firewall settings need to be adjusted to allow traffic to the default MySQL port.
Step 2: Set up Firewall to Allow Remote MySQL Connection
While editing the configuration file, you probably observed that the default MySQL port is 3306.
If you have already configured a firewall on your MySQL server, you need to open traffic for this specific port. Follow the instructions below that correspond to your firewall service in use.
Option 1: UFW (Uncomplicated Firewall)
UFW is the default firewall tool in Ubuntu. In a terminal window, type the following command to allow traffic and match the IP and port:
sudo ufw allow from remote_ip_address to any port 3306
The system confirms that the rules were successfully updated.
Option 2: FirewallD
The firewalld management tool in CentOS uses zones to dictate what traffic is to be allowed.
Create a new zone to set the rules for the MySQL server traffic. The name of the zone in our example is mysqlrule, and we used the IP address from our previous example 133.155.44.103:
sudo firewall-cmd --new-zone=mysqlrule --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=mysqlrule --add-source=133.155.44.103
sudo firewall-cmd --permanent --zone=mysqlrule --add-port=3306/tcp
sudo firewall-cmd --reload
You have successfully opened port 3306 on your firewall.
Option 3: Open Port 3306 with iptables
The iptables utility is available on most Linux distributions by default. Type the following command to open MySQL port 3306 to unrestricted traffic:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
To limit access to a specific IP address, use the following command instead:
sudo iptables -A INPUT -p tcp -s 133.155.44.103 --dport 3306 -j ACCEPT
This command grants access to 133.155.44.103. You would need to substitute it with the IP for your remote connection.
It is necessary to save the changes made to the iptables rules. In an Ubuntu-based distribution type the following commands:
sudo netfilter-persistent save
sudo netfilter-persistent reload
Note: If the previous commands do not work, try installing the program with:
sudo apt-get install iptables-persistent
Type the ensuing command to save the new iptables rules in CentOS:
service iptables save
Step 3: Connect to Remote MySQL Server
Your remote server is now ready to accept connections. Use the following command to establish a connection with your remote MySQL server:
mysql -u username -h mysql_server_ip -p
The -u username
in the command represents your MySQL username. The -h mysql_server_ip
is the IP or the hostname of your MySQL server. The -p
option prompts you to enter the password for the MySQL username.
You should see an output similar to the one below:
Connection to mysql_server_ip 3306 port [tcp/mysql] succeeded!
How to Grant Remote Access to New MySQL Database?
If you do not have any databases yet, you can easily create a database by typing the following command in your MySQL shell:
CREATE DATABASE 'yourDB';
To grant remote user access to a specific database:
GRANT ALL PRIVILEGES ON yourDB.* TO [email protected]'133.155.44.103' IDENTIFIED BY 'password1';
The name of the database, the username, remote IP, and password need to match the information you want to use for the remote connection.
How to Grant Remote Access to Existing MySQL Database
Granting remote access to a user for an existing database requires a set of two commands:
update db set Host='133.155.44.103' where Db='yourDB';
update user set Host='133.155.44.103' where user='user1';
User1 is now able to access yourDB from a remote location identified by the IP 133.155.44.103.
Conclusion
In this article, you have gained valuable insight into the general principles of a remote MySQL connection.
With the appropriate credentials, a user originating from the specified IP address can now access your MySQL server from a remote machine.
Для доступа к MySQL из-вне должно быть выполнено 2 условия:
- MySQL должен слушать все адреса, а не только 127.0.0.1
- У пользователя должны быть пермишены для коннекта не только с localhost (с самого сервера где установлена БД), а и других адресов.
Слушать все адреса
Во-первых, изначально mysql слушает только localhost. Нужно исправить это в конфигурационном файле my.cnf
(обычно в линуксах путь /etc/mysql/my.cnf). В my.cnf находим строку:
bind-address = 127.0.0.1
И заменяем её на:
bind-address = 0.0.0.0
Теперь после service mysql restart
мы можем коннектиться к mysql с любого ip (если создан пользователь). При этом для супер-пользователя root доступ из-вне под пустым паролем остаётся закрыт.
bind-address 127.0.0.1
означает, что mysql слушает соединения только с текущего хоста.
Создание пользователя для коннекта к базе данных из-вне
Во-вторых, нужно создать пользователя, под которым мы будем подключаться из-вне к mysql. У пользователя должны быть пермишены для подключения не только по localhost, но и иных адресов.
CREATE USER 'username'@'%' IDENTIFIED BY 'password'; #создаём пользователя username с паролем password GRANT ALL PRIVILEGES ON database.* TO 'username'@'%'; #даём пользователю username все права для работы с базой данных database FLUSH PRIVILEGES; # применяем новые права (чтобы не делать restart)
В команде CREATE USER мы создали пользователя, который может коннектиться к mysql со всех ip. Мы можем разрешать коннектиться только с определённых ip, например:
#создаём пользователя user с паролем pass, который может подключаться только с ip '10.10.50.50 CREATE USER 'user'@'10.10.50.50' IDENTIFIED BY 'pass';
Если разрешаете внешние подключения к базе данных, то нужно давать сложные пароли пользователям mysql.
В случае проблем с внешними подключениями, проверить не блокирует ли брандмауэр или фаервол MySQL-порт 3306 или другой, если используете не стандартный порт.
Узнать порт mysql:
mysql> show variables like 'port'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 3306 | +---------------+-------+ 1 row in set (0,05 sec)
После изменения bind-address в MySQL и создания пользователя с пермишенами (либо грант пермишенов текущим пользователям), к базе данных можно подключиться передавая параметр -h
<host>. Хост — адрес машины, на которой установлен MySQL:
mysql -u -root -p -h <ip адрес>
Дата добавления:
7 лет назад