Replicación de servidor maestro-esclavo de base de datos MySQL

¿Por qué la replicación maestro-esclavo

En términos generales, si la lectura y escritura de la base de datos se operan en el mismo servidor de base de datos, el rendimiento del sistema empresarial se reducirá.
Para mejorar el rendimiento del sistema empresarial y optimizar la experiencia del usuario, se puede usar la replicación maestro-esclavo (separación de lectura y escritura) para reducir la carga en la base de datos principal.
Y si la base de datos principal está inactiva, el sistema empresarial se puede cambiar rápidamente a la base de datos secundaria, lo que puede evitar la pérdida de datos.
Inserte la descripción de la imagen aquí

Tipos de replicación maestro-esclavo

La replicación basada en
instrucciones (predeterminada) ejecuta la misma instrucción
en el servidor maestro y ejecuta la misma instrucción desde el servidor. La replicación basada en filas replica
el contenido modificado en el servidor esclavo
.
Una vez que la replicación de tipo mixto descubre que la replicación basada en instrucciones no se puede replicar con precisión, utilizará Copia de línea

Diagrama esquemático del proceso de replicación maestro-esclavo

Inserte la descripción de la imagen aquí

¡Dale! ¡Mostrar! !

Tres máquinas virtuales
Servidor maestro: 20.0.0.4
Servidor esclavo 01: 20.0.0.5
Servidor esclavo 02: 20.0.0.6
Hay una escritura antes de la instalación de MySQL, puede leer el
enlace aquí

Tres servidores cierran el firewall

setenforce 0
iptables -F

Configurar el servidor principal

配置主配置文件
[root@master mysql]# vim /etc/my.cnf
[mysqld]
…省略部分…
server-id = 1
log_slave_updates = true
log-bin = master-bin
[root@master mysql]# systemctl restart mysqld

[root@master mysql]# mysql -u root -p
Enter password: 
# *.* 指的是 全部数据库.所有表,slaveuser 是从服务器登录用的账户
mysql> grant replication slave on *.* to 'slaveuser'@'20.0.0.%' identified by
'123123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

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

#查看从服务器读取位置,我这边读取的是 601
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      601 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Configurar el servidor esclavo

Ambos tienen que configurarse, solo demuestro uno

[root@slave01 ~]# vim /etc/my.cnf
[mysqld]
…省略部分…
server-id = 12   ##三台服务器得各不一样,我另一台配的13
relay-log=relay-log-bin   ##二进制日志文件名
relay-log-index=slave-relay-bin.index
[root@slave01 ~]# systemctl restart mysqld

[root@slave01 ~]# mysql -u root -p
Enter password: 

##master_host指向主服务器IP,master_user只想刚刚创建的用户,master_log_pos指向刚刚得位置,我的是306
mysql> change master to master_host='20.0.0.4',master_user='slaveuser',master_password='123123',master_log_file='master-bin.000001',master_log_pos=601;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#启动从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

#查看 slave 状态
mysql> show slave status\G;
             Master_Host: 20.0.0.4
             Master_User: slaveuser
             Slave_IO_Running: Yes   ##有下面两条差不多就ok了
             Slave_SQL_Running: Yes

Probar la replicación maestro-esclavo

Cree una base de datos y una tabla en el servidor principal para verificar la sincronización

mysql> create database happy;
Query OK, 1 row affected (0.00 sec)

mysql> use happy;
Database changed

mysql> create table kaixin(id int(2) primary key auto_increment,xinqing varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into kaixin values(1,'高兴');
Query OK, 1 row affected (0.01 sec)

mysql> select * from kaixin;
+----+---------+
| id | xinqing |
+----+---------+
|  1 | 高兴    |
+----+---------+
1 row in set (0.00 sec)

Verificar de la base de datos

mysql> use happy;
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> select * from kaixin;
+----+---------+
| id | xinqing |
+----+---------+
|  1 | 高兴    |
+----+---------+
1 row in set (0.00 sec)

Supongo que te gusta

Origin blog.csdn.net/Ora_G/article/details/108245885
Recomendado
Clasificación