Sådan opsættes MySQL (Master-Slave) replikering i RHEL, CentOS, Fedora


Den følgende vejledning har til formål at give dig en simpel trin-for-trin guide til opsætning af MySQL (Master-Slave) replikering i RHEL 6.3/6.2/6.1/6/5.8, CentOS 6.3/6.2/6.1/6/5.8 og Fedora 17 , 16,15,14,13,12 ved hjælp af den nyeste MySQL-version. Denne vejledning er specielt skrevet til CentOS 6.3-operativsystemet, men fungerer også med ældre version af Linux-distributioner med MySQL 5.x.

MySQL-replikering er meget nyttig med hensyn til datasikkerhed, failover-løsning, databasebackup fra slave, analyse osv. Vi bruger følgende ting til at gennemføre replikationsprocessen. I dit scenario ville det være anderledes.

  1. Arbejder Linux OS som CentOS 6.3, RedHat 6.3 eller Fedora 17
  2. Master og Slave er CentOS 6.3 Linux-servere.
  3. Master-IP-adresse er: 192.168.1.1.
  4. Slave-IP-adresse er: 192.168.1.2.
  5. Master og Slave er på det samme LAN-netværk.
  6. Master og Slave har MySQL-version installeret.
  7. Master tillader eksterne MySQL-forbindelser på port 3306.

Vi har to servere, den ene er Master med IP (192.168.1.1) og den anden er Slave som (192.168.1.2). Vi har opdelt installationsprocessen i to faser for at gøre tingene lettere for dig. I fase I konfigurerer vi masterserveren og i fase II med slave-serveren. Lad os starte replikeringsopsætningsprocessen.

Fase I: Konfigurer masterserver (192.168.1.1) til replikering

I fase I vil vi se installationen af MySQL, opsætte replikering og derefter kontrollere replikering.

Fortsæt først med MySQL-installation ved hjælp af YUM-kommandoen. Hvis du allerede har MySQL-installation, kan du springe dette trin over.

# yum install mysql-server mysql

Åbn my.cnf konfigurationsfil med VI editor.

# vi /etc/my.cnf

Tilføj følgende poster under [mysqld] sektionen, og glem ikke at erstatte tecmint med databasenavn, som du gerne vil replikere på Slave.

server-id = 1
binlog-do-db=tecmint
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

Genstart MySQL-tjenesten.

# /etc/init.d/mysqld restart

Log ind på MySQL som rootbruger, og opret slavebrugeren, og tildel privilegier til replikering. Udskift slave_user med bruger og din_adgangskode med adgangskode.

# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 11128001 | tecmint		 |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> quit;

Skriv venligst filnumrene (mysql-bin.000003) og position (11128001), vi krævede disse numre senere på Slave-serveren. Anvend derefter LÆS LÅS til databaser for at eksportere al database og masterdatabaseinformation med mysqldump-kommandoen.

#  mysqldump -u root -p --all-databases --master-data > /root/dbdump.db

Når du først har dumpet alle databaser, skal du nu oprette forbindelse til mysql som root-bruger og unlcok-tabeller.

mysql> UNLOCK TABLES;
mysql> quit;

Upload database dump-filen på Slave Server (192.168.1.2) ved hjælp af SCP-kommandoen.

scp /root/dbdump.db [email :/root/

Det er det, vi med succes har konfigureret Master-serveren, lad os gå videre til fase II-sektionen.

Fase II: Konfigurer slave-server (192.168.1.2) til replikering

I fase II udfører vi installationen af MySQL, opsætter replikering og derefter verificerer replikering.

Hvis du ikke har MySQL installeret, skal du installere det ved hjælp af YUM-kommandoen.

# yum install mysql-server mysql

Åbn my.cnf konfigurationsfil med VI editor.

# vi /etc/my.cnf

Tilføj følgende poster under [mysqld] sektionen, og glem ikke at erstatte IP-adressen på Master-serveren, tecmint med databasenavn osv., Som du gerne vil replikere med Master.

server-id = 2
master-host=192.168.1.1
master-connect-retry=60
master-user=slave_user
master-password=yourpassword
replicate-do-db=tecmint
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

Importer nu dumpfilen, som vi eksporterede i tidligere kommando, og genstart MySQL-tjenesten.

# mysql -u root -p < /root/dbdump.db
# /etc/init.d/mysqld restart

Log ind på MySQL som rootbruger og stop slaven. Fortæl derefter slaven, hvor den skal lede efter Master-logfil, at vi har skrevet ned på master med SHOW MASTER STATUS; kommando som File (mysql-bin.000003) og Position (11128001) numre. Du skal ændre 192.168.1.1 til IP-adressen på Master Server og ændre brugeren og adgangskoden i overensstemmelse hermed.

# mysql -u root -p
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=11128001;
mysql> slave start;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.1
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 12345100
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 11381900
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: tecmint
          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: 12345100
              Relay_Log_Space: 11382055
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

Bekræftelse af MySQL-replikering på Master og Slave Server

Det er virkelig meget vigtigt at vide, at replikeringen fungerer perfekt. Opret tabel på Master-server og indsæt nogle værdier i den.

mysql> create database tecmint;
mysql> use tecmint;
mysql> CREATE TABLE employee (c int);
mysql> INSERT INTO employee (c) VALUES (1);
mysql> SELECT * FROM employee;
+------+
|  c  |
+------+
|  1  |
+------+
1 row in set (0.00 sec)

Bekræftelse af SLAVE ved at køre den samme kommando vil den også returnere de samme værdier i slaven.

mysql> use tecmint;
mysql> SELECT * FROM employee;
+------+
|  c  |
+------+
|  1  |
+------+
1 row in set (0.00 sec)

Det er det, endelig har du konfigureret MySQL Replication i et par enkle trin. Flere oplysninger findes i MySQL Replication Guide.