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

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

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

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

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

Рекомендуется создать не 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;

См.также:

Будь ласка, виберіть мову сайту за промовчанням: