0

Использование MySQL на отдельном сервере с приватной сетью VPS

31.05.2024

Приватную сеть – функционал, доступный пользователям VPS – можно использовать для вынесения MySQL на отдельный сервер. В этом случае веб-сервер обрабатывает запросы от клиентов и через приватное подключение обменивается данными с базой.

Это может быть полезно в случае, когда база данных требует значительное количество ресурсов сервера. При переносе MySQL на отдельный сервер появляется возможность выделить для работы базы данных практически все ресурсы, доступные серверу, и не повредить этим работе прочих приложений.

Ниже мы приведём пример разворачивания такого проекта – мы будем устанавливать WordPress с подключением базы данных на другом сервере. Для этого мы используем два сервера с Ubuntu 20.04.

Подготовка серверов

  • Перейдите в Панель Управления аккаунтом и создайте два VPS. Подробнее о создании сервера Вы можете прочитать здесь
  • На первый сервер установите Ubuntu 20.04 и LEMP-стек. Далее мы будем обозначать этот сервер как VPS 1, на нём будет располагаться веб-сервер. На второй сервер установите Ubuntu 20.04 – мы будем обозначать его как VPS 2, на нём будет располагаться база данных.
  • Подключите VPS 1 и VPS 2 к приватной сети по инструкции “Как подключить VPS к приватной сети”.

Установка MySQL-сервера

  • Подключитесь по протоколу SSH к VPS 2, используя его внешний IP. Подробнее этот процесс описан в нашей статье.
  • Установите на сервер MySQL. Вы можете сделать это с помощью команд:
sudo apt-get update
sudo apt-get install mysql-server
  • Установите root-пароль для MySQL. Для этого используйте клиент MySQL. Подключитесь к серверу:
mysql -u root
  • Выполните команду изменения доступа к серверу, где MyNewPass – выбранный Вами пароль:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  • Отправьте команду MySQL-серверу для того, чтобы он переприменил настройки доступа:
mysql> FLUSH PRIVILEGES;

Если Вы разворачиваете проект для проверки возможностей серверов и сети, Вы можете пропустить этот шаг. Однако, если Вы разворачиваете проект для дальнейшей работы на нём, рекомендуем всё же установить root-пароль для обеспечения безопасности данных сайта.

  • Перейдите в конфигурационный файл MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В этом файле найдите раздел [mysqld] и измените в нём значения bind-address и mysqlx-bind-address , указав вместо 127.0.0.1 IP-адрес VPS 2 во внутренней сети. В нашем примере этот раздел выглядит следующим образом:

[mysqld]
#
# * Basic Settings
#
user = mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
# port = 3306
# datadir = /var/lib/mysql
 
 
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 10.16.0.3
mysqlx-bind-address = 10.16.0.3
  • Сохраните и закройте файл. Перезапустите MySQL-сервер командой:
sudo systemctl restart mysql
  • Подключитесь к MySQL. Для этого введите команду:
mysql -u root -p

Если ранее Вы не устанавливали root-пароль для MySQL, то в ответ на запрос пароля потребуется просто нажать Enter. После успешного подключения Вы увидите в терминале приглашение ко вводу данных.

  • Создайте БД для проекта. Укажите имя БД. Например, в нашем примере БД будет названа beget_test:
CREATE DATABASE beget_test;
  • Далее потребуется создать два пользователя для только что созданной БД: для локального и для удалённого подключения. Начнём с создания локального пользователя.

Вам потребуется придумать имя пользователя и пароль. В нашем примере имя пользователя – begetuser, пароль для него – testpassword.

CREATE USER 'begetuser'@'localhost' IDENTIFIED BY 'testpassword';
  • Присвойте пользователю права на любые изменения в базе данных:
GRANT ALL PRIVILEGES ON beget_test.* TO 'begetuser'@'localhost';
  • Создайте пользователя для удалённого подключения. В качестве хоста укажите приватный IP, присвоенный VPS 1.

Для пользователя БД мы указываем тот IP, с которого будет производиться подключение к БД, а не IP хоста, на котором расположена сама БД.

Вы можете использовать те же логин и пароль, которые устанавливали для локального пользователя. В нашем случае имя пользователя – так же begetuser, IP, с которого будет производиться подключение к БД – 10.16.0.2, пароль для пользователя – testpassword.

CREATE USER 'begetuser'@'10.16.0.2' IDENTIFIED BY 'testpassword';
  • Этому пользователю также нужно выдать права на любые изменения в базе данных:
GRANT ALL PRIVILEGES ON beget_test.* TO 'begetuser'@'10.16.0.2';
  • Чтобы изменения вступили в силу, обновите привилегии для пользователей:
