- 📑 Настройка удаленного доступа MySQL и MariaDB в Linux Ubuntu
- Разрешаем MySQL слушать интерфейс, который смотрит во внешнюю сеть
- Создание внешнего пользователя MySQL
- Как разрешить удаленные подключения к серверу базы данных MySQL
- Настройка сервера MySQL
- Предоставление доступа пользователю с удаленного компьютера
- Настройка межсетевого экрана
- Iptables
- БрандмауэрD
- Проверка изменений
- Выводы
- Установка, настройка, бэкапы в MariaDB
- Базовая конфигурация MariaDB
- Упражнение 1. Установка MariaDB
- Выполнение простых задач администрирования базы данных
- Упражнение 3. Создание физической резервной копии базы данных MySQL.
- Восстановление резервных копий
📑 Настройка удаленного доступа MySQL и MariaDB в Linux Ubuntu
По умолчанию сервер MySQL настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.
Убедиться в этом можно набрав на сервере команду:
В результате получите что-то типа этого:
Отсюда видно, что mysql слушает только интерфейс localhost (127.0.0.1). Это не всегда удобно, особенно когда есть необходимость выделить под сервер mysql отдельный сервер. А в рамках корпоративной локальной сети такое бывает очень часто.
Чтобы разрешить серверу MySQL принимать запросы из-вне необходимо предпринять несколько несложных шагов:
- Поменять одну строчку в конфигурационном файле MySQL;
- Создать сетевого пользователя с необходимыми правами.
Разрешаем MySQL слушать интерфейс, который смотрит во внешнюю сеть
Открываем конфигурационный файл любимы редактором, например nano, из под привилегированного пользователя:
Если у вас установлен сервер mariaDB, то конфигурационный файл находится в другом месте:
и меняем 127.0.0.1 на 0.0.0.0 — тогда сервер будет слушать все интерфейсы компьютера, либо задаем конкретный ip-адрес локального интерфейса, который смотрит в локальную сеть. Например — 192.168.122.10.
Теперь остается только перезапустить сервис MySQL:
Теперь осталось только завести пользователя, которому разрешено обращаться к серверу MySQL извне.
Создание внешнего пользователя MySQL
Теперь нужной подключиться к MySql с паролем суперпользователя системы (системы. а не MySQL):
После подключения к MySQL можно создать пользователя и дать привилегию, например:
Здесь дается полный доступ к базе данных userdata пользователю с логином user и паролем password, подключающемуся с любого ip.
Можно ограничить права пользователя, разрешив ему подключаться к базе только с определенного ip. Для этого меняем % на конкретный ip-адрес, например 192.168.122.16
А можно и разрешить пользователю всё — подключаться ко всем базам с любого ip-адреса
Это делать не желательно, если конечно вы не заводите себя.
Источник
Как разрешить удаленные подключения к серверу базы данных MySQL
По умолчанию сервер MySQL прослушивает соединения только с localhost, что означает, что к нему могут получить доступ только приложения, работающие на том же хосте.
Однако в некоторых ситуациях необходимо получить доступ к серверу MySQL из удаленного места. Например, если вы хотите подключиться к удаленному серверу MySQL из вашей локальной системы, или при использовании многосерверного развертывания, когда приложение выполняется на другом компьютере, чем сервер базы данных. Один из вариантов — получить доступ к серверу MySQL через туннель SSH, а другой — настроить сервер MySQL на прием удаленных подключений.
В этом руководстве мы рассмотрим шаги, необходимые для разрешения удаленных подключений к серверу MySQL. Те же инструкции применимы и для MariaDB.
Настройка сервера MySQL
Первый шаг — настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на машине.
Если сервер MySQL и клиенты могут связываться друг с другом через частную сеть, то лучшим вариантом будет настроить сервер MySQL на прослушивание только частного IP-адреса. В противном случае, если вы хотите подключиться к серверу через общедоступную сеть, настройте сервер MySQL на прослушивание всех IP-адресов на машине.
Для этого вам необходимо отредактировать файл конфигурации MySQL и добавить или изменить значение параметра bind-address . Вы можете установить один IP-адрес и диапазоны IP-адресов. Если адрес 0.0.0.0 , сервер MySQL принимает соединения на всех интерфейсах хоста IPv4. Если в вашей системе настроен IPv6, то вместо 0.0.0.0 используйте :: .
Расположение файла конфигурации MySQL отличается в зависимости от дистрибутива. В Ubuntu и Debian файл находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf , а в дистрибутивах на основе Red Hat, таких как CentOS, файл находится по адресу /etc/my.cnf .
Найдите строку, которая начинается с bind-address и установите ее значение равным IP-адресу, который сервер MySQL должен прослушивать.
По умолчанию установлено значение 127.0.0.1 (прослушивается только на localhost).
В этом примере мы настроим сервер MySQL для прослушивания всех интерфейсов IPv4, изменив значение на 0.0.0.0
Если есть строка, содержащая skip-networking , удалите ее или закомментируйте, добавив # в начале строки.
В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте его в раздел [mysqld] .
После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Только root или пользователи с привилегиями sudo могут перезапускать службы.
Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:
В дистрибутивах на основе RedHat, таких как CentOS, для перезапуска службы выполните:
Предоставление доступа пользователю с удаленного компьютера
Следующим шагом будет разрешение доступа к базе данных удаленному пользователю.
Войдите на сервер MySQL как пользователь root, набрав:
Если вы используете старый собственный плагин аутентификации MySQL для входа в систему как root, выполните приведенную ниже команду и введите пароль при появлении запроса:
Изнутри оболочки MySQL используйте оператор GRANT чтобы предоставить доступ удаленному пользователю.
- database_name — это имя базы данных, к которой будет подключаться пользователь.
- user_name — это имя пользователя MySQL.
- ip_address — это IP-адрес, с которого пользователь будет подключаться. Используйте % чтобы разрешить пользователю подключаться с любого IP-адреса.
- user_password — пароль пользователя.
Например, чтобы предоставить доступ к базе данных dbname пользователю с именем foo с паролем my_passwd с клиентского компьютера с IP 10.8.0.5 , вы должны запустить:
Настройка межсетевого экрана
Последний шаг — настроить брандмауэр, чтобы разрешить трафик на порт 3306 (порт по умолчанию MySQL) с удаленных машин.
Iptables
Если вы используете iptables в качестве брандмауэра, приведенная ниже команда разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.
Разрешить доступ с определенного IP-адреса:
UFW — это брандмауэр по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), запустите:
Разрешить доступ с определенного IP-адреса:
БрандмауэрD
FirewallD — это инструмент управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:
Чтобы разрешить доступ с определенного IP-адреса через определенный порт, вы можете создать новую зону FirewallD или использовать расширенное правило. Итак, создайте новую зону с именем mysqlzone :
Проверка изменений
Чтобы убедиться, что удаленный пользователь может подключиться к серверу MySQL, выполните следующую команду:
Где user_name — это имя пользователя, mysql_server_ip вы предоставили доступ, а mysql_server_ip — это IP-адрес хоста, на котором работает сервер MySQL.
Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.
Если вы получаете сообщение об ошибке, подобное приведенному ниже, то либо порт 3306 не открыт , либо сервер MySQL не прослушивает IP-адрес .
Приведенная ниже ошибка указывает на то, что пользователь, которого вы пытаетесь войти в систему, не имеет разрешений на доступ к удаленному серверу MySQL.
Выводы
MySQL, самый популярный сервер баз данных с открытым исходным кодом по умолчанию, прослушивает входящие соединения только на localhost.
Чтобы разрешить удаленные подключения к серверу MySQL, вам необходимо выполнить следующие шаги:
- Настройте сервер MySQL для прослушивания всего или определенного интерфейса.
- Разрешите доступ удаленному пользователю.
- Откройте порт MySQL в вашем брандмауэре.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
Источник
Установка, настройка, бэкапы в MariaDB
База данных важный элемент, к примеру, для такого стека как LAMP (Linux, Apache, MySQL, PHP). В RedHat (CentOS) MariaDB установлен по умолчанию.
В этой этой статье вы узнаете, как установить MariaDB на CentOS 7, как выполнять основные задачи администрирования и как делать бэкапы и восстановление баз.
Базовая конфигурация MariaDB
Сначала установим MariaDB и выполним базовые настройки. В этом разделе вы узнаете, как это сделать и как сделать небольшие изменения в файле конфигурации /etc/my.cnf.
Чтобы установить MariaDB, выполните следующие действия:
- Введите yum install mariadb mariadb-server mariadb-test -y.
- Введите systemctl start mariadb; systemctl enable mariadb, чтобы запустить и включить сервис базы данных.
- Убедитесь, что mariadb запущен, выполнив systemctl status mariadb. Эта команда покажет текущее состояние, включая последние сообщения, которые были зарегистрированы. В листинге 1 показано, как это выглядит.
После установки MariaDB рекомендуется также защитить его. Для этого выполните mysql_secure_installation. Эта команда запустит список вопрсов, которые описаны ниже.
В листинге 2 показаны выходные данные команды, причем все вопросы выделены жирным шрифтом:
Enter current password for root (enter for none): если у пользователя БД root уже есть пароль, введите его здесь. Если нет, просто нажмите Enter, чтобы продолжить.
Set root password? [Y/n]: ответьте y, чтобы установить пароль для root, и введите его два раза.
Remove anonymous users? [Y/n]: ответьте y, чтобы удалить анонимных пользователей, которые по умолчанию есть в БД.
Disallow root login remotely? [Y/n]: ответьте y, чтобы гарантировать, что пользователь root может подключаться к БД только локально. Для пользователей с правами root, которые хотят получить удаленный доступ, все равно надо сначала подключиться к серверу по SSH.
Remove test database and access to it? [Y/n]: после установки создается тестовая БД. По соображениям безопасности рекомендуется удалить эту базу, но поскольку в этой статье вы научитесь работать с MariaDB, вы должны сохранить ее. Поэтому выбираем n.
Reload privilege tables now? [Y/n]: ответьте y, чтобы сохранить и применить внесенные изменения.
MariaDB можно использовать локально или по сети. Преимущества есть у обоих вариантов. Если MariaDB доступен по сети, легко настроить стек сервисов, где база работает на одном сервере, а связанные сервисы работают где-то еще. Этот вараинт предлагает максимально возможную производительность.
Если же вы хотите максимально повысить безопасность, рассмотрите возможность полного изолирования БД от сети. Это значит, что все сервисы, использующие БД, доступны на одном сервере.
Чтобы определить, будет ли MariaDB использовать сеть, вы измените несколько параметров в файле конфигурации /etc/my.cnf (который является основным файлом конфигурации MariaDB). В листинге 3 показан пример содержимого этого файла.
В разделе [mysqld] вы можете установить множество параметров, включая следующие:
bind-address адрес, по которому сервис БД будет прослушиваться.
Установите значение ::, если вы хотите разрешить доступ через все IP-адреса (IPv4, а также IPv6), или оставьте пустым, чтобы разрешить доступ только через IPv4. Кроме того, вы можете указать IP-адреса конкретных интерфейсов, с которыми база данных должна связываться.
skip-network установите значение 1, чтобы отключить всю сеть.
В этом случае связь с другими локальными процессами будет проходить через сокеты, которые по умолчанию находятся в /var/lib/mysql/mysql.sock. При использовании этого подхода клиентскому ПО также требуется доступ к базе данных через сокеты, и оно не может использовать localhost и IP для доступа к локальной БД.
port указывает порт для прослушивания соединений TCP/IP.
Для получения дополнительной информации о настройках, которые вы можете настроить, смотрите вывод команды /usr/libexec/mysqld —help —verbose.
Если к базе данных требуется удаленный доступ, необходимо также открыть файрвол. MariaDB использует сервис-файл firewalld mysql, который находится в /usr/lib/firewalld/services/mysql.xml, поэтому в файрволе можно легко открыть доступ через стандартный порт 3306 всего одной строкой:
В упражнении 1 вы узнаете, как установить базу данных MariaDB.
Упражнение 1. Установка MariaDB
В этом упражнении вы выполните базовую установку MariaDB. Вы также отключите доступ к сети и примените настройки безопасности. Затем вы проверите, что некоторые системные базы данных по умолчанию доступны.
1. Введите yum install -y mariadb mariadb-server mariadb-test для установки БД.
2. Введите systemctl start mariadb; systemctl enable mariadb чтобы запустить и включить в автозагрузку mariadb.
3. Убедитесь, что mariadb прослушивается, введя ss -tulpen | grep mysql. Вы должны увидеть процесс mysqld, прослушивающий порт 3306.
4. Отключите сетевое взаимодействие, добавив строку skip_networking=1 в /etc/my.cnf и перезапустите mariadb, используя systemctl restart mariadb.
5. Настройте базовую защиту mariadb, используя mysql_secure_installation. Установите пароль для root, отключите удаленный доступ для root, удалите тестовую базу данных и всех анонимных пользователей.
6. Введите mysql -u root -p, чтобы войти в базу данных под пользователем root.
7. В командной строке MariaDB введите show databases; для отображения всех доступных базы. Результат должен выглядеть как в листинге 4.
8. Введите exit; чтобы выйти из оболочки MariaDB.
При работе с MariaDB важно знать разницу между базами данных, таблицами и записями. Таблица 1 суммирует их.
Таблица 1. Элементы базы данных
| Название | Описание |
| Database (База данных) | Совокупность данных, состоящая из разных таблиц. Сотрудники могут быть именем базы данных. |
| Table (Таблица) | Классы элементов, которые используются в базе данных. В базе данных сотрудника вы можете иметь такие таблицы, как статус занятости и адресная книга. В базе данных таблицы могут быть взаимосвязаны. В каждой базе данных у вас должна быть хотя бы одна таблица. |
| Fields (Поля) | Тип информации, которая создается в таблице. В таблице адресной книги у вас есть такие поля, как, например, название, улица, город. |
| Record (Запись) | Определенный набор данных хранится в таблице. Например, у каждого клиента есть запись в базе данных адресной книги, в которой содержатся записи об имени и улице. |
| Value (Значение) | Конкретные значения, которые хранятся в поле. Например, поле имени в таблице адресной книги может иметь значение Линда Джонс. Выполнение простых задач администрирования базы данныхДаже если вы являетесь администратором Linux, полезно иметь базовые знания о командах администрирования базы данных. Это не делает вас администратором базы данных, но помогает выполнять основные задачи по настройке. Чтобы начать работу с базами данных, вам необходимо сначала подключиться к службе баз данных. Для этого используйте команду mysql: mysql -u root -h localhost -p. (Даже если вы используете MariaDB, многие команды все еще являются командами mysql.) Эта команда регистрирует вас как пользователя root на сервере localhost, а затем запрашивает пароль. После входа в систему, как показано в упражнении 1, вы входите в интерактивную оболочку MySQL, где будете работать с базами данных. Вы уже видели команду show databases;, которая отображает список доступных баз данных. Работа с базами данных выглядит как работа с каталогами. Администратор создает базу данных, затем начинает использовать эту базу и затем вводит в неё контент. Команда USE используется как команда cd из оболочки bash. Там, где cd позволяет легко переключаться между каталогами, команда USE позволяет переключаться между базами данных. Попробуйте, например, следующие команды (после входа в среду оболочки MySQL от имени root):
Листинг 5 В MariaDB, как и в MySQL, вы будете использовать язык структурированных запросов (SQL) для манипулирования данными в базе данных. Основные команды позволяют создавать, читать, обновлять и удалять. Эти команды также называются операциями CRUD: create, select, update, и delete. Перед вставкой данных в базу данных вам необходимо создать хотя бы одну таблицу. Для этого используйте CREATE TABLE, а затем имя таблицы, которую вы хотите добавить, например CREATE TABLE addressbook(name VARCHAR(40), street VARCHAR(40));. При определении таблицы вы также определяете записи, которые вы хотите добавить в таблицу, в дополнение к типу данных, который будет храниться в этой таблице. В этом примере это просто тип VARCHAR, который позволяет хранить 40 байт переменных данных. Если вы работаете с базой данных, которая уже была определена, или если вам нужно проверить, что вы только что создали, вам нужно выяснить атрибуты таблицы. Для этого используйте DESCRIBE, в случае с адресной книгой DESCRIBE addressbook;. Команды даст результат, как в листинге 6, который сначала показывает, как создать таблицу, а затем показывает, как получить информацию о полях, хранящихся в этой таблице. После того, как вы выяснили, какие поля необходимы для создания данных в таблице, вы можете использовать команду INSERT, чтобы добавить их: INSERT INTO addressbook (name,street) VALUES (‘linda jones’,’state street’);. В этой команде вы сначала ссылаетесь на имя таблицы, в которую необходимо добавить данные, перечисляете конкретные атрибуты, которые вы хотите заполнить, а затем перечисляете значения, которые вы хотите ввести в эти конкретные атрибуты. Чтобы убедиться, что команда для вставки данных сработала, используйте SELECT * from addressbook;. Чтобы удалить данные, используйте команду DELETE, например DELETE FROM addressbook WHERE name = ‘lucy ball’;. Обратите внимание, что в этой команде важно не забыть часть WHERE. Если вы опустите его, все записи в таблице будут удалены. Также обратите внимание, что в этой команде (как и в любой другой команде, которую вы используете в этом примере) вам необходимо указать, к какой таблице вы хотите применить изменения. Чтобы изменить данные, используйте команду UPDATE: например, UPDATE addressbook SET street=’main street’ WHERE name = ‘linda jones’;. Обратите внимание, что в этой команде вам нужно использовать оператор WHERE, чтобы указать MariaDB, какую запись использовать, и команду SET, чтобы указать атрибут, который вы хотите изменить, с его новым значением. Чтобы прочитать записи, используйте команду SELECT: например, SELECT name,street FROM addressbook;. Кроме того, вы можете выбрать отображение всех атрибутов, используя *: SELECT * FROM addressbook; и используя where, вы можете создавать простые запросы, фильтруя по конкретным результатам: SELECT * FROM addressbook WHERE street=’State street’;. При использовании предложений WHERE вы можете использовать разные операторы: |
| <> | Не равно |
| >= | Больше или равно |
| /root/videos-db.dump. Вы также можете использовать команду mysqldump для создания резервной копии всех баз данных, выполнив mysqldump -u root -p —alldatabases —databases > /root/all-db.dump. Для создания физических резервных копий рекомендуется использовать тома LVM. В LVM вы можете создать снапшот, который содержит фактическое состояние тома LVM на момент создания снапшота. Затем будет сделано само физическое резервное копирование из снапшота, а не из открытого тома LVM. Снапшот LVM похож на фотографию логического тома LVM. Сделав резервную копию снапшота, вы обязательно получите стабильную резервную копию среды, в которой в настоящий момент нет открытых файлов. Чтобы создать моментальный снапшот тома базы данных, ее необходимо временно остановить. Грубо говоря, процедура создания моментального снапшота тома базы данных выглядит следующим образом: 1. В базе данных mariadb используйте команду FLUSH TABLES WITH READ LOCK;. Команда гарантирует, что никакие файлы не используются при создании снапшота. Эта команда закрывает все таблицы и блокирует все таблицы для всех баз данных с глобальной блокировкой чтения. Это удобный способ убедиться, что в базу данных ничего не записывается во время создания моментального снапшота на следующем шаге этой процедуры. Альтернативное решение — полностью остановить сервис mariadb с помощью systemctl stop mariadb и запустить ее снова после создания снапшота. 2. В другом окне терминала введите lvcreate -s -n lvdatabase-snap -L 1G /dev/vgname/lvdatabase. В этой команде обязательно используйте правильные имена тома и группы томов. Также обратите внимание на размер тома снимка. Как правило, 10% размера исходного тома считается достаточно большим, если предположить, что том снапшота будет удален в конце процедуры. 3. Теперь, когда снапшот создан, введите UNLOCK TABLES; чтобы снова запустить базу данных. 4. Запустите задание резервного копирования. 5. После завершения задания резервного копирования используйте lvremove, чтобы удалить том снапшота. В упражнении 3 вы можете узнать, как создать физическую резервную копию базы данных. Упражнение 3. Создание физической резервной копии базы данных MySQL.1. Для начала узнайте, где хранится актуальная база данных. Для этого выполните mysqladmin -u root -p variable | grep datadir. Эта команда показывает каталог в файловой системе, где хранятся данные. Как правило, результатом является каталог /var/lib/mysql. 2. Выполните команду df /var/lib/mysql, чтобы узнать, какой том LVM используется для размещения этого расположения. (Эта команда будет работать, только если во время установки был создан том LVM для размещения физической базы данных.) 3. Убедитесь, что в группе томов, в которой находится том базы данных, нераспределенное дисковое пространство все еще доступно, используя vgs vgname. 4. На этом этапе вам необходимо временно заморозить базу данных, чтобы никакие изменения не могли быть применены во время создания моментального снимка. Для этого подключитесь к базе данных в качестве пользователя root командой mysql -u root -p и введите FLUSH TABLES WITH READ LOCK;. Не закрывайте эту сессию, потому что она снимет блокировку! 5. В другом терминальном сеансе создайте снимок LVM. Следующая команда предполагает, что именем группы томов является vgdata, а именем тома LVM, на котором размещается база данных, является lvmariadb: lvcreate -L 2G -s -n lvmariadbsnapshot /dev/vgdata/lvmariadb. 6. Вернитесь к сеансу MariaDB и введите UNLOCK TABLES;, чтобы разблокировать таблицы. 7. Вернитесь в другой сеанс и смонтируйте снимок mkdir /mnt/snapshot; mount -o nouuid /dev/vgdata/lvmariadb-snapshot /mnt/snapshot. 8. Выполните tar -cvf /root/mariadb.tar /mnt/snapshot/lib/mysql для создания резервной копии. 9. После успешного создания резервной копии необходимо размонтировать и удалить снимок: umount /mnt/snapshot; lvremove /dev/vgdata/lvmariadb-snapshot. Восстановление резервных копийВосстановление резервной копии зависит от того, какой у вас тип копии — логическая или физическая. Чтобы восстановить логическую резервную копию, используйте команду типа mysql -u root -p videos SQL Источник |