Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skonfiguruj replikację bazy danych Master-Master MySQL

Co to jest replikacja MySQL Master-Master?

Replikacja MySQL Master-Master zwiększa szybkość i redundancję aktywnych witryn internetowych. Dzięki replikacji dwa oddzielne serwery MySQL działają jako klaster. Klastrowanie baz danych jest szczególnie przydatne w przypadku konfiguracji witryn sieci Web o wysokiej dostępności. Użyj dwóch oddzielnych Linodów, aby skonfigurować replikację bazy danych, każdy z prywatnymi adresami IPv4.

Uwaga

Ten przewodnik jest napisany dla użytkownika innego niż root. Polecenia wymagające podwyższonych uprawnień są poprzedzone przedrostkiem sudo . Jeśli nie znasz sudo polecenie, możesz sprawdzić nasz przewodnik po użytkownikach i grupach.

Ten przewodnik jest napisany dla Debiana 9, Ubuntu 18.04 i Ubuntu 20.04.

Jeśli nie masz pewności, która wersja MySQL została zainstalowana w Twoim systemie, wykonując poniższe czynności, wprowadź następujące polecenie:

mysql --version

Zainstaluj MySQL

  1. Użyj następujących poleceń, aby zainstalować MySQL na każdym z Linodes:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Uruchom polecenie bezpiecznej instalacji MySQL. Zostaniesz poproszony o utworzenie hasła roota. Zaleca się wybranie odpowiedzi tak na wszystkie pytania:

    mysql_secure_installation
    

Edytuj konfigurację MySQL

  1. Edytuj /etc/mysql/my.cnf plik na każdym z Linodes. Dodaj lub zmodyfikuj następujące wartości:

    Serwer 1:

    Plik:/ 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
    Uwaga Jeśli używasz MySQL w wersji 8.0.25 lub wcześniejszej, zastąp log_replica_updates z log_slave_updates (w ramach obu Serwerów 1 i 2). Zobacz dokumentację MySQL, aby uzyskać szczegółowe informacje.

    Serwer 2:

    Plik:/ 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
    Uwaga Jeśli używasz MySQL w wersji 8.0.25 lub wcześniejszej, zastąp log_replica_updates z log_slave_updates (w ramach obu Serwerów 1 i 2). Zobacz dokumentację MySQL, aby uzyskać szczegółowe informacje.
  2. Edytuj bind-address konfiguracja w celu korzystania z prywatnych adresów IP dla każdego z Linodes.

    Plik:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. Po zakończeniu uruchom ponownie aplikację MySQL:

    sudo systemctl restart mysql
    

Utwórz użytkowników replikacji

  1. Zaloguj się do MySQL na każdym z Linod:

    mysql -u root -p
    
  2. Skonfiguruj użytkowników replikacji na każdym Linode. Zastąp x.x.x.x z prywatnym adresem IP przeciwnego Linode i password z silnym hasłem:

    MySQL8 i nowsze

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

    Poniżej MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Uruchom następujące polecenie, aby przetestować konfigurację. Użyj prywatnego adresu IP przeciwnego Linode:

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

    To polecenie powinno połączyć Cię z instancją MySQL zdalnego serwera.

Konfiguruj replikację bazy danych

  1. Po zalogowaniu się do MySQL na serwerze 1 zapytaj o status główny:

    SHOW MASTER STATUS;
    

    Zwróć uwagę na wyświetlane wartości plików i pozycji:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. Na serwerze 2 w wierszu polecenia MySQL skonfiguruj funkcję repliki dla tej bazy danych. Zastąpx.x.x.x z prywatnym IP z pierwszego serwera. Zastąp także wartość source_log_file z wartością pliku z poprzedniego kroku i wartością source_log_pos z wartością pozycji.

    MySQL 8.0.22 lub nowszy:

    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 lub starszy:

    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. Na serwerze 2 zapytaj o stan główny. Ponownie zanotuj wartości pliku i pozycji.

    SHOW MASTER STATUS;
    
  4. Ustaw status bazy danych replik na Serwer 1, używając podobnych poleceń jak w kroku 2. Podczas wprowadzania poleceń użyj adresu IP Serwera 2 oraz wartości pliku i pozycji, które właśnie zebrałeś w poprzednim kroku.

  5. Przetestuj, tworząc bazę danych i wstawiając wiersz:

    Serwer 1:

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

    Serwer 2:

    show tables in test;
    

Po zapytaniu powinieneś zobaczyć tabele z serwera 1 zreplikowane na serwerze 2. Gratulacje, masz teraz klaster MySQL Master-Master!

Więcej informacji

Dodatkowe informacje na ten temat można znaleźć w poniższych zasobach. Chociaż są one dostarczane w nadziei, że będą przydatne, należy pamiętać, że nie możemy ręczyć za dokładność ani aktualność materiałów hostowanych zewnętrznie.

  • Podręczniki 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. 3 sposoby na wykrycie, czy ciąg pasuje do wyrażenia regularnego w MySQL

  2. Praca z kolumnami MySQL TIMESTAMP w SQL Server

  3. Jak dodać odwołanie do łącznika MySQL dla platformy .NET?

  4. SQLSTATE[42000]:Błąd składni lub naruszenie dostępu:1064 Wystąpił błąd w składni SQL — PHP — PDO

  5. mysqli:czy może przygotować wiele zapytań w jednej instrukcji?