replicación maestro-esclavo de mysql, separación de lectura y escritura, replicación de doble maestro y doble esclavo, separación de lectura y escritura

Replicación maestro-esclavo de MySQL

Descripción general

       La replicación maestro-esclavo consiste en transferir los datos de la base de datos maestra al servidor de la base de datos esclava a través del registro binario (binlog) y luego volver a ejecutar estos registros en la base de datos esclava, de modo que los datos de la base de datos esclava y la base de datos maestra están sincronizados.

Insertar descripción de la imagen aquí

principio

Insertar descripción de la imagen aquí

para construir

Preparar dos servidores

Maestro: 192.168.40.137

Esclavista: 192.168.40.138

1. Apague el firewall

[root@mysql-master ~]# systemctl stop firewalld
[root@mysql-master ~]# systemctl disable firewalld
[root@mysql-slaver ~]# systemctl stop firewalld
[root@mysql-slaver ~]# systemctl disable firewalld

2.Instalar mysql

Instale mysql en ambos servidores y use ps para verificar si la instalación se realizó correctamente.

[root@mysql-master ~]# ps aux|grep mysqld
[root@mysql-slaver ~]# ps aux|grep mysqld

3. Configuración de la biblioteca principal

Modifique el archivo de configuración de la biblioteca principal /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0

Reinicie el servidor MySQL

[root@mysql-master ~]# systemctl restart mysqld

Inicie sesión en MySQL, cree una cuenta de conexión remota y otorgue permisos de replicación maestro-esclavo

# 创建root用户,并设置密码,该用户可以在任意主机连接mysql服务
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 为'root'@'%'用户分配主从复制权限
mysql> grant replication slave on *.* to 'root'@'%';

Ver coordenadas binarias

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000004 |      377 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

4. Configuración desde biblioteca

Modifique el archivo de configuración de la biblioteca esclava /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1

Reinicie el servidor MySQL

[root@mysql-master ~]# systemctl restart mysqld

Inicie sesión en MySQL y establezca la configuración de la base de datos principal

mysql> change replication source to source_host="192.168.40.137",source_user="root",source_password='123456',source_log_fike='binlog.000004',source_log_pos=377;

Habilitar sincronización

mysql> start replica;

Ver el estado de replicación maestro-esclavo

mysql> show replica status\G;

Insertar descripción de la imagen aquí

5. Prueba

Cree una base de datos, luego cree una tabla, luego inserte datos para ver

mysql> CREATE DATABASE MyDatabase;
Query OK, 1 row affected (0.01 sec)

