Дори когато някои ИТ хора чуят фразата „Репликация на база данни “, те често го свързват с необходимостта от наличието на множество копия на една и съща информация, за да се избегне загуба на данни в случай на хардуерна повреда или повреда на данните. Въпреки че до известна степен това е вярно, репликацията на база данни е много повече от общата концепция за архивиране на база данни и наличност на данни.
Сред другите предимства на репликацията на база данни в настройка главен-подчинен можем да споменем:
- Резервните копия могат да се правят на подчинения сървър, без да се засягат (и да бъдат засегнати) операциите на запис в главния.
- Ресуроемки операции (като анализ на данни) могат да се извършват на подчинения, без да се влияе върху производителността на главния.
В тази статия ще обясним как да настроите репликация главен-подчинен в MariaDB 10.1 . За разлика от класическата репликация, MariaDB въведе концепцията за глобални идентификатори на транзакции (GTIDs ) в v10.0 , което позволява лесно да промените подчинен, за да се свърже и репликира от различен главен. На всичкото отгоре състоянието на подчинения се записва по безопасен при срив начин (актуализациите на състоянието се извършват в същата транзакция като актуализациите на данните).
Ако търсите MySQL репликация под CentOS/RHEL 6 , следвайте това ръководство. Настройка на MySQL (Master-Slave) репликация на CentOS/RHEL 6
Инсталиране на MariaDB 10.1 в CentOS/RHEL 7 и Debian 8/9
Нашата среда за тестване се състои от следните машини (и двете са CentOS 7 ):
Master:192.168.0.18Slave:192.168.0.19
За да инсталираме най-новата версия на MariaDB, ще трябва да добавим техните хранилища към нашите сървъри. Ако използвате по-стара версия на MariaDB, да речем 5.5, помислете за надграждане до най-новата версия 10.1, като използвате статията по-долу.
- Надстройте MariaDB 5.5 до MariaDB 10.1
В CentOS/RHEL
Създайте файл с име MariaDB.repo
вътре в /etc/yum.repos.d със следното съдържание и на двете Master и Slave системи:
# Списък с хранилища на MariaDB 10.1 CentOS – създаден на 23.01.2016 г. 14:16 UTC# http://mariadb.org/mariadb/repositories/[mariadb]name =MariaDBbaseurl =http://yum.mariadb.org/ 10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1
Запазете файла и инсталирайте MariaDB на двата сървъра, като използвате yum:
# yum update &&yum install MariaDB-сървър MariaDB-client
В Debian/Ubuntu
Добавете ключа за удостоверяване на пакети и хранилището на MariaDB:
# apt-get install software-properties-common# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db# add-apt-repository 'deb [arch=amd64,i386] http:/ /mirror.edatel.net.co/mariadb/repo/10.1/debian jessie главен'
Забележка :Заменете име на дистрибуцията и кодово име в маркирания по-горе ред.
Инсталирайте с помощта на apt-get команда:
# apt-get update# apt-get install mariadb-server
След като инсталирате MariaDB, стартирайте mysql_secure_installation
процедура както на главната, така и на подчинената, нека настроим примерна тестова база данни в главната машина.
Настройване на примерна MySQL база данни на Master
Сега ще настроим в главния сървър Employees
база данни от https://github.com/datacharmer/test_db (което предоставя набор от данни от 4 милиони записи, разпределени в шест таблици) в две прости стъпки:
Клонирайте хранилището и го използвайте, за да импортирате примерната база данни във вашата инсталация на MariaDB:
# git клонинг https://github.com/datacharmer/test_db# cd test_db# mysql <служители.sql
Конфигуриране на MySQL сървър на Master
За да конфигурирате главния, изпълнете следните стъпки:
СТЪПКА 1: Редактирайте /etc/my.cnf
файл. Под [mysqld]
раздел, добавете следните четири реда:
log-binserver_id=1replicate-do-db=employeesbind-address=192.168.0.18
и рестартирайте MariaDB:
# systemctl рестартирайте mariadb
СТЪПКА 2: Влезте в сървъра на MariaDB като root, създайте подчинен потребител и задайте необходимите разрешения:
MariaDB [(няма)]> СЪЗДАВАНЕ НА ПОТРЕБИТЕЛ 'slave'@'localhost' ИДЕНТИФИЦИРАН ОТ 'SlavePassword';MariaDB [(няма)]> ПРЕДОСТАВЯНЕ НА РЕПЛИКАЦИЯ ЗА РЕПЛИКАЦИЯ НА *.* НА подчинено устройство, ИДЕНТИФИЦИРАНА ОТ 'SlavePassword' С ОПЦИЯ ЗА ПРЕДОСТАВЯНЕ;MariaDB [(няма)]> ПРИВИЛЕГИИ НА FLUSH;MariaDB [(няма)]> ФЛУШ ТАБЛИЦИ С ПРОЧЕТЕНЕ ЗАКЛЮЧВАНЕ;MariaDB [(няма)]> ПОКАЗВАНЕ НА ГЛАВНИЯ СТАТУС;
Последната команда (ПОКАЗВАНЕ НА ГЛАВНИЯ СТАТУС ) връща текущата позиция в двоичния дневник (точните координати, които показват точно от коя точка ведомото устройство трябва да започне репликиране:
СТЪПКА 3: Излезте от подканата на MariaDB (с exit;
) и използвайте следната команда, за да направите моментна снимка на базата данни на служителите. Когато натиснете Enter , ще бъдете подканени да въведете паролата за root, която сте задали по-рано чрез mysql_secure_installation
:
# mysqldump -u root -p служители> служители-dump.sql
След като изхвърлянето приключи, свържете се отново със сървъра на базата данни, за да отключите таблиците и след това излезте:
MariaDB [(няма)]> ОТКЛЮЧВАНЕ НА ТАБЛИЦИ;MariaDB [(няма)]> изход;
СТЪПКА 4: Копирайте изхвърлянето в подчинения:
# scp staff-dump.sql [email protected]:/root/
СТЪПКА 5: Изпълнете mysql_upgrade
процедура за надграждане на системните таблици (ще бъдете подканени да въведете root паролата на MariaDB):
# mysql_upgrade -u корен -p
СТЪПКА 6: Разрешете услугата на базата данни през защитната стена:
# firewall-cmd --add-service=mysql# firewall-cmd --add-service=mysql --permanent# firewall-cmd --reload
Сега нека конфигурираме подчинения.
Конфигуриране на MySQL сървър на подчинен
За да конфигурирате подчинения, следвайте тези стъпки:
СТЪПКА 1: Създайте акаунт за изпълнение на задачите за репликация. Свържете се с локалния сървър на MariaDB с:
# mysql -u корен –p
и въведете паролата, която сте задали по-рано.
СТЪПКА 2: След като се свържете със сървъра на базата данни, създайте потребителя и празна база данни и дайте разрешения:
MariaDB [(няма)]> СЪЗДАВАНЕ НА БАЗА ДАННИ служители;MariaDB [(няма)]> ПРЕДОСТАВЯТЕ ВСИЧКИ ПРИВИЛЕГИИ НА служители.* НА 'slave'@'localhost' С ОПЦИЯ ЗА ПРЕДОСТАВЯНЕ;MariaDB [(няма)]> ПРИВИЛЕГИИ НА ФЛУШ;
СТЪПКА 3: Излезте от подканата на MariaDB и заредете дъмпа, създаден в главния сървър:
# mysql -u root -p служители <служители-dump.sql
СТЪПКА 4: Редактирайте /etc/my.cnf
файл, за да зададете ID на сървъра към подчинения под [mysqld]
раздел. Имайте предвид, че трябва да е различно от 1 , както използвахме 1 в главния:
server_id=2replicate-do-db=employees
Рестартирайте сървъра на базата данни:
# systemctl рестартирайте mariadb
СТЪПКА 5: Изпълнете mysql_upgrade
процедура за надграждане на системните таблици (ще бъдете подканени да въведете root паролата на MariaDB):
# mysql_upgrade -u корен -p
СТЪПКА 6: След като дъмпът бъде импортиран в подчинения, остават само няколко стъпки, за да започнем да копираме. Влезте в базата данни и изпълнете следните команди в подканата на MariaDB. Обърнете специално внимание на MASTER_LOG_FILE
и MASTER_LOG_POS
променливи, които трябва да съответстват на стойностите, върнати от ПОКАЖЕНЕ НА ГЛАВНИЯ СТАТУС в СТЪПКА 2 от „Конфигуриране на главния“ по-горе.
MariaDB [(няма)]> Промяна на Master на master_host ='192.168.0.18', master_user ='slave', master_password ='slavepassword', master_port =3306, master_log_file ='master-bin.000001', master_log_pos =314, master_connect_retry =10, master_use_gtid =current_pos; /предварително>СТЪПКА 7: Стартирайте подчинения и проверете състоянието му, без да излизате от подканата на MariaDB:
MariaDB [(няма)]> START SLAVE;MariaDB [(няма)]> ПОКАЗВАНЕ НА СТАТУС НА ПОДЧИСТВОТО\G;Не че имате нужда от това сега, но имайте предвид, че можете да спрете подчинения с:
MariaDB [(няма)]> СПРЕНЕ НА РАБОТА;ако
SHOW SLAVE STATUS\G;
командата връща всякакви грешки. Използвайте тези грешки, за да отстраните неизправности и след това стартирайтеSTART SLAVE;
за да тествате отново.Тествайте MySQL/MariaDB репликация на база данни
Нека добавим запис към служителите таблица в главния сървър:
MariaDB [(няма)]> ВЪВЕТЕ ВЪВ служители (emp_no, birth_date, first_name, last_name, gender, hire_date) СТОЙНОСТИ (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');предварително>След това проверете дали тази промяна е репликирана в подчинения:
MariaDB [(няма)]> ИЗПОЛЗВАЙТЕ служители;MariaDB [(няма)]> ИЗБЕРЕТЕ * ОТ служители КЪДЕ emp_no=500000;Както можете да видите, репликацията работи правилно от главен към подчинен.
Резюме
В тази статия сме обяснили как да инсталирате най-новата версия на MariaDB в CentOS/RHEL 7 и Debian 8/9 и обсъдихме как да настроим репликация главен-подчинен с GTID. За повече информация може да искате да се обърнете към Ръководството за репликация на MariaDB и не се колебайте да се свържете с нас чрез формуляра по-долу, ако имате въпроси или коментари.