Отредактировано 4 дней назад от ExtremeHow Редакционная команда
ДебианMySQLРепликацияБаза данныхНастройка сервераSQLЛинуксОткрытый исходный кодАдминистрирование системыКомандная строка
Перевод обновлен 4 дней назад
Репликация MySQL — это процесс, который позволяет автоматически копировать данные с одного сервера базы данных MySQL (мастера) на один или несколько серверов баз данных MySQL (слейвов). Эта настройка очень полезна для повышения производительности, надежности и балансировки нагрузки. В этом руководстве мы пройдем через шаги, необходимые для настройки репликации MySQL на сервере Debian Linux. Мы охватим все: от подготовки вашего сервера, настройки параметров репликации и проверки правильности работы репликации. Давайте начнем.
Репликация MySQL позволяет асинхронно копировать данные между серверами баз данных. Основной сервер известен как мастер, а все вторичные серверы, получающие реплицированные данные, называются слейвами. Эта архитектура полезна во многих сценариях, таких как среды баз данных, интенсивно использующие чтение, процессы резервного копирования и восстановления данных, анализ данных и географически распределенные центры обработки данных.
Прежде чем начать настройку репликации MySQL, убедитесь, что у вас есть следующие предварительные условия:
Начнем с настройки мастер-сервера, который будет содержать исходные данные и отправлять обновления на слейв-сервера.
Начните с открытия файла конфигурации MySQL на мастер-сервере. Обычно этот файл находится в /etc/mysql/mysql.conf.d/mysqld.cnf
. Используйте текстовый редактор, например, nano
, чтобы отредактировать его:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Найдите раздел [mysqld] в конфигурационном файле и измените или добавьте следующие строки:
[mysqld] log-bin = mysql-bin server-id = 1
Директива log-bin
включает двоичное журналирование, которое необходимо для репликации, поскольку оно фиксирует все изменения в базе данных. server-id
должен быть уникальным положительным целым числом для каждого сервера, участвующего в настройке репликации. В этом случае мы использовали 1
в качестве идентификатора сервера для мастера.
После редактирования сохраните и закройте файл. Если вы использовали nano, вы можете сделать это, нажав CTRL + X
, затем Y
, и затем ENTER
.
Чтобы применить внесенные изменения, перезапустите службу MySQL:
sudo systemctl restart mysql
Далее войдите в командную строку MySQL на мастер-сервере, чтобы создать учетную запись пользователя, которую слейв-сервер сможет использовать для подключения для репликации. Используйте следующую команду:
mysql -u root -p
После входа выполните следующие SQL-команды, чтобы создать пользователя репликации и предоставить ему привилегии. Замените 'replica_user'
и 'password'
на выбранные вами имя пользователя и пароль:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
Эти команды создают нового пользователя MySQL с привилегиями репликации. Использование '%'
в качестве хоста позволяет слейву подключатьсяс любого IP-адреса.
Перед тем как приступить к настройке слейва, вам нужно зафиксировать текущий файл логов мастера и статус. Используйте следующую команду, чтобы получить эту информацию:
SHOW MASTER STATUS;
Обратите внимание на значения File
и Position
, так как они понадобятся при настройке слейв-сервера. Вывод может выглядеть примерно так:
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 123 | | | +------------------+----------+--------------+------------------+
После настройки мастер-сервера следующим шагом будет настройка слейв-серверов.
Как и в случае с настройкой мастера, откройте конфигурацию MySQL на каждом слейв-сервере, отредактировав /etc/mysql/mysql.conf.d/mysqld.cnf
:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Убедитесь, что в разделе [mysqld] указаны следующие настройки:
[mysqld] server-id = 2 relay-log = mysql-relay-bin
server-id
должен быть уникальным и отличаться от любого другого сервера в настройке репликации. Здесь мы использовали 2
. Конфигурация relay-log
облегчает обработку потока репликации от мастер-сервера.
После редактирования сохраните и закройте конфигурационный файл, как и раньше.
Перезапустите сервер MySQL на слейве, чтобы применить изменения:
sudo systemctl restart mysql
Войдите в клиент командной строки MySQL на слейв-сервере:
mysql -u root -p
После входа подключите слейв к мастеру, используя команду CHANGE MASTER TO
. Обязательно замените 'master_host'
, 'replica_user'
, 'password'
, 'mysql-bin.X'
и position_number
на соответствующий IP-адрес мастер-сервера, имя пользователя реплики, пароль, файл лога и позицию, полученные ранее:
CHANGE MASTER TO MASTER_HOST = 'master_host', MASTER_USER = 'replica_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.X', MASTER_LOG_POS = position_number;
После настройки информации о мастере запустите процесс слейва с помощью следующей команды:
START SLAVE;
Чтобы проверить, правильно ли настроен слейв-сервер и подключен ли он к мастеру, выполните:
SHOW SLAVE STATUS\G;
Посмотрите на поля Slave_IO_Running
и Slave_SQL_Running
в выводе. Оба должны показывать Yes
, чтобы указать, что слейв работает правильно. Также вы должны обратить внимание на значения Relay_Master_Log_File
и Exec_Master_Log_Pos
, которые подтверждают прогресс репликации.
После установки мастер- и слейв-серверов было бы полезно протестировать настройку репликации, чтобы убедиться, что все работает так, как ожидалось.
Чтобы протестировать репликацию, попробуйте вставить простую запись данных на мастер-сервере и посмотрите, появится ли она на слейве.
На мастер-сервере войдите в MySQL и создайте простую базу данных и таблицу:
mysql -u root -p
CREATE DATABASE testdb; USE testdb; CREATE TABLE testtable (id INT PRIMARY KEY AUTO_INCREMENT, value VARCHAR(255)); INSERT INTO testtable (value) VALUES ('Replication Test');
Войдите в командную строку MySQL на слейв-сервере и проверьте, были ли данные реплицированы:
mysql -u root -p
USE testdb; SELECT * FROM testtable;
Вы должны увидеть строку, вставленную в таблицу мастера, теперь присутствующую в таблице слейва. Если репликация работает правильно, вы увидите:
+----+------------------+ | id | value | +----+------------------+ | 1 | Replication Test | +----+------------------+
В случае возникновения проблем во время или после установки, вот несколько общих шагов по устранению неполадок, которые вы можете рассмотреть:
ping
или telnet
).Репликация MySQL на Debian, как показано, включает в себя настройку как мастер-, так и слейв-серверов для обработки и воспроизведения изменений базы данных на нескольких системах. Эта настройка может значительно повысить надежность и эффективность доступа к данным. Хотя настройка репликации требует некоторых усилий и понимания архитектуры базы данных, следование этим инструкциям должно сделать процесс управляемым и успешным.
Помните, что всегда случается хорошей практикой регулярно отслеживать ваш сервер MySQL и проводить регулярные проверки консистентности и производительности на ваших реплицированных данных, чтобы гарантировать, что ваши системы работают плавно и эффективно.
Если вы найдете что-то неправильное в содержании статьи, вы можете