Directorio de artículos
¿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.
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
¡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)