Replicação GTID mestre-escravo Mysql8.0

(1) O que é GTID

GTID é chamado de identificadores de transações globais (identificadores de transações globais ). GTID é único e está associado a cada transação enviada no servidor principal. Se o cliente enviar a transação para o servidor principal, será atribuído a ele um novo GTID , GTID. É monotonicamente aumentando. Esse identificador não é apenas exclusivo para o banco de dados primário, mas também exclusivo em todos os servidores em uma determinada topologia de replicação. As informações GTID armazenadas na tabela mysql.gtid_executed do banco de dados , a tabela contém uma linha para cada uma das quais representa GTID ou grupo GTID , o UUID do servidor de origem e o início e fim da transação, o ID do grupo .

 

Se uma transação com um determinado GTID iniciou a execução no servidor, mas não foi confirmada ou revertida, qualquer tentativa de iniciar uma transação simultânea no servidor com o mesmo GTID será bloqueada. O servidor não inicia a execução de transações simultâneas nem devolve o controle ao cliente. Após a primeira tentativa de confirmar ou reverter uma transação, as sessões simultâneas bloqueadas no mesmo GTID podem continuar. Se a reversão for tentada pela primeira vez, uma sessão simultânea continuará tentando a transação e todas as outras sessões simultâneas bloqueadas no mesmo GTID permanecerão bloqueadas. Se a primeira tentativa for feita, todas as sessões simultâneas irão parar de bloquear e pular automaticamente todas as instruções da transação.

(2) Use GTID para configurar a replicação

(1) Ligue o GTID (mestre e escravo precisam ser configurados)

Para habilitar a replicação baseada em GTID, você deve definir a variável gtid_mode como ON e habilitar a variável enforce_gtid_consistency como ON .

vim /etc/my.cnf 

[mysqld]

# Habilitar GTID

gtid_mode = ON

forçar-gtid-consistência = ON

Depois que a configuração for concluída, reinicie o banco de dados para que tenha efeito. Você pode usar show master status para ver o valor gtid

(3) Teste para abrir a transação, confirmar a transação e reverter

mysql> inserir valores de classe (1, 'caderno ', ' Pequim ');

Consulta OK, 1 linha afetada (0,11 s) 

mysql> inserir valores de classe (2, 'CPU', '天津');

Consulta OK, 1 linha afetada (0,01 seg)

mysql> inserir valores de classe (3, 'display ', ' Shanghai ');

Consulta OK, 1 linha afetada (0,01 seg)

mysql> select * from class;

+ ---- + ----------- + --------- +

| id | pro_name | endereço |

+ ---- + ----------- + --------- +

| 1 | Caderno     Pequim     |

| 2 | CPU | Tianjin     |

| 3 | Exibir     Xangai     |

+ ---- + ----------- + --------- +

3 linhas em conjunto (0,00 s)

 

mysql> iniciar transação;   

Consulta OK, 0 linhas afetadas (0,00 s)

 

mysql> inserir valores de classe (4, 'placa de vídeo ', ' Hunan ');

Consulta OK, 1 linha afetada (0,01 seg)

 

mysql> select * from class;

+ ---- + ----------- + --------- +

| id | pro_name | endereço |

+ ---- + ----------- + --------- +

| 1 | Caderno     Pequim     |

| 2 | CPU | Tianjin     |

| 3 | Exibir     Xangai     |

| 4 | Placa gráfica       Hunan     |

+ ---- + ----------- + --------- +

4 linhas em conjunto (0,00 s)

 

mysql> rollback; #rollback

Consulta OK, 0 linhas afetadas (0,01 seg)

Na consulta, não há dados ID4 , contanto que não haja transação imediata, eles podem ser revertidos

mysql> select * from class;

+ ---- + ----------- + --------- +

| id | pro_name | endereço |

+ ---- + ----------- + --------- +

| 1 | Caderno     Pequim     |

| 2 | CPU | Tianjin     |

| 3 | Exibir     Xangai     |

+ ---- + ----------- + --------- +

3 linhas em conjunto (0,00 s)

图片


(4) Depois que gtid é ligado , o banco de dados precisa ser executado antes que Executed_Gtid_Set tenha um valor

图片

(1)创建用于复制的用户()

每个从服务器都需要使用MySQL的用户和密码连接到主服务器上,因此需要在主服务器上创建MySQL的用户,用于进行复制操作。可以为每个从库单独创建一个账号,也可以使用同一个账号。账号需具有“replication slave”权限

mysql> CREATE USER 'repl'@'192.168.20.%' IDENTIFIED by '123456';

Query OK, 0 rows affected (0.02 sec)

mysql>  grant replication slave on *.* to 'repl'@'192.168.20.%';

Query OK, 0 rows affected (0.02 sec)

(2)初始化从库()

备份主数据库,直接在备库节点执行

[root@slavedbdb ~]# mysqldump  -uroot -p123456 -h 192.168.20.40 -p3306 --single-transaction  --master-data=2 --flush-logs --flush-privileges --events --routines  --all-databases > /root/master.sql

[root@slavedb ~]# mysql -uroot -p123456 < /root/master.sql

(3)将从数据库添加到复制环境()

注意:这里和使用二进制日志文件复制不同,使用GTID时,MySQL会自动查找位置

mysql> CHANGE MASTER TO

    -> master_host='192.168.20.40',

    -> master_port=3306,

    -> master_user='repl',

    -> master_password='123456',

    -> MASTER_AUTO_POSITION = 1;

Query OK, 0 rows affected, 2 warnings (0.00 sec)

启动从库复制

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

(4)确认主从复制

在从库执行show slave status 

 

mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.20.40

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 40

              Master_Log_File: master-bin.000001

          Read_Master_Log_Pos: 587

               Relay_Log_File: slavedb-relay-bin.000002

                Relay_Log_Pos: 4

        Relay_Master_Log_File: master-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error: 


相关阅读:

1、Mysqlbinlog日志的清理与切换

2、mysqldump+binlog恢复被删除的数据

3、Mysql8.0 主从复制

4、Mysql8.0安装实战


请 扫 描 关 注

图片


Acho que você gosta

Origin blog.51cto.com/15127516/2657667
Recomendado
Clasificación