1. configuración maestra
1. my.cnf
Configuració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
- Configurar usuarios bajo la línea de comando mysql
CREATE USER 'slave'@'%' IDENTIFIED BY '密码';#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';#分配权限
flush privileges; #刷新权限
- 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
- Configurar
my.cnf
los 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.
- 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.
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
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;#检查同步状态
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_file
y master_log_pos
los 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;