sql >> Databáze >  >> RDS >> Mysql

Konfigurace replikace databáze MySQL Master-Master

<šablona x-if=visible><šablona x-if=$isMobile()>

Co je replikace MySQL Master-Master?

Replikace MySQL Master-Master zvyšuje rychlost a redundanci pro aktivní webové stránky. Při replikaci fungují dva samostatné servery MySQL jako cluster. Klastrování databází je užitečné zejména pro konfigurace webu s vysokou dostupností. Ke konfiguraci replikace databáze použijte dva samostatné Linody, každý se soukromými adresami IPv4.

Poznámka

Tato příručka je napsána pro uživatele bez oprávnění root. Příkazy, které vyžadují zvýšená oprávnění, mají předponu sudo . Pokud neznáte sudo příkazu, můžete se podívat na naši příručku pro uživatele a skupiny.

Tato příručka je napsána pro Debian 9, Ubuntu 18.04 a Ubuntu 20.04.

Pokud si nejste jisti, která verze MySQL byla ve vašem systému nainstalována, při provádění kroků níže zadejte následující příkaz:

mysql --version

Instalovat MySQL

  1. K instalaci MySQL na každý z Linodů použijte následující příkazy:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Spusťte příkaz zabezpečené instalace MySQL. Budete požádáni o vytvoření hesla root. Doporučuje se vybrat ano na všechny otázky:

    mysql_secure_installation
    

Upravit konfiguraci MySQL

  1. Upravte /etc/mysql/my.cnf soubor na každém z Linodů. Přidejte nebo upravte následující hodnoty:

    Server 1:

    Soubor:/ 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
    Poznámka Pokud používáte MySQL 8.0.25 nebo starší, nahraďte log_replica_updates s log_slave_updates (v rámci serverů 1 a 2). Podrobnosti naleznete v dokumentaci MySQL.

    Server 2:

    Soubor:/ 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
    Poznámka Pokud používáte MySQL 8.0.25 nebo starší, nahraďte log_replica_updates s log_slave_updates (v rámci serverů 1 a 2). Podrobnosti naleznete v dokumentaci MySQL.
  2. Upravte bind-address konfiguraci za účelem použití soukromých IP adres pro každý z Linodů.

    Soubor:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. Po dokončení restartujte aplikaci MySQL:

    sudo systemctl restart mysql
    

Vytvořit uživatele replikace

  1. Přihlaste se do MySQL na každém z Linodů:

    mysql -u root -p
    
  2. Nakonfigurujte uživatele replikace na každém Linode. Nahraďte x.x.x.x se soukromou IP adresou protějšího Linode a password se silným heslem:

    MySQL8 a vyšší

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

    Pod MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Spusťte následující příkaz a otestujte konfiguraci. Použijte soukromou IP adresu protějšího Linode:

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

    Tento příkaz by vás měl připojit k instanci MySQL vzdáleného serveru.

Konfigurace replikace databáze

  1. Při přihlášení do MySQL na serveru 1 se dotazujte na hlavní stav:

    SHOW MASTER STATUS;
    

    Poznamenejte si zobrazené hodnoty souboru a pozice:

    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 serveru 2 na příkazovém řádku MySQL nastavte funkci repliky pro tuto databázi. Nahraditx.x.x.x s privátní IP z prvního serveru. Nahraďte také hodnotu pro source_log_file s hodnotou souboru z předchozího kroku a hodnotou pro source_log_pos s hodnotou pozice.

    MySQL 8.0.22 nebo vyšší:

    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 nebo starší:

    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 serveru 2 dotaz na hlavní stav. Znovu si poznamenejte hodnoty souboru a pozice.

    SHOW MASTER STATUS;
    
  4. Nastavte stav databáze replik na Serveru 1 pomocí podobných příkazů jako v kroku 2. Při zadávání příkazů použijte IP adresu Serveru 2 a hodnoty souborů a pozic, které jste právě shromáždili v předchozím kroku.

  5. Otestujte vytvořením databáze a vložením řádku:

    Server 1:

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

    Server 2:

    show tables in test;
    

Při dotazu byste měli vidět tabulky ze serveru 1 replikované na serveru 2. Gratulujeme, nyní máte cluster MySQL Master-Master!

Další informace

Další informace o tomto tématu můžete získat v následujících zdrojích. Přestože jsou poskytovány v naději, že budou užitečné, vezměte prosím na vědomí, že nemůžeme ručit za přesnost nebo aktuálnost externě hostovaných materiálů.

  • Referenční příručky MySQL

  1. Jak přidat řetězec k hodnotě sloupce v MySQL?

  2. Jak odesílat e-maily ze serveru SQL (T-SQL)

  3. Jak uniknout doslovnému znaku procenta, když je povolena možnost NO_BACKSLASH_ESCAPES?

  4. Spočítejte všechny objekty ve vaší databázi