Replicación maestro-esclavo de MySQL (2): la construcción de una arquitectura maestro-esclavo

Replicación maestro-esclavo de MySQL (2): la construcción de una arquitectura maestro-esclavo

El principio de funcionamiento de la replicación maestro-esclavo de MySQL es el siguiente:
(1) La replicación maestro-esclavo entre servidores Mysql se basa en el registro binario. El servidor maestro utiliza el registro binario para registrar los cambios en la base de datos. El servidor esclavo lee y ejecuta el archivo de registro para mantener el equilibrio. Los datos del servidor principal son consistentes.
(2) Cuando se utiliza el registro binario, todas las operaciones del servidor maestro se registrarán y luego el servidor esclavo recibirá una copia del registro. El servidor esclavo puede especificar qué tipo de evento (insertar datos, actualizar datos, eliminar datos) en el registro se ejecuta, y todas las declaraciones en el registro se ejecutarán de forma predeterminada.
(3) Cada servidor esclavo registrará información sobre el registro binario (nombre de archivo y declaraciones procesadas), lo que significa que diferentes servidores esclavos pueden ejecutar diferentes partes del mismo registro binario, y el servidor esclavo puede conectarse o desconectarse en cualquier momento Conexión al servidor.
(4) El servidor maestro y cada servidor esclavo deben configurarse con un ID de servidor único. Cada servidor esclavo necesita usar la instrucción CHANGE MASTER TO para configurar la dirección IP del servidor maestro que se conectará, el nombre del archivo de registro y el registro. Ubicación y otra información.

Los pasos de la configuración de la replicación maestro-esclavo de MySQL son los siguientes:

1. Entorno del sistema

Versión de MySQL: MySQL5.7

Versión de Linux: CentOS7.0

Dirección de la base de datos principal: 192.168.1.11

Dirección de la base de datos esclava: 192.168.1.12; 192.168.1.13

Dos, configure la base de datos principal

1. Modifique el archivo de configuración

Busque el archivo de configuración my.cnf de la base de datos principal y agregue el siguiente contenido en la sección [mysqld]:

[root@Mysql11 ~]# vim /etc/my.cnf

[mysqld]
.........
server-id=1  ### 服务器ID
log-bin=mysql-bin  ### 开启binlog
binlog_format=mixed   ### binlog模式为mixed
### 在ROW模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,binlog日志会很大。这个行为可以通过binlog_row_image参数控制,该参数的取值如下:
### FULL(默认值):记录列的所有修改,即使字段没有发生变更也会记录。
### MINIMAL:只记录修改的列。
binlog_row_image=MINIMAL
## 在Row模式下,binlog只记录数据的改变。使用binlog_rows_query_log_events参数也可以记录SQL。参数的默认为值为FALSE,如果为true的情况下,会通过Rows Query Event事件来记录SQL。
binlog-rows-query-log_events=1
### 设置同步时需要忽略哪些数据库 
## 一般同步不要同步mysql库,用户名和密码信息在mysql数据库中
binlog-ignore-db=mysql
binlog-ignore-db=sys
........

Una vez completada la configuración, reinicie el servicio mysql y verifique la información del archivo de registro binlog:

[root@Mysql11 ~]# ll /var/lib/mysql/mysql-bin*
-rw-r-----. 1 mysql mysql   923 7月   3 23:19 /var/lib/mysql/mysql-bin.000001
-rw-r-----. 1 mysql mysql   266 7月   5 10:16 /var/lib/mysql/mysql-bin.index

2. Crea un usuario de copia

Cada servidor esclavo necesita un nombre de cuenta y una contraseña para conectarse al servidor maestro. Puede crear una cuenta para cada servidor esclavo o puede hacer que todos los servidores usen la misma cuenta. Esta cuenta puede ser utilizada por todas las direcciones IP bajo el segmento de red [192.168.1] y solo puede realizar la sincronización maestro-esclavo sin otros permisos.

mysql> set global validate_password_policy=low;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,authentication_string from mysql.user;
+-------------+---------------+-------------------------------------------+
| host        | user          | authentication_string                     |
+-------------+---------------+-------------------------------------------+
| localhost   | root          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost   | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost   | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| %           | wgx           | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 192.168.1.% | repl          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+---------------+-------------------------------------------+
5 rows in set (0.00 sec)

3. Exportar datos de la base de datos

(1) Antes de exportar la base de datos, bloquee la base de datos para evitar cualquier operación de escritura en la base de datos.

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)

