Tabla de contenido
Prefacio
La replicación maestro-esclavo de MySQL puede replicar datos desde un servidor de base de datos MySQL (servidor maestro) a uno o más servidores de base de datos MySQL (servidores esclavos).
Las ventajas de la replicación de MySQL incluyen:
- Solución de escalamiento horizontal: distribuya la carga entre varias copias para mejorar el rendimiento. En este entorno, todas las escrituras y actualizaciones deben realizarse en el servidor de origen de la replicación (servidor primario). Sin embargo, la lectura puede ocurrir en una o más réplicas (servidores esclavos). Este modelo puede mejorar el rendimiento de escritura (porque la fuente está dedicada a las actualizaciones), mientras que puede aumentar significativamente las velocidades de lectura en más y más réplicas.
- Seguridad de los datos: debido a que los datos se han copiado en la copia y la copia puede suspender el proceso de copia, los servicios de respaldo se pueden ejecutar en la copia sin destruir los datos de origen correspondientes.
- Análisis: se pueden crear datos en tiempo real en la fuente y el análisis de la información se puede realizar en la copia sin afectar el rendimiento de la fuente.
- Distribución remota de datos: puede usar la replicación para crear copias locales de datos para que las utilicen sitios remotos sin tener que acceder permanentemente a la fuente.
Combate real
A continuación, usaré dos máquinas virtuales para implementar la replicación maestro-esclavo de MySQL
主虚拟机:192.168.91.128
从虚拟机:192.168.91.130
Requisito previo: Ambas máquinas virtuales tienen MySQL instalado, mi versión de MySQL es 5.7.24 y se puede hacer ping a las redes de las dos máquinas virtuales.
Configuración del servidor principal
1. Modifique el archivo de configuración de MySQL en el servidor primario, abra el archivo de registro binario y configure el ID del servidor
Edite el archivo de configuración de MySQL. El archivo de configuración predeterminado de MySQL de Linux es my.cnf, que generalmente se encuentra en / etc /
vi /etc/my.cnf
Agregue contenido de la siguiente manera:
#在配置文件的[mysqld]部分添加以下两个配置
[mysqld]
#设置server-id,这个server-id主从服务器必须不一样
server-id=1
#开启二进制日志,mysql-bin为日志名称,你可以自定义名称
log-bin=mysql-bin
Nota: si no sabe dónde está el archivo my.cnf, puede usar el comando find / -name my.cnf para buscar
Además de las dos configuraciones necesarias anteriores, también podemos establecer sync_binlog, innodb_flush_log_trx_commit y otras configuraciones de acuerdo con nuestra situación real
Debe reiniciar el servidor después de modificar la configuración
2. Agregue una cuenta para la sincronización en el servidor principal.
El comando es el siguiente:
mysql> grant replication slave on *.* to 'slave'@'%' identified by 'slave';
Descripción del comando
replication slave:表示分配的权限,replication slave为复制的权限
*.*:表示可以操作哪些数据库,*.*表示所有数据库的所有表
slave@'%':slave表示这个账号的名称,'%'为在哪些网络可以使用,'%'为可以在所有网络上使用,除了使用'%',我们还可以指定某个ip,比如192.168.91.128
identified by后填的是密码
3. Verifique el último archivo de registro binario y el punto de posición del servidor maestro, regístrelo y utilícelo en el servidor esclavo
mando
mysql> show master status;
Ejemplos:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 438 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.03 sec)
La replicación maestro-esclavo solo replicará las modificaciones después de la configuración maestro-esclavo, por lo que si hay datos en la base de datos maestra antes, también necesitamos copiar los datos a la base de datos esclava. La forma más fácil es usar mysqldump para crear un volcado de todas las bases de datos a replicar.
Para el uso de mysqldump, puede consultar:
https://blog.csdn.net/qq_36551991/article/details/111409411 .
Configurar desde el servidor
1. Modifique el archivo de configuración de MySQL en el servidor esclavo y configure el ID del servidor El registro binario se puede abrir o no en el servidor esclavo.
mando:
vi /etc/my.cnf
contenido:
[mysqld]
#配置server-id,server-id必须与主服务器和其他从服务器的不一样,即需要唯一
server-id=2
Además del ID del servidor, que debe configurarse, la otra configuración depende de la situación real
2. Configurar la replicación maestro-esclavo
El comando es el siguiente
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.91.128',
-> MASTER_USER='slave',
-> MASTER_PASSWORD='slave',
-> MASTER_LOG_FILE='mysql-bin.000008',
-> MASTER_LOG_POS=438;
Descripción del comando:
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即我们在主服务器show master status命令得到的file参数
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即我们在主服务器show master status命令得到的Position 参数
3. Una vez completada la configuración, inicie la replicación maestro-esclavo:
mando:
start slave;
Ejemplo:
mysql> start slave;
4. Compruebe si la configuración es correcta
命令:show slave status\G
Ejemplos:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.91.128
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 438
Relay_Log_File: local-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Depende principalmente de si los estados Slave_IO_Running y Slave_SQL_Running de la información devuelta son Sí, y si ambos son Sí, es normal (Slave_IO_Running y Slave_SQL_Running representan los dos subprocesos de replicación de MySQL)
Probar la replicación maestro-esclavo
Creamos una nueva tabla en MySQL del servidor maestro e insertamos datos para ver si el servidor esclavo se replicará
#在主数据库创建个新表,并插入一条数据
mysql> CREATE TABLE test_table( id INT NOT NULL AUTO_INCREMENT, name varchar(50), PRIMARY KEY(id));
Query OK, 0 rows affected (0.23 sec)
mysql> insert into test_table(name) values('h');
Query OK, 1 row affected (0.15 sec)
Ver el servidor esclavo en Navicat, si la nueva tabla y los datos correspondientes aparecen en el servidor esclavo, la replicación maestro-esclavo es exitosa