Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да репликирате MySQL база данни на друг сървър

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 база данни.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да реша несъвместимо с sql_mode=only_full_group_by в laravel eloquent?

  2. 1052:Колона „id“ в списъка с полета е двусмислена

  3. Тип MySQL ENUM спрямо таблици за присъединяване

  4. Как да настроите WordPress MySQL база данни в облака

  5. MySQL match() against() - подреждане по уместност и колона?