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. 配置主从
- 检查master节点是否开启二进制日志文件(log-bin)
- 检查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
步骤和上面主从一样