MySQL(二)GTID主从部署

目录

1、安装规划

IP 角色 端口
192.168.6.61 master 3406、33060
192.168.6.62 slave 3406、33060

先根据单实例部署方式在两台主机上分别部署好两个MySQL节点

2、配置主从

1. 主从原理

主从复制是依赖于 binlog 二进制日志,需要注意的是:

  • binlog 是属于 server 层次,各个引擎都有
  • redo log,undo log属于Innodb 引擎层次,用于保证事务性的

2. 主从复制原理

  • master 上的 binlogdump 线程,在 slave 正常连接的情况下,会将 binlog 二进制日志发送给 slave
  • binlog 二进制日志中记录了 master 上所有的更新操作
  • slave 上有个 I/O 线程,通过读取 master 上的 binlog ,写到自己的中继日志(delay log )中
  • salve 上有个 SQL 线程,通过重放 delay log 里的内容,来实现同步,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储, 从而实现将改变反映到它自己的数据(数据重放)

3. 注意事项

  • 主从服务器操作系统版本和位数一致;
  • Master 和 Slave 数据库的版本要一致;
  • Master 和 Slave 数据库中的数据要一致;
  • Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;

4. 配置主从

  1. 检查master节点是否开启二进制日志文件(log-bin)
  2. 检查server_id或者server-id(唯一)

1) Master节点创建复制用户-repl

用于从节点连接主节点时使用。

# 创建用户
mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl@123';

# 授权用户(找不到gtid_executed,也可以通过该命令来生成)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

mysql> flush privileges;

# 获取gtid(gtid_executed)
mysql> show variables like '%gtid%';

localhost根据实际IP

2) slave节点设置master的gtid和复制用户(repl)

# 设置为master的gtid
SET @@GLOBAL.GTID_PURGED = 'f9523485-c39b-11ec-a630-000c294e9e3f:1-12';

# 配置复制用户
change master to master_host = '192.168.6.61',master_port = 3406,master_user = 'repl',master_password = 'repl@123',master_auto_position=1;

MASTER_HOST: # master服务IP

Master_Port :# master服务端口

MASTER_USER : # master复制用户

MASTER_PASSWORD :# master复制用户密码

master_auto_position: # 1 自动获取之前读取的位置

5. Master和Slave分别开启同步

1)master

# 备份整个数据库 到 slave恢复
mysqldump -uroot -p -h127.0.0.1 -P3406 --opt --hex-blob --single_transaction -R --default-character-set=utf8 --master-data=2 --all-databases>/tmp/dbfull3406.sql

# 恢复

-uroot:数据库用户名为root

-h:指定mysql数据库IP地址

-P:指定端口

–all-databases:指定导出所有库(同时导出多个库,库名用空格隔开,如–databases test1 test2)

–single-transaction:设置事务隔离级别为可重复读,保证dump期间,其他线程对提交的数据不会影响本次数据,改期间也不会锁表

–opt:此Mysqldump命令参数是可选的,如果带上这个选项代表激活了Mysqldump命令的quick,add-drop-table,add-locks,extended-insert,lock-tables参数,也就是通过–opt参数在使用Mysqldump导出Mysql数据库信息时不需要再附加上述这些参数。

–set-gtid-purged=off:关闭全局事务 ID (GTID)

–default-character-set=utf8:设置编码

master_data 选项开启时默认会打开lock-all-tables,因此同时实现了两个功能,一个是加锁,一个是取得log信息。

2)slave

# 开启同步
mysql> start slave;
# root用户密码

# 查看同步状态
mysql> show slave status\G;
root@db 12:07:  [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.6.61
                  Master_User: repl
                  Master_Port: 3406
                Connect_Retry: 60
              Master_Log_File: mysql-binlog.000001
          Read_Master_Log_Pos: 2969
               Relay_Log_File: hadoop62-relay-bin.000002
                Relay_Log_Pos: 413
        Relay_Master_Log_File: mysql-binlog.000001
             Slave_IO_Running: Yes	# 确保这两个都是yes状态
            Slave_SQL_Running: Yes	# 确保这两个都是yes状态

只能复制之后的,之前的数据库啥的好像没法复制

6. 测试-master创建数据库,查看salve上是否同步

master:

create database D1;

slave:

show databases;

7. 取消主从

slave:

mysql>stop slave;

QueryOK, 0 rowsaffected (0,00 sec)

mysql>reset slave all;
# or
mysql>reset master;

QueryOK, 0 rowsaffected (0,04 sec)

mysql> show slave status\G

Emptyset (0,00 sec)

# 此时真正实现了清除slave同步复制关系!

3、级联复制

A -> B -> C

步骤和上面主从一样