mysql> use hist;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> drop table t1;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock

(2) Exportar todos los datos de la base de datos en la base de datos principal

[root@Mysql11 ~]# mysqldump -uroot -p123456 --all-databases --master-data=2 --events > /tmp/all_bak.sql

(3) Copie los datos de la base de datos maestra de respaldo a la base de datos esclava

[root@Mysql11 ~]# scp /tmp/all_bak.sql 192.168.1.12:/tmp/
[email protected]'s password: 
all_bak.sql                                          100%  834KB 833.7KB/s   00:00    
[root@Mysql11 ~]# 

(4) Desbloquear y ver información de registro binario

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000014 |      599 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Tres, configure la base de datos esclava

1. Modifique el archivo de configuración

Busque el archivo de configuración my.cnf de la base de datos esclava y agregue el siguiente contenido en la sección [mysqld]:

[root@Mysql11 ~]# vim /etc/my.cnf

[mysqld]
.........
server-id=2  ### 服务器ID,每个服务器上配置的server-id都必须不一致
relay-log=mysql-relay-log  ### 开启relay log
........

Nota: El servidor esclavo también puede configurar la opción log-bin según sea necesario.

Una vez completada la configuración, reinicie el servicio mysql y verifique la información del archivo de registro de retransmisión:

[root@localhost ~]# ll /var/lib/mysql/mysql-relay-log*
-rw-r-----. 1 mysql mysql 177 7月   5 11:00 /var/lib/mysql/mysql-relay-log.000001
-rw-r-----. 1 mysql mysql  25 7月   5 11:00 /var/lib/mysql/mysql-relay-log.index

2. Importe los datos en el servidor principal.

[root@localhost ~]# mysql -uroot -p123456 < /tmp/all_bak.sql 

(1) Ver la información de la base de datos del servidor principal

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
6 rows in set (0.00 sec)

(2) Ver la información de la base de datos del servidor esclavo

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
6 rows in set (0.00 sec)

3. Configure los parámetros de sincronización maestro-esclavo

Ejecute los siguientes comandos en el servidor esclavo:

--master_log_file和master_log_pos两个参数的取值可以在主库导出数据时使用show master logs命令得到
--也可以在主库导出数据库时添加参数【--master-data=2】得到
change master to 
master_host='192.168.1.11',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000014',
master_log_pos=599;

4. Encienda el servicio desde la biblioteca (inicie IO y subprocesos SQL)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

5. Ver el estado de la replicación maestro-esclavo

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.11
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000014
          Read_Master_Log_Pos: 599
               Relay_Log_File: mysql-relay-log.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000014
--###############  Slave_IO_Running 和 Slave_SQL_Running 两个都为yes表示正常 #############
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
--#######################################################################################
              Replicate_Do_DB: 
          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: 599
              Relay_Log_Space: 527
              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: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 95cfc8eb-2d58-11ea-840b-000c296166d5
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

Cuatro, resultados de verificación

1. Realizar operaciones de datos en la biblioteca principal

Cree una tabla t222 en la base de datos hist e ingrese los datos

mysql> use hist;
Database changed
mysql> show tables;
+----------------+
| Tables_in_hist |
+----------------+
| course         |
| dept           |
| score          |
| stu            |
| t1             |
+----------------+
5 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> create table t222(id int auto_increment primary key,name char(20),age int);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t222(name,age) values('Jack',20);
Query OK, 1 row affected (0.02 sec)

mysql> insert into t222(name,age) values('Mary',21);
Query OK, 1 row affected (0.03 sec)

mysql> insert into t222(name,age) values('Tom',18);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t222;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Jack |   20 |
|  2 | Mary |   21 |
|  3 | Tom  |   18 |
+----+------+------+
3 rows in set (0.00 sec)

2. Ver información de datos de la biblioteca

mysql> use hist;
Database changed
mysql> show tables;
+----------------+
| Tables_in_hist |
+----------------+
| course         |
| dept           |
| score          |
| stu            |
| t1             |
| t222           |
+----------------+
6 rows in set (0.00 sec)

mysql> select * from t222;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Jack |   20 |
|  2 | Mary |   21 |
|  3 | Tom  |   18 |
+----+------+------+
3 rows in set (0.00 sec)

Si desea crear varias bibliotecas esclavas, el proceso de creación de otras bibliotecas esclavas es exactamente el mismo que el de la primera biblioteca esclava.

Supongo que te gusta

Origin blog.csdn.net/weixin_44377973/article/details/107136733
Recomendado
Clasificación