FLUSH PRIVILEGES;

Пользователи созданы. Теперь Вы можете выйти из MySQL при помощи команды exit.

Проверка подключения к MySQL-серверу

  • Протестируйте локальное подключение к базе:
mysql -u begetuser -p

Если подключение прошло успешно, Вы можете выйти из MySQL при помощи команды exit.

  • Проверьте, что удалённое подключение также работает корректно. Перейдите на VPS 1 и подключитесь к БД, находящейся на VPS 2:
mysql -u begetuser -h 10.16.0.3 -p

После ключа – h укажите приватный IP VPS 2.

Если возникнет такая ошибка:

ERROR 1130 (HY000): Host '10.16.0.2' is not allowed to connect to this MySQL server

вероятнее всего, в конфигурации MySQL на стороне VPS 2 не был изменен конфигурационный файл или не перезапущен сервер MySQL.

Установка WordPress

  • После предыдущего шага останьтесь на VPS 1 и скачайте установочный пакет WordPress с официального сайта с помощью команды:
curl -O https://wordpress.org/latest.tar.gz
  • Распакуйте архив:
tar xzvf latest.tar.gz
  • Создайте копию конфигурационного файла и переименуйте её, чтобы WordPress смог её обработать:
cp wordpress/wp-config-sample.php wordpress/wp-config.php
  • Откройте конфигурационный файл WordPress и укажите данные для подключения к базе:
nano wordpress/wp-config.php

Что указывать в переменных:

  • DB_NAME – имя базы данных;
  • DB_USER – имя пользователя MySQL для удалённого подключения;
  • DB_PASSWORD – пароль от базы данных;
  • DB_HOST – приватный IP VPS 2.
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'beget_test' );
 
/** MySQL database username */
define( 'DB_USER', 'begetuser' );
 
/** MySQL database password */
define( 'DB_PASSWORD', 'testpassword' );
 
/** MySQL hostname */
define( 'DB_HOST', '10.16.0.3' );
 
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
 
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

Сохраните и закройте файл.

  • Скопируйте папку с файлами WordPress в корневую папку nginx:
sudo cp -a wordpress/* /var/www/html
  • Измените владельца файлов на www-data, чтобы Nginx смог корректно их обрабатывать:
sudo chown -R www-data:www-data /var/www/html
  • Перейдите в файл /etc/nginx/sites-enabled/default и добавьте index.php в строку под комментарием:
# Add index.php to the list if you are using PHP

Должно получиться вот так:

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

После этого используйте команду systemctl restart nginx, чтобы перезагрузить Nginx.

  • Откройте браузер и перейдите по адресу http://внешний-ip-vps1/wp-admin/install.php. Вы можете увидеть внешний IP VPS 1 в Панели управления аккаунтом, выбрав нужный VPS из списка слева.

Откроется страница установщика WordPress. 

  • Выберите язык установки, нажмите “Продолжить” и заполните данные в появившейся форме. Не забудьте скопировать пароль от панели администратора сайта!
  • Нажмите на кнопку “Войти” и введите имя пользователя и пароль, указанные Вами на предыдущем шаге.
  • Готово! Проект развёрнут.

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

Previous Story

Как работать с Docker через Portainer

Next Story

Распределение выполнения запросов внутри приватной сети VPS через HAProxy

Latest from Blog

Настройка простого беспроводного репитера на устройстве MikroTik

При развертывании беспроводных сетей достаточно часто возникают ситуации, когда в некоторых местах квартиры или офиса мощность Wi-Fi сигнала недостаточна для уверенной работы. Конечно, наиболее действенным решением является создание централизованно управляемой сети и

Настройка и использование Redis

В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется. Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных

Настройка и использование Memcached

В статье мы расскажем, что такое Memcache, зачем он нужен и как он влияет на работу некоторых популярных CMS. Кеширование данных – немаловажный момент в работе любого веб-проекта. С ростом посещаемости увеличиваются требования к

Как настроить логирование и ротацию логов Nginx

Вовремя настроенное журналирование позволяет в дальнейшем избежать неожиданных проблем с веб-сервером. Информация, хранящаяся в логах (или журналах) сервера, помогает быстро оценить ситуацию и устранить ошибки. В этой статье мы рассмотрим возможности логирования

Распределение выполнения запросов внутри приватной сети VPS через HAProxy

Приватную сеть можно использовать для распределения выполнения загрузки и балансировки запросов между несколькими серверами. Рассмотрим организацию такой балансировки на примере HAProxy – бесплатного ПО, предназначенного для распределения нагрузки и организации проксирования TCP-пакетов между несколькими обслуживающими
Go toTop