MySQL репликацията ви позволява лесно да копирате база данни от един сървър на друг. MySQL поддържа различни видове репликация като главен-подчинен, главен-главен и групова репликация. MariaDB също поддържа репликация с множество глави. В тази статия ще разгледаме репликацията Master-Slave в MySQL и ще научим как да репликираме MySQL база данни в Linux. Можете да използвате тези стъпки, за да репликирате MySQL база данни в Ubuntu, Debian, CentOS, Fedora, Red hat и други типове Linux.
Как да репликирате MySQL база данни
Ето стъпките за репликиране на MySQL база данни. За нашата настройка ще ни трябва главна база данни (IP – 54.24.32.12) и подчинена база данни (IP – 45.12.21.23). Ще репликираме база данни с име exampledb от господар на роб. Предполагаме, че имате инсталиран MySQL и на двата сървъра и имате root привилегии и за двата. В противен случай можете да инсталирате MySQL със следната команда
$ sudo apt-get install mysql-server mysql-client
Бонус за четене:Топ алтернативи на MySQL Workbench
1. Редактиране на главен конфигурационен файл
Отворете терминала на сървъра на основната база данни и изпълнете следната команда
$ sudo vi /etc/mysql/my.cnf
По подразбиране отдалечените връзки са деактивирани в MySQL. Трябва да разрешим отдалечена връзка от подчинен към главен за репликация. Затова декоментираме следните два реда, за да разрешим отдалечени връзки, като добавим # в началото им, както е показано по-долу
#skip-networking #bind-address=127.0.0.1
Добавете или разкоментирайте следните редове в блок [mysqld], за да изглеждат както следва.
[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log binlog-do-db=exampledb
Нека разгледаме всеки от горните редове. Първият ред server-id определя уникален идентификационен номер за главен. Трябва да е положително число от 1 до 2^32.
log-bin определя местоположението на регистрационния файл, който ще бъде попълнен от MySQL с подробности за репликацията.
binlog-do-db указва името на базата данни, която трябва да бъде репликирана.
Рестартирайте MySQL Server, за да приложите промените
$ sudo service mysql restart
Влезте в MySQL като root потребител
$ sudo mysql -u root -p
и изпълнете следната команда
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | exampledb | | +------------------+----------+--------------+------------------+
Моля, обърнете внимание на горните подробности, те ще ни трябват по-късно в стъпка №3.
Бонус четене:Как да активирате SSL/TLS в MySQL
2. Създаване на потребител за репликация
Влезте в MySQL сървъра на главен.
$ sudo mysql -u root -p
Ще бъдете подканени за root парола.
След като влезете в MySQL, изпълнете следните команди, за да създадете отдалечен потребител slave_user , и му дайте разрешения за репликация за всички бази данни. Моля, заменете 45.12.21.23 по-долу с IP адреса на вашия подчинен сървър и заменете $password с подходяща парола според вашето изискване.
mysql> CREATE USER slave_user@45.12.21.23; mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@45.12.21.23 IDENTIFIED BY '$password'; mysql> FLUSH PRIVILEGES;
Моля, добавете правило за входяща защитна стена за порт 3306 и позволете 45.12.21.23. Този отдалечен потребител трябва да се свърже с главната база данни, за да се случи репликация.
Бонус за четене:Как да промените сортирането на всички таблици в MySQL
3. Редактиране на подчинен конфигурационен файл
Отворете терминала на сървъра на подчинената база данни и изпълнете следната команда
$ sudo vi /etc/mysql/my.cnf
Добавете следните редове под [mysqld], за да изглеждат като
[mysqld] server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = exampledb
В първия ред присвояваме идентификатор на сървъра 2 на подчинен сървър. Следващите няколко реда определят местоположенията на регистрационните файлове на релето и репликационните регистрационни файлове. Последният ред указва базата данни, която да бъде репликирана.
Рестартирайте MySQL Server и влезте в MySQL
$ sudo service mysql restart $ sudo mysql -u root -p
Изпълнете следните команди, за да създадете празна база данни на подчинен.
mysql> CREATE DATABASE exampledb; mysql> USE exampledb;
Заредете данни от основната база данни, за да попълните подчинена база данни
mysql> LOAD DATA FROM MASTER;
Излезте от MySQL.
Бонус за четене:Топ блогове за база данни, които да следвате
4. Инициализира репликация
Докато сте влезли в MySQL, изпълнете следните команди, за да инициирате процеса на репликация. Сменете частите судебелен с вашите ценности.
mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST='54.24.32.12', MASTER_USER='slave_user', MASTER_PASSWORD='<password>', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
MASTER_HOST – IP адрес или име на хост на главния (54.24.32.12).
MASTER_USER – подчинен потребител, който създадохме в стъпка #2.
MASTER_PASSWORD – парола на подчинен потребител, който създадохме в стъпка #2.
MASTER_LOG_FILE – файл, върнат от MySQL в стъпка #1, когато сте стартирали
ПОКАЖЕТЕ ГЛАВНИЯ СТАТУС
MASTER_LOG_POS – позиция, която MySQL върна, когато изпълнихте SHOW MASTER STATUS в стъпка #1
Накрая стартираме подчинения, за да започне репликация на MySQL база данни.
mysql> START SLAVE;
Надяваме се, че тази статия ще ви помогне да репликирате MySQL база данни.