Percona Mysql server master — slave репликация

Thank you for reading this post, don't forget to subscribe!

За осно­ву я возь­му 2 вир­ту­аль­ные маши­ны на базе Centos 8

Hostname IP адрес Вер­сия OS Вер­сия Mysql
mysql-master 10.20.1.23 Centos 8 Percona Server for MySQL 8.0
mysql-slave 10.20.1.29 Centos 8 Percona Server for MySQL 8.0

Нач­нем настрой­ку репли­ка­ции с уста­нов­ки Mysql сер­ве­ра на обе вир­ту­аль­ные машины.

Установка Percona Mysql Server

Уста­но­вить percona mysql server не пред­став­ля­ет ника­кой слож­но­сти, так как есть репо­зи­то­рий с гото­вы­ми паке­та­ми под все попу­ляр­ные систе­мы, в том чис­ле под centos. Под­клю­ча­ем этот репо­зи­то­рий. Дей­ствия выпол­ня­ем одно­вре­мен­но на обо­их серверах.

Отклю­ча­ем стан­дарт­ный модуль mysql и акти­ви­ру­ем репо­зи­то­рий перконы.

Уста­нав­ли­ва­ем Percona Mysql Server на Centos 8. Заод­но поста­вим xstrabackup и дру­гие ути­ли­ты, кото­рые нам могут пона­до­бить­ся в про­цес­се эксплуатации.

После уста­нов­ки запус­ка­ем mysql сер­вер и добав­ля­ем в автозагрузку.

Во вре­мя уста­нов­ки был авто­ма­ти­че­ски сге­не­ри­ро­ван вре­мен­ный пароль root. Посмот­реть его мож­но в логе /var/log/mysqld.log.

Исполь­зуя этот пароль, выпол­ним началь­ную настрой­ку сер­ве­ра, уда­лив все лиш­нее и ука­зав свой пароль. Имей­те вви­ду, что по умол­ча­нию уста­нов­лен Password Validation Plugin, кото­рый не поз­во­лит вам создать про­стой пароль. Он дол­жен удо­вле­тво­рять сле­ду­ю­щим требованиям:

  • Дли­на от 8-ми символов;
  • Мини­мум 1 цифра;
  • Мини­мум 1 спецсимвол.

Убе­ди­тесь, что вы запом­ни­ли свой новый пароль и може­те под­клю­чать­ся, исполь­зуя его.

Сер­ве­ры Mysql уста­но­ви­ли на обо­их вир­ту­аль­ных маши­нах. Дви­га­ем­ся дальше.

Загрузка базы данных

Загру­зим теперь на оба наших сер­ве­ра дам­пы базы дан­ных, кото­рую он будет обслу­жи­вать. Если вы начи­на­е­те новую базу с нуля, то про­сто создай­те ее на обо­их сер­ве­рах. Я же загру­жу из архи­ва, сде­лан­но­го с помо­щью mysqldump, базу сво­е­го сайта.

Теперь созда­дим на масте­ре учет­ную запись, от име­ни кото­рой будет рабо­тать репли­ка­ция. Напо­ми­наю, что 10.20.1.29 — ip адрес для slave сервера.

Настройка master — slave репликации

У нас все гото­во для настрой­ки непо­сред­ствен­но репли­ка­ции. Но перед тем, как ее начать, убе­ди­тесь, что у вас настро­ен или отклю­чен firewalld. В общем слу­чае на масте­ре раз­ре­ши­те под­клю­чать­ся к сер­ве­ру по tcp пор­ту 3306, на кото­ром рабо­та­ет mysql сервер.

Теперь запус­ка­ем репли­ка­цию. Для это­го идем на мастер и смот­рим master log position в кон­со­ли mysql.

Пере­хо­дим на slave и выпол­ня­ем в кон­со­ли mysql.

Про­ве­ря­ем ста­тус репликации.

Ско­рее все­го вы уви­ди­те ошибку:

Суть ее в том, что в вер­сии Mysql 8 поме­нял­ся пла­гин для аутен­ти­фи­ка­ции с mysql_native_password на caching_sha2_password. Теперь для кор­рект­ной рабо­ты репли­ка­ции необ­хо­ди­мо настра­и­вать под­клю­че­ние с исполь­зо­ва­ни­ем tls сер­ти­фи­ка­тов. Если инфра­струк­ту­ра закры­тая и дан­ные пере­да­ют­ся не через интер­нет, то этим мож­но пре­не­бречь. К при­ме­ру, я все­гда настра­и­ваю vpn тон­нель, если репли­ка­ция рабо­та­ет через интернет.

Самый про­стой спо­соб испра­вить ошиб­ку, это зашиф­ро­вать пароль поль­зо­ва­те­ля преды­ду­щим пла­ги­ном. Дела­ет­ся это так.

После это­го вер­ни­тесь на slave, оста­но­ви­те репли­ка­цию, обно­ви­те инфор­ма­цию с масте­ра и запу­сти­те зано­во. Ошиб­ки быть не должно.

Про­верь­те теперь ста­тус репли­ка­ции. При­зна­ком того, что все в поряд­ке, будет отсут­ствие оши­бок и инфор­ма­ция в сле­ду­ю­щих строках.

  • Slave_IO_State — состо­я­ние репли­ка­ции, в нор­ме ожи­да­ние собы­тий с мастера.
  • Slave_IO_Running — инди­ка­тор рабо­ты демо­на по сбо­ру бинар­но­го лога с масте­ра и запи­си его в локаль­ный relay лог.
  • Slave_SQL_Running — инди­ка­тор выпол­не­ния команд из локаль­но­го relay лога.
  • Seconds_Behind_Master — то, насколь­ко слейв сер­вер отста­ет от масте­ра в репли­ка­ции. Иде­аль­но 0 секунд, но может и отста­вать немного.

Если репли­ка­ция идет нор­маль­но, slave будет идти за master. Номер лога Master_Log_File и пози­ция Exec_Master_Log_Pos будут рас­ти. Если зна­че­ние Slave_IO_State пусто или Connecting to master, а Seconds_Behind_Master рав­но NULL, репли­ка­ция не началась.

Проверка репликации

Даль­ше може­те про­ве­рять рабо­ту репли­ка­ции. Так как у нас настро­е­на репли­ка­ция всей инфор­ма­ции, може­те создать на масте­ре новую базу дан­ных и доба­вить в нее какие-то значения.

Теперь идем на репли­ку и про­ве­ря­ем, полу­чи­ла ли она изменения.

Все в поряд­ке, репли­ка­ция работает.