Mysql replikace (Master-slave)

Pokud budete používat databázi s několika tisíci uživateli, postupem času zjistíte, že pouhé on-line backupy MySQL nestačí a je potřeba replikovat. Důvodů může být hned několik – od velkého loadu primární MySQL až po potřebu provozovat relativně aktuální kopie databází na jiném místě.

Jak na to?

Master Mysql Server:

  • Je potřeba nastavit pár věcí do mysql konfigu, konkrétně do sekce [mysqld]
[root@example.cz ~]# vi /etc/my.cnf
server-id= 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=jmeno_databaze
  • a restartneme mysql
[root@example.cz ~]# /erc/init.d/mysql restart
  • Připojíme se do databáze a zjistime pár věcí:
mysql> show master status;
+----------------------------+-----------+---------------------------------------------------------------------------+------------------+
| File                       | Position  | Binlog_Do_DB                                                              | Binlog_Ignore_DB |
+----------------------------+-----------+---------------------------------------------------------------------------+------------------+
| mysql-master-bin.001187 | 100277021 | jmeno_databaze,jmeno_databaze |                  | 
+----------------------------+-----------+---------------------------------------------------------------------------+------------------+
1 row in set (0.00 sec)

mysql> 

S tohoto vypisu budeme pozdeji potrebovat hodnoty „File“ a „Position“!!!!

  • Dále je potřeba udělat Mysql Dump skopirovat na slave server a naimportovat

Tímto je nastavení na master serveru hotovo a můžeme se vrhnout na slave server

Slave Mysql Server:

Import databáze z master serveru:

[root@example.cz ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32315023
Server version: 5.0.62-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database jmeno_databaze;
Query OK, 1 row affected (0.00 sec)
mysql> use jmeno_databaze
Database changed

mysql> source /tmp/jmeno_databaze.sql
mysql> quit;
  • Nyni nakonfigurujeme mysql aby fungovalo jako slave server
[root@example.cz ~]# vi /etc/my.cnf
server-id=2
master-host=192.168.0.100
master-user=root
master-password=root_password
master-connect-retry=60
replicate-do-db=jmeno_databaze
  • a restartneme mysql
[root@example.cz ~]# /erc/init.d/mysql restart
  • Připojíme se do databáze a donastavime zbytek:
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='root', MASTER_PASSWORD='root_password', MASTER_LOG_FILE='mysql-master-bin.001187', MASTER_LOG_POS=100277021; 
mysql> START SLAVE;

do v predchazejicim prikaze je potreba u CHANGE MASTER zadat LOG_FILE a LOG_POS na hodnoty ktere jsme zjistily na master serveru

warrnings.jpg Kadzy server musi mit unikatni „server-id“

Timto je replikace nastavena a mela by byt funkcni.

Pro kontrolu muzete pouzit jeste prikaz

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.0.100
                Master_User: root
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-master-bin.001187
        Read_Master_Log_Pos: 101716183
             Relay_Log_File: mysqld-relay-bin.001704
              Relay_Log_Pos: 101716330
      Relay_Master_Log_File: mysql-master-bin.001187
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: jmeno_databaze, jmeno_databaze
        Replicate_Ignore_DB: 
         Replicate_Do_Table: 
     Replicate_Ignore_Table: 
    Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
                 Last_Errno: 0
                 Last_Error: 
               Skip_Counter: 0
        Exec_Master_Log_Pos: 101716183
            Relay_Log_Space: 101716330
            Until_Condition: None
             Until_Log_File: 
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File: 
         Master_SSL_CA_Path: 
            Master_SSL_Cert: 
          Master_SSL_Cipher: 
             Master_SSL_Key: 
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

Pokud vypada takto nejak tak je vse v poradku a replikace bezi spravne.


Personal Tools