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

Конфигуриране на репликация на база данни Master-Master MySQL

Какво е MySQL главен-главен репликация?

MySQL Master-Master репликацията добавя скорост и излишък за активните уебсайтове. При репликация два отделни MySQL сървъра действат като клъстер. Клъстерирането на бази данни е особено полезно за конфигурации на уебсайтове с висока достъпност. Използвайте два отделни Linode, за да конфигурирате репликация на база данни, всяка с частни IPv4 адреси.

Забележка

Това ръководство е написано за потребител без root права. Командите, които изискват повишени привилегии, имат префикс с sudo . Ако не сте запознати с sudo команда, можете да проверите нашето ръководство за потребители и групи.

Това ръководство е написано за Debian 9, Ubuntu 18.04 и Ubuntu 20.04.

Ако не сте сигурни коя версия на MySQL е инсталирана на вашата система, когато следвате стъпките по-долу, въведете следната команда:

mysql --version

Инсталирайте MySQL

  1. Използвайте следните команди, за да инсталирате MySQL на всеки от Linodes:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Изпълнете командата за защитена инсталация на MySQL. Ще бъдете помолени да създадете root парола. Препоръчително е да изберете да за всички въпроси:

    mysql_secure_installation
    

Редактиране на конфигурацията на MySQL

  1. Редактирайте /etc/mysql/my.cnf файл на всеки от Linodes. Добавете или променете следните стойности:

    Сървър 1:

    Файл:/ etc/mysql/my.cnf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [mysqld]
    server_id           = 1
    log_bin             = /var/log/mysql/mysql-bin.log
    log_bin_index       = /var/log/mysql/mysql-bin.log.index
    relay_log           = /var/log/mysql/mysql-relay-bin
    relay_log_index     = /var/log/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_replica_updates = 1
    auto-increment-increment = 2
    auto-increment-offset = 1
    Забележка Ако използвате MySQL 8.0.25 или по-стара версия, заменете log_replica_updates с log_slave_updates (в рамките на двата сървъра 1 и 2). Вижте документацията на MySQL за подробности.

    Сървър 2:

    Файл:/ etc/mysql/my.cnf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [mysqld]
    server_id           = 2
    log_bin             = /var/log/mysql/mysql-bin.log
    log_bin_index       = /var/log/mysql/mysql-bin.log.index
    relay_log           = /var/log/mysql/mysql-relay-bin
    relay_log_index     = /var/log/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_replica_updates = 1
    auto-increment-increment = 2
    auto-increment-offset = 2
    Забележка Ако използвате MySQL 8.0.25 или по-стара версия, заменете log_replica_updates с log_slave_updates (в рамките на двата сървъра 1 и 2). Вижте документацията на MySQL за подробности.
  2. Редактирайте bind-address конфигурация, за да се използват частните IP адреси за всеки от Linodes.

    Файл:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. След като приключите, рестартирайте приложението MySQL:

    sudo systemctl restart mysql
    

Създаване на потребители за репликация

  1. Влезте в MySQL на всеки от Linodes:

    mysql -u root -p
    
  2. Конфигурирайте потребителите за репликация на всеки Linode. Заменете x.x.x.x с частния IP адрес на противоположния Linode и password със силна парола:

    MySQL8 и по-горе

    CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
    

    Под MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Изпълнете следната команда, за да тествате конфигурацията. Използвайте частния IP адрес на противниковия Linode:

    mysql -u replication -p -h x.x.x.x -P 3306
    

    Тази команда трябва да ви свърже с MySQL екземпляр на отдалечения сървър.

Конфигуриране на репликация на база данни

  1. Докато сте влезли в MySQL на сървър 1, потърсете главния статус:

    SHOW MASTER STATUS;
    

    Обърнете внимание на стойностите на файла и позицията, които се показват:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. На сървър 2 в подканата на MySQL настройте функционалността на репликата за тази база данни. Заменетеx.x.x.x с частния IP от първия сървър. Заменете също стойността за source_log_file със стойността на файла от предишната стъпка и стойността за source_log_pos със стойността на позицията.

    MySQL 8.0.22 или по-нова версия:

    STOP REPLICA;
    CHANGE REPLICATION SOURCE TO
        source_host='x.x.x.x',
        source_port=3306,
        source_user='replication',
        source_password='password',
        source_log_file='mysql-bin.000001',
        source_log_pos=106;
    START REPLICA;
    

    MySQL 8.0.22 или по-ранна версия:

    STOP SLAVE;
    CHANGE MASTER TO
        master_host='x.x.x.x',
        master_port=3306,
        master_user='replication',
        master_password='password',
        master_log_file='mysql-bin.000001',
        master_log_pos=106;
    START SLAVE;
    
  3. На сървър 2 потърсете главния статус. Отново отбележете стойностите на файла и позицията.

    SHOW MASTER STATUS;
    
  4. Задайте състоянието на базата данни на репликата на сървър 1, като използвате подобни команди като в стъпка 2. Когато въвеждате командите, използвайте IP адреса на сървър 2 и стойностите на файла и позицията, които току-що събрахте в предишната стъпка.

  5. Тествайте, като създадете база данни и вмъкнете ред:

    Сървър 1:

    create database test;
    create table test.flowers (`id` varchar(10));
    

    Сървър 2:

    show tables in test;
    

Когато бъдете запитани, трябва да видите таблиците от сървър 1, репликирани на сървър 2. Поздравления, вече имате MySQL Master-Master клъстер!

Повече информация

Може да пожелаете да се консултирате със следните ресурси за допълнителна информация по тази тема. Въпреки че те са предоставени с надеждата, че ще бъдат полезни, моля, имайте предвид, че не можем да гарантираме за точността или навременността на външно хостваните материали.

  • Справочни ръководства за 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. MySQL Server е изчезнал при импортиране на голям sql файл

  2. MySQL Errno 150

  3. Кумулативна сума за набор от редове в mysql

  4. Търсете във всички колони на таблица, като използвате едно условие where с една ключова дума в mysql

  5. Мога ли да съхранявам изображения в MySQL