Репликация MySQL — это процесс, который позволяет данным на одном или нескольких серверах баз данных MySQL, называемых подчиненными , автоматически оставаться в синхронизации с одним главным. сервер базы данных MySQL. Репликация может быть очень удобной, поскольку она обеспечивает масштабируемость за счет распределения доступа для чтения на несколько серверов, упрощает резервное копирование данных и позволяет анализировать данные на ведомом сервере без доступа к главному серверу. В этом кадре мы рассмотрим шаги, необходимые для репликации данных из главной базы данных в одну подчиненную базу данных.
Предварительные требования
Этот снимок предполагает следующее:
- У пользователя есть привилегии sudo
- MySQL установлен на машине
- Два сервера (главный и подчиненный) установлены и работают на двух разных IP-адресах
Настройка главной базы данных
Сначала нам нужно открыть загрузите файл конфигурации MySQL на главном сервере, используя следующую команду на терминале:
sudo nano/etc/mysql/mysql.conf.d/mysqld .cnf
Вам будет предложено ввести пароль root перед открытием файла конфигурации. Прокрутите вниз, пока не дойдете до следующей строки:
bind-address = 127.0.0.1
Здесь измените стандартный IP-адрес на IP-адрес главного сервера.
Затем перейдите к файлу конфигурации и убедитесь, что следующие строки не закомментированы:
server-id = 1log_bin =/var/log/mysql/mysql-bin.logbinlog_do_db = include_database_name
Вы можете выбрать идентификатор сервера, отличный от 1, если выбранный идентификатор уникален и не соответствует никакому другому идентификатору сервера в группе репликации. Замените include_database_name
любой базой данных, которую вы хотите реплицировать на подчиненном сервере. В нашем примере давайте использовать базу данных с именем repl_database
. Если вы хотите реплицировать более одной базы данных, повторите строку binlog_do_db = include_database_name
для всех нужных вам баз данных. Теперь мы закончили вносить изменения в файл конфигурации, поэтому мы сохраним и выйдите из файла перед обновлением MySQL с помощью следующей команды:
sudo service mysql restart
Следующие команды будет весело на оболочке MySQL. Мы запустим оболочку с помощью следующей команды:
mysql -u root -p
Прежде чем продолжить, нам нужно предоставить привилегии подчиненным базам данных. Мы будем использовать команду в следующем формате, чтобы назвать нашу подчиненную базу данных и установить ее пароль:
GRANT REPLICATION SLAVE ON *. * TO 'slave_user' @ '%' IDENTIFIED BY 'password';
Команда будет следовать за этим:
FLUSH PRIVILEGES;
Для следующих нескольких шагов нам нужно будет открыть новое окно или вкладку вместе с уже запущенными. На этой новой вкладке мы запустим следующие команды MySQL:
USE repl_database; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
Приведенная выше команда SHOW MASTER STATUS;
отобразит таблицу, показывающую положение базы данных, из которой ведомое устройство будет копировать. Откройте новое окно еще раз и введите следующую команду в терминале, чтобы экспортируйте свою базу данных:
mysqldump -u root -p --opt repl_database> repl_database.sql
Теперь вернитесь к предыдущее окно, в котором запущена оболочка MySQL, и выполните следующие команды, чтобы завершить настройку главной базы данных:
РАЗБЛОКИРОВАТЬ ТАБЛИЦЫ; ВЫЙТИ;
Настройка подчиненной базы данных
Далее нам понадобится для настройки подчиненной базы данных. Для этого мы войдем на наш подчиненный сервер, запустим оболочку MySQL и создадим базу данных, которую мы будем реплицировать с главного, используя следующие команды:
mysql -u root -pCREATE DATABASE repl_database; EXIT;
Затем мы хотим импортировать базу данных, которую мастер экспортировал с помощью команды:
mysql -u root -p repl_database /to/repl_database.sql
Теперь мы можем настроить подчиненный сервер аналогично тому, как мы настроили владелец. Мы снова откроем файл конфигурации с помощью:
sudo nano/etc/mysql/mysql.conf.d/mysqld.cnf
Теперь убедитесь, что в файл конфигурации внесены следующие изменения:
server-id = 2relay-log =/var/log/mysql/mysql-relay- bin.loglog_bin =/var/log/mysql/mysql-bin.logbinlog_do_db = repl_database
Мы снова перезапустим MySQL:
sudo service mysql restart
Теперь мы можем включить репликацию с помощью оболочки MySQL. Запустите оболочку с помощью mysql -u root -p
и введите следующую команду, заменив поля в звездочках соответствующими данными в строковой форме:
ИЗМЕНИТЬ МАСТЕРА НА MASTER_HOST = * Ваш главный IP-адрес *, MASTER_USER = * Ваш главный пользователь *, MASTER_PASSWORD = * Ваш главный пароль *, MASTER_LOG_FILE = 'mysql-bin. 000001 ', MASTER_LOG_POS = 107;
Наконец, мы можем активировать подчиненный сервер и просмотреть детали репликации с помощью команд:
START SLAVE; SHOW SLAVE STATUS G
В случае возникновения проблемы попробуйте:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 ; ПОДЧИНЕННЫЙ СТАРТ;
Теперь вы успешно реплицировали данные из главной базы данных MySQL в подчиненную базу данных!