MySQL · 3 min read · Dec 22, 2025

Как настроить репликацию базы данных в MySQL

Это “копировать и вставить” руководство!

Самый простой способ следовать этому руководству — использовать клиент командной строки/SSH-клиент (например,

PuTTY

для Windows) и просто копировать и вставлять команды (за исключением случаев, когда вам нужно предоставить собственную информацию, такую как IP-адреса, имена хостов, пароли и т. д.). Это помогает избежать опечаток.

Как настроить репликацию базы данных в MySQL

Версия 1.1
Автор: Фалко Тимме
Последнее редактирование: 14/01/2006

Это руководство описывает, как настроить репликацию базы данных в MySQL. Репликация MySQL позволяет иметь точную копию базы данных с главного сервера на другом сервере (ведущем), и все обновления базы данных на главном сервере немедленно реплицируются в базу данных на ведомом сервере, так что обе базы данных синхронизированы. Это не политика резервного копирования, потому что случайно выданная команда DELETE также будет выполнена на ведомом; но репликация может помочь защитить от аппаратных сбоев.

В этом руководстве я покажу, как реплицировать базу данных exampledb с главного сервера с IP-адресом 192.168.0.100 на ведомый. Оба сервера (главный и ведомый) работают на Debian Sarge; однако конфигурация должна применяться к почти всем дистрибутивам с небольшими или без изменений.

Оба сервера имеют установленный MySQL, и база данных exampledb с таблицами и данными уже существует на главном сервере, но не на ведомом.

Я хочу сначала сказать, что это не единственный способ настройки такой системы. Существует много способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Настройка главного сервера

Сначала нам нужно отредактировать /etc/mysql/my.cnf. Мы должны включить сетевую работу для MySQL, и MySQL должен слушать на всех IP-адресах, поэтому мы закомментируем эти строки (если они существуют):

| #skip-networking #bind-address = 127.0.0.1 |

Кроме того, мы должны сказать MySQL, для какой базы данных он должен записывать журналы (эти журналы используются ведомым для того, чтобы видеть, что изменилось на главном сервере), какой файл журнала он должен использовать, и мы должны указать, что этот сервер MySQL является главным. Мы хотим реплицировать базу данных exampledb, поэтому мы добавляем следующие строки в /etc/mysql/my.cnf:

| log-bin = /var/log/mysql/mysql-bin.log binlog-do-db=exampledb server-id=1 |

Затем мы перезапускаем MySQL:

/etc/init.d/mysql restart

Затем мы входим в базу данных MySQL как root и создаем пользователя с правами репликации:

mysql -u root -p
Введите пароль:

Теперь мы находимся в оболочке MySQL.

GRANT REPLICATION SLAVE ON . TO ‘slave_user’@’%’ IDENTIFIED BY ‘’; (Замените на реальный пароль!)
FLUSH PRIVILEGES;

Далее (все еще в оболочке MySQL) сделайте это:

USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Последняя команда покажет что-то вроде этого:

| +---------------+----------+--------------+------------------+ | File | Position | Binlog_do_db | Binlog_ignore_db | +---------------+----------+--------------+------------------+ | mysql-bin.006 | 183 | exampledb | | +---------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |

Запишите эту информацию, она нам понадобится позже на ведомом сервере!

Затем выйдите из оболочки MySQL:

quit;


Существует два способа переноса существующих таблиц и данных из exampledb с главного сервера на ведомый. Первый — сделать дамп базы данных, второй — использовать команду LOAD DATA FROM MASTER; на ведомом сервере. Последний имеет недостаток в том, что база данных на главном сервере будет заблокирована во время этой операции, поэтому, если у вас большая база данных на высоконагруженной производственной системе, это не то, что вам нужно, и я рекомендую следовать первому методу в этом случае. Однако последний метод очень быстрый, поэтому я опишу оба здесь.

Если вы хотите следовать первому методу, то сделайте это:

mysqldump -u root -p –opt exampledb > exampledb.sql (Замените на реальный пароль для пользователя MySQL root! Важно: Между -p и нет пробела!)

Это создаст SQL дамп exampledb в файле exampledb.sql. Перенесите этот файл на ваш ведомый сервер!

Если вы хотите пойти по пути LOAD DATA FROM MASTER;, то сейчас ничего делать не нужно.


Наконец, нам нужно разблокировать таблицы в exampledb:

mysql -u root -p
Введите пароль:
UNLOCK TABLES;
quit;

Теперь конфигурация на главном сервере завершена. Переходим к ведомому…

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.