Сервер slave должен подключаться к master для чтения бинарного лога. В целях безопасности лучшей практикой является создание выделенной учетной записи пользователя для этой цели с ограниченными привилегиями. На этом шаге вы создадите пользователя для репликации и заполните тестовую базу данных, чтобы наблюдать за работой репликации.
-
Подключение к серверу Master:
Откройте оболочку MySQL внутри контейнера mysql-master.
docker exec -it mysql-master mysql -uroot -plab_password
-
Создание пользователя для репликации:
В приглашении mysql> выполните следующую команду, чтобы создать пользователя с именем repl_user и паролем repl_password. Этот пользователь будет использоваться slave для подключения. Мы используем '@'%', чтобы разрешить пользователю подключаться с любого хоста, включая наш контейнер slave в сети Docker.
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
-
Предоставление привилегий репликации:
Новому пользователю требуются привилегии REPLICATION SLAVE, которые позволяют ему читать бинарные логи с master.
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
После предоставления привилегий перезагрузите таблицы привилегий, чтобы немедленно применить изменения.
FLUSH PRIVILEGES;
-
Проверка статуса бинарного лога Master:
Перед настройкой slave вам необходимо знать точные координаты в бинарном логе master, с которых slave должен начать репликацию. Команда SHOW MASTER STATUS предоставляет эту информацию.
SHOW MASTER STATUS;
Вывод будет выглядеть примерно так. Запишите значения File и Position, так как они понадобятся вам на следующем шаге.
+------------------+----------+------------------+--------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+------------------+--------------------+-------------------+
| mysql-bin.000001 | 337 | replication_db | | |
+------------------+----------+------------------+--------------------+-------------------+
1 row in set (0.00 sec)
-
Создание тестовой таблицы и данных:
База данных replication_db была создана при запуске контейнера. Давайте создадим таблицу и вставим некоторые данные для тестирования репликации.
USE replication_db;
CREATE TABLE messages (
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(255)
);
INSERT INTO messages (content) VALUES ('Hello from the master!');
Вы можете проверить, были ли данные вставлены корректно.
SELECT * FROM messages;
Вы должны увидеть строку, которую только что вставили.
+----+------------------------+
| id | content |
+----+------------------------+
| 1 | Hello from the master! |
+----+------------------------+
1 row in set (0.00 sec)
Теперь выйдите из оболочки MySQL.
exit;
Вы подготовили сервер master, создав пользователя для репликации и некоторые тестовые данные.