mysql> USE MyDatabase;
Database changed
mysql> CREATE TABLE MyTable (
    ->   id INT NOT NULL AUTO_INCREMENT,
    ->   name VARCHAR(50) NOT NULL,
    ->   age INT NOT NULL,
    ->   PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO MyTable (name, age) VALUES
    ->   ('张三', 20),
    ->   ('李四', 25),
    ->   ('王五', 30);
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql>INSERT INTO MyTable (name, age) VALUES
    ->   ('张三', 20),
    ->   ('李四', 25),
    ->   ('王五', 30);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> update MyTable set age=20;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 6  Changed: 2  Warnings: 0

Insertar descripción de la imagen aquí

MyCat implementa la separación de lectura y escritura

       Separación de lectura y escritura significa separar las operaciones de lectura y escritura en la base de datos para que correspondan a diferentes servidores de bases de datos. La base de datos principal proporciona operaciones de escritura y la base de datos esclava proporciona operaciones de lectura, lo que puede reducir eficazmente la presión sobre una sola base de datos.
Insertar descripción de la imagen aquí

Preparación del entorno de un maestro y un esclavo.

Compruebe si el entorno de replicación maestro-esclavo del maestro y esclavo anterior es normal. Del mismo modo, si ocurre el siguiente efecto, es normal.

Insertar descripción de la imagen aquí

Configuración

MyCat controla la separación de lectura y escritura y el equilibrio de carga de la base de datos backend mediante el atributo balance de la etiqueta datahost en el archivo esquema.xml.

valor del saldo
Insertar descripción de la imagen aquí

1. Modifique el archivo esquema.xml y especifique la biblioteca lógica y la IP del host de lectura y escritura.

 <!-- 新建一个逻辑库 dataNode为dn4-->
        <schema name="DB_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn4" >
        </schema>
        <dataNode name="dn4" dataHost="dhost4" database="db1" />
        <!--新建一个主机dhost4 负载均衡策略为1-->
        <dataHost name="dhost4" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- 写操作对应的主机-->
                <writeHost host="hostM1" url="jdbc:mysql://192.168.40.137:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                 <!-- 读操作对应的主机-->
                        <readHost host="hostS1" url="jdbc:mysql://192.168.40.138:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                        </readHost>
                </writeHost>
        </dataHost>

2. Agregue permisos de usuario para acceder a la base de datos en el archivo server.xml

Insertar descripción de la imagen aquí

3. Reinicie MyCat

[root@mysql-master mycat]# bin/mycat restart

Vista de prueba

Insertar descripción de la imagen aquí

Debido a que la replicación maestro-esclavo está configurada, las modificaciones a los datos en la base de datos esclava no afectarán a la base de datos maestra, por lo tanto, modifique los datos en la base de datos esclava y consulte la base de datos maestra para ver si los datos consultados provienen de la base de datos esclava o de la base de datos esclava. base de datos maestra.

Insertar descripción de la imagen aquí

Se puede ver que la base de datos esclava ha modificado los datos, y lo que se recupera son los datos de la base de datos esclava, dándose cuenta de la separación de lectura y escritura.

Introducción y preparación del entorno de doble maestro y doble esclavo.

1. Introducción

       Un host Master1 se utiliza para manejar todas las solicitudes de escritura, y su esclavo Slave1 y otro host Master2 y su esclavo Slave2 son responsables de todas las solicitudes de lectura. Cuando el host Master1 deja de funcionar, el host Master2 es responsable de escribir las solicitudes, y Master1 y Master2 sirven como máquinas de respaldo entre sí.

Insertar descripción de la imagen aquí

2. Preparación del entorno

servidor instalar software ilustrar
192.168.40.137 JDK, MyCat, MySQL Servidor intermedio MyCat
192.168.40.138 mysql Maestro1
192.168.40.139 mysql esclavo1
192.168.40.170 mysql Maestro2
192.168.40.171 mysql esclavo2

Apague todos los cortafuegos

systemctl stop firewalld
systemctl disable firewalld

Configuración

Insertar descripción de la imagen aquí

1. Configuración de la biblioteca principal (Master1)

Modificar el archivo de configuración /etc/my.cnf

# 主库配置
# mysql服务器id,保证整个集群环境中唯一
server-id=1
# 指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制文件
log-slave-updates

Reiniciar servicio

systemctl restart mysqld

2. Configuración de la biblioteca principal (Master2)

Modificar el archivo de configuración /etc/my.cnf

# 主库配置
# mysql服务器id,保证整个集群环境中唯一
server-id=3
# 指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制文件
log-slave-updates

Reiniciar servicio

systemctl restart mysqld

3. Cree una cuenta para la replicación maestro-esclavo.

Tanto Master1 como Master2 se ejecutan

# 创建root用户,并设置密码,该用户可以在任意主机连接mysql服务
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 为'root'@'%'用户分配主从复制权限
mysql> grant replication slave on *.* to 'root'@'%';

Ver las coordenadas binarias de las dos bibliotecas principales.

mysql> show master status;

Maestro1

mysql> show master status;
+---------------+----------+----------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB   | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+----------------+------------------+-------------------+
| binlog.000004 |      659 | db01,db02,db03 |                  |                   |
+---------------+----------+----------------+------------------+-------------------+
1 row in set (0.00 sec)

Maestro2

mysql> show master status;
+---------------+----------+----------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB   | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+----------------+------------------+-------------------+
| binlog.000002 |      659 | db01,db02,db03 |                  |                   |
+---------------+----------+----------------+------------------+-------------------+
1 row in set (0.00 sec)

4. Configuración del esclavo (Esclavo1)

Modifique el archivo de configuración de la biblioteca esclava /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=2

Reinicie el servidor MySQL

systemctl restart mysqld

5. Configuración del esclavo (Slave2)

Modifique el archivo de configuración de la biblioteca esclava /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=4

Reinicie el servidor MySQL

systemctl restart mysqld

6. Configure las dos bibliotecas esclavas para asociarlas con la biblioteca principal.

Ejecutar en Slave1

mysql> change master to master_host="192.168.40.138",master_user="root",master_password='123456',master_log_file='binlog.000004',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

iniciar repositorio

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

Ver el estado de replicación maestro-esclavo

mysql> show slave status\G;

Insertar descripción de la imagen aquí


Ejecutar en Slave2

mysql> change master to master_host="192.168.40.170",master_user="root",master_password='123456',master_log_file='binlog.000002',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

iniciar repositorio

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

Ver el estado de replicación maestro-esclavo

mysql> show slave status\G;

Insertar descripción de la imagen aquí

7. Cópiese entre sí entre las dos bibliotecas principales.

Master1 replica Master2 ,Ejecutado en Master1

mysql>  change master to master_host="192.168.40.170",master_user="root",master_password='123456',master_log_file='binlog.000002',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

Inicie la biblioteca esclava y verifique el estado de replicación maestro-esclavo

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G;

Insertar descripción de la imagen aquí


Master2 copia Master1 ,Ejecutado en Master2

mysql>  change master to master_host="192.168.40.138",master_user="root",master_password='123456',master_log_file='binlog.000004',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

Inicie la biblioteca esclava y verifique el estado de replicación maestro-esclavo

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G;

Insertar descripción de la imagen aquí

8. Prueba

Crear base de datos DB01:

CREATE DATABASE db01;

Seleccione la base de datos DB01:

USE db01;

Cree una mytabletabla nombrada con 3 campos:

CREATE TABLE mytable (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL,
    address VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

mytableInserte 5 datos chinos en la tabla :

INSERT INTO mytable (name, age, address) VALUES
    ('张三', 20, '北京'),
    ('李四', 25, '上海'),
    ('王五', 30, '广州'),
    ('赵六', 35, '深圳'),
    ('钱七', 40, '成都');

Después de una prueba sencilla, es posible lograr funciones doble maestro y doble esclavo.

Configuración de separación de lectura y escritura de maestro dual y esclavo dual

       La separación de lectura y escritura y el equilibrio de carga de la base de datos de la consola MyCat están controlados por el atributo balance de la etiqueta dataHost en el archivo esquema.xml y el cambio automático se completa en caso de falla a través de writeType y switchType.

Modificar el archivo esquema.xml de MyCat

   <!--因为只设置了db01这个库,以它为例-->
        <dataNode name="dn4" dataHost="dhost4" database="db01" />
        <!--新建一个主机dhost4 负载均衡策略为1-->
        <dataHost name="dhost4" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- 写操作对应的主机 Master1 - Slave1-->
                <writeHost host="Master1" url="jdbc:mysql://192.168.40.138:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                 <!-- 读操作对应的主机-->
                        <readHost host="Slave1" url="jdbc:mysql://192.168.40.139:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                        </readHost>
                </writeHost>
                <!-- Master2 - Slave2 -->
                <writeHost host="Master2" url="jdbc:mysql://192.168.40.170:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                 <!-- 读操作对应的主机-->
                        <readHost host="Slave2" url="jdbc:mysql://192.168.40.171:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                        </readHost>
                </writeHost>
        </dataHost>

Insertar descripción de la imagen aquí

Reiniciar mi gato

[root@mycat mycat]# bin/mycat restart

Inicia sesión para ver

[root@mycat mycat]# mysql -h 192.168.40.137 -P 8066 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.3-release-20210913163959 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show databases;
+----------+
| DATABASE |
+----------+
| DB01     |
| DB_RW    |
+----------+
2 rows in set (0.00 sec)

mysql> use DB_RW;
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> show tables;
+----------------+
| Tables_in_db01 |
+----------------+
| mytable        |
+----------------+
1 row in set (0.02 sec)

Vista de prueba

       La prueba se puede realizar insertando datos para ver o dejando que Master1 cuelgue, y luego si se puede iniciar Master2 para lograr alta disponibilidad. La prueba es relativamente simple, por lo que no publicaré imágenes.

Soluciones a problemas menores de red.

Cancele que NetworkManager se haga cargo de la configuración de red:

nmcli n off

Configure NetworkManager para que se haga cargo de la configuración de red:

nmcli n on

Supongo que te gusta

Origin blog.csdn.net/qq_52589631/article/details/131138964
Recomendado
Clasificación