Configuración maestro-esclavo de MySQL sin tiempo de inactividad ni bloqueo de tabla

1. configuración maestra

1. my.cnfConfiguración de la biblioteca principal

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=100 #设置server-id,设置为当前ip的最后一个段的数字,这样不会乱
binlog-do-db=sakzss #需要同步的数据库,不在内的不同步。(不添加这行表示同步所有)
binlog-ignore-db=performance_schema

Una vez completada la configuración, reinicie mysql

2. Configurar usuario mysql

  1. Configurar usuarios bajo la línea de comando mysql
CREATE USER 'slave'@'%' IDENTIFIED BY '密码';#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';#分配权限
flush privileges;   #刷新权限
  1. Ver estado maestro
SHOW MASTER STATUS;

2. Configuración desde la biblioteca

Docker crea rápidamente un nuevo comando de biblioteca esclava

docker run -p 3307:3306 --name mysql-xxx -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxx -d mysql:5.7
  1. Configurar my.cnflos ajustes desde la identificación de la biblioteca
[mysqld]
server-id=110 #设置server-id,192.168.0.110
slave_skip_errors=1062 #跳过主键冲突 Duplicate entry
gtid_mode=on #开启gtid
enforce_gtid_consistency=on
#如果需要同步的数据库名相同
replicate-do-db=zxkang_sync  #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。

#如果需要同步的数据库名不同
replicate-rewrite-db=zxkang_sync->test  # master 上的数据库名为 zxkang_sync , slave 上的库名为 test

replicate-ignore-db=mysql  #不同步mysql系统数据库
slave-skip-errors = all   #跳过所有的错误错误,继续执行复制操作

Una vez completada la configuración, reinicie el servicio.

  1. Configurar permisos en mysql
CHANGE MASTER TO MASTER_HOST='192.168.0.110', MASTER_USER='slave', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000014', MASTER_LOG_POS=154;

3. Bloquee la tabla maestra y exporte los datos.

  1. Datos de exportación de la tabla de bloqueo del nodo maestro:
mysql>  FLUSH  TABLES WITH READ LOCK; #锁定表
mysql> show master  status; #显示position
mysqldump   -uroot   -p   --databases xxx   > xxx.sql
  1. Importar datos bajo el nodo esclavo
mysql> source xxx.sql; #导入数据
CHANGE MASTER TO MASTER_HOST='192.168.0.110', MASTER_USER='slave', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000014', MASTER_LOG_POS=154; #slave节点重置position
mysql> start slave; # 启动同步任务
mysql> SHOW SLAVE STATUS\G;#检查同步状态
  1. desbloqueo del nodo maestro
UNLOCK  TABLES;

3. Sincronizar datos sin bloquear el maestro

1. datos maestros de exportación

La clave para lograr una configuración maestro-esclavo sin tiempo de inactividad son los dos parámetros siguientes:

  • –transacción única
  • -datos maestros

El parámetro master-data se utiliza principalmente para registrar binlog_file y pos de la biblioteca principal y tiene dos valores, a saber:

1: Durante el proceso mysqldump, el archivo binlog y la información pos se registran en sql y no se registran en forma de información de comentarios, por lo que esta parte de la información se ejecuta automáticamente cuando se realiza la importación.

2: Durante el proceso mysqldump, registre la información binlogfile y pos en sql en forma de comentarios.

El parámetro de transacción única garantiza la coherencia de los datos al enviar una sola transacción. Al agregar la instrucción START TRANSACTION después de FLUSH TABLES CON READ LOCK, se inicia una sola transacción. El bloqueo se aplica en este momento solo para obtener el archivo binlog preciso en los datos maestros. e información pos. Una vez abierta la transacción, el bloqueo se ha liberado, por lo que tiene poco impacto en el negocio.

A través de los dos parámetros anteriores, puede obtener información binlogfile y pos precisa sin bloquear la tabla durante mucho tiempo, completando así la configuración maestro-esclavo.

mysqldump -uroot -p -h192.168.0.100 --single-transaction --master-data=2 --databases xxx xxx > databases.sql

2.datos de importación de esclavos

source databases.sql

La vista master_log_filey master_log_poslos parámetros se exportan a través del parámetro master-data=2, que se encuentra al principio del archivo sql. Controlar

head -n 50 databases.sql

Configure los parámetros maestro-esclavo desde la biblioteca:

change master to master_host='xxx', master_user='xxx', master_password='xxx', master_port=3306, master_log_file='mysql-bin.000252', master_log_pos=001;

3. Habilite la sincronización de esclavos

start slave
show slave status\G; #查看从库状态

4. Configure la biblioteca esclava en solo lectura.

mysql> show global variables like "%read_only%";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.03 sec)

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

mysql> show global variables like "%read_only%";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | ON    |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)

Otros comandos y operaciones

El esclavo se detiene o se reinicia:

reset slave;
stop slave;

Supongo que te gusta

Origin blog.csdn.net/quuqu/article/details/125896927
Recomendado
Clasificación