Введите имя домена:
.ua .com.ua .in.ua .org.ua
.ru .com .net .org
Показать все домены

Настройка удаленной базы данных

Ответы на вопросы от компании «Украинский хостинг».

Настройка удаленной базы данных

По мере роста сайта или приложения трафик будет увеличиваться и ресурсов сервера может стать недостаточно. Если веб-сервер и сервер баз данных обслуживаются одним сервером, увеличить производительность возможно переместив сервер баз данных на отдельный сервер.

Рекомендуется создать не root пользователя с доступом к sudo.

В инструкции используется текстовый редактор nano, для установки которого требуется выполнить команду:

yum install nano

В инструкции используются два сервера:

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

Производим настройку сервера:

  1. Подключаемся ко второму серверу.

    Обновляем пакеты:

    sudo yum -y update
  2. Устанавливаем MySQL (MariaDB) и вспомогательные пакеты:

    sudo yum install mariadb-server mariadb
  3. Запускаем MariaDB:

    sudo systemctl start mariadb
  4. Запускаем сценарий безопасности, позволяющий удалить некоторые опасные значения по умолчанию, а так же ограничить доступ к системе баз данных:

    sudo mysql_secure_installation

    После выполнения запроса появится уведомление с запросом пароля root.

    Т.к MySQL был только что установлен и пароля root нет, необходимо просто нажать enter.

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

    После назначения пароля и подтверждения пароля появится уведомление:

    Для остальных вопросов необходимо просто нажать клавишу enter в каждом вопросе, чтобы принять значения по умолчанию:

  5. Включаем MariaDB для запуска при загрузке:

    sudo systemctl enable mariadb
  6. Создаем новые самоподписанные файлы сертификатов.

    Создаем новый каталог для файлов сертификатов:

    sudo mkdir -p /etc/certs

    Изменяем владельца каталога сертификатов на пользователя denis:

    sudo chown -R denis:denis /etc/certs/

    Заходим в папку /etc/certs

    cd /etc/certs

    Создаем новый файл сертификата CA.pem выполнив указанные ниже команды указав при заполнении собственную информацию:

    sudo openssl genrsa 2048 > ca-key.pem
    sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

    Информация сертификата CA должна отличаться от информации о серверном сертификате и клиентском сертификате.

  7. Создаем новый серверный сертификат server-cert.pem и файл server-key.pem выполнив указанные ниже команды указав при заполнении собственную информацию:

    sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
    sudo openssl rsa -in server-key.pem -out server-key.pem
    sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
  8. Для того, чтобы к серверу баз данных мог подключиться только клиент с соответствующими файлами сертификатов, создаем новый клиентский сертификат client-req.pem и файл client-key.pem выполнив указанные ниже команды указав при заполнении собственную информацию:

    sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
    sudo openssl rsa -in client-key.pem -out client-key.pem
    sudo openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
  9. Убеждаемся что в созданных файлах сертификатов нет ошибок:

    sudo openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
  10. Изменяем владельца каталога сертификатов на пользователя mysql, а так же изменяем разрешения всех файлов ключей выполнив следующие команды:

    sudo chown -R mysql:mysql /etc/certs/
    sudo chmod 600 client-key.pem server-key.pem ca-key.pem

    Открываем конфигурационный файл MySQL:

    sudo nano /etc/my.cnf

    и в разделе mysqld добавляем строку:

    bind-address=93.190.42.60

    где 93.190.42.60 ip адрес сервера баз данных.

    А так же строки:

    ssl-ca=/etc/certs/ca.pem
    ssl-cert=/etc/certs/server-cert.pem
    ssl-key=/etc/certs/server-key.pem

    Так же в нижней части файла добавляем строки:

    [client]
    ssl-ca=/etc/certs/ca.pem
    ssl-cert=/etc/certs/client-cert.pem
    ssl-key=/etc/certs/client-key.pem

    Сохраняем изменение в файле, нажав сочетание клавиш Ctrl+x , затем клавишу y и затем клавишу Enter.

  11. Перезагружаем MySQL сервер для обновления конфигурации.

    sudo systemctl restart mariadb

    Подключаемся к оболочке MySQL, указав пароль пользователя root:

    sudo mysql -u root -p
  12. Проверяем подключение и SSL выполнив команды:

    SHOW VARIABLES LIKE '%ssl%';
    STATUS;
  13. Выходим из оболочки MySQL:

    exit;
  14. Для открытия 3306 порта открываем файл /etc/sysconfig/iptables:

    sudo nano /etc/sysconfig/iptables

    и после строки:

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

    указываем строку:

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

    Сохраняем изменение в файле, нажав сочетание клавиш Ctrl+x , затем клавишу y и затем клавишу Enter

  15. Перезагружаем iptables для вступления изменений в силу:

    sudo service iptables reload
  16. Создаем базу данных для последующего подключения к ней с удаленного сервера.

    Подключаемся к MySQL как root:

    sudo mysql -u root -p
  17. Для примера создаем базу данных с именем sitedb:

    CREATE DATABASE sitedb;

    И пользователя базы данных с именем userdb и паролем passworddb, который сможет удаленно подключаться к базе данных с первого сервера, имеющего IP адрес 93.190.42.52:

    CREATE USER 'userdb'@'93.190.42.52' IDENTIFIED BY 'passworddb';
  18. Передаем пользователю все права на базу данных sitedb:

    GRANT ALL PRIVILEGES ON sitedb.* TO 'userdb'@'93.190.42.52';
  19. Обновляем настройки:

    FLUSH PRIVILEGES;
  20. Закрываем командную строку MySQL:

    exit;

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

  1. Переходим на первый сервер и устанавливаем клиентские инструменты MySQL, чтобы получить доступ к удаленной базе данных:

    sudo yum install mariadb
  2. Создаем папку, в которую будут скопированы файлы сертификатов с сервера баз данных:

    mkdir mysql-hakase

    Переходим в папку mysql-hakase:

    cd mysql-hakase

    Копируем файлы сертификатов выполнив следующие команды и указав при выполнении каждой команды пароль пользователя root, созданного на сервере 93.190.42.60:

    sudo scp root@93.190.42.60:/etc/certs/ca.pem /home/denis/mysql-hakase
    sudo scp root@93.190.42.60:/etc/certs/client-cert.pem /home/denis/mysql-hakase
    sudo scp root@93.190.42.60:/etc/certs/client-key.pem /home/denis/mysql-hakase

    И проверяем наличие скачанных файлов:

    ls
  3. Подключаемся к серверу баз данных с IP адресом 93.190.42.60, используя скачанные файлы сертификатов и имя пользователя userdb , созданного ранее на сервере баз данных (после запроса пароля, необходимо указать пароль пользователя userdb):

    sudo mysql -h 93.190.42.60 -u userdb --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -p
  4. После подключения выполняем команду, чтобы убедиться, что подключение является защищенным:

    status;
  5. Отключаемся от сервера баз данных:

    exit;

См.также: