一、基于binlog的主从复制搭建
1、准备环境
提前准备三台搭建了MySQL以及关闭防火墙的linux,并保证三台MySQL起始数据一致
实战中最好是新的mysql,方便操作
如果无法新建需使用数据备份方式将数据库数据恢复一致
2、数据库中创建并授权有主从复制权限账户
1 2 3 4 5 6 7 8 | mysql> grant replication slave,reload,super on *.* to 'testslave' @ '%' identified by '123456' ; mysql> flush privileges; #注意:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成具体的ip #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建 replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。 super权限:允许用户使用修改全局变量的SET语句以及CHANGE MASTER语句 reload权限:必须拥有reload权限,才可以执行flush [tables | logs | privileges] |
3、主库的配置
1 2 3 4 5 6 7 8 | 修改数据库配置文件 /etc/my .cnf 保证主库以下两点 1.binlog日志功能打开 2.拥有server- id ,并且在该主从复制集群中唯一 log-bin= /opt/xiaolu/log/a .log (自己写目录) server- id =153 (要保持唯一) 重启数据库 |
1 2 3 | #进入主库查看当前主库状态 mysql> show master statusG # 注意:此次查询关注file和position两条信息,从库配置时使用 |
4、从库的配置
1 2 3 4 | 修改数据库配置文件 /etc/my .cnf 保证从库有唯一的server- id 重启数据库 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 进入从库 #查看从库当前监听主库状态 mysql> show slave statusG Empty set (0.00 sec) #默认未开启监听 # 执行如下命令 mysql> CHANGE MASTER TO MASTER_HOST= '192.168.37.153' , #主库ip MASTER_USER= 'testslave' , #主库用户名(第二步创建的) MASTER_PASSWORD= '123456' , #主库密码(第二步创建的) MASTER_LOG_FILE= 'a.000002' , #主库配置文件(第三步主库配置时截图的参数) MASTER_LOG_POS=154; #主库日志偏移量(第三步主库配置时截图的参数) # 开启监听 mysql> start slave; #查看从库当前监听主库状态 mysql> show slave statusG 如果报UUID错误信息就去 /opt/xiaolu/data/mysql/auto .cnf文件去改UUID |
提示:重置从库的复制配置命令:RESET SLAVE ALL;
5、修改UUID
1 2 3 4 5 6 7 8 9 10 11 | # vim /opt/xiaolu/data/mysql/auto.cnf [auto] server-uuid=e2ee6d4c-80c9-11ef-9bac-000c297e2bf5 随便改个数字就可以 [root@localhost mysql] # service mysqld stop Shutting down MySQL.. SUCCESS! [root@localhost mysql] # service mysqld start Starting MySQL. SUCCESS! 重启数据库 |
6、查看从库当前监听主库状态
1 | mysql> show slave statusG |
7、其余从库配置与以上相同
配置完成后查看主从复制是否实现
1 2 | # 查看线程 mysql> SHOW PROCESSLISTG |
-
第 1 行 – 表示当前有一个由
root
用户在本地(localhost
)执行的SHOW PROCESSLIST
查询,状态为 starting,说明该命令刚刚开始执行,花费的时间为 0。 -
第 2 行 和 第 3 行 – 这两行显示的是来自用户
testslave
的两个Binlog Dump
进程,其主机分别为192.168.37.154
和192.168.37.155
。它们的状态均为 Master has sent all binlog to slave; waiting for more updates,这意味着从库正在等待来自主库的新更新。
二、基于GTID的主从复制搭建
1、准备三台mysql机器环境,并且创建mysql并赋予权限,同上
1 2 3 4 5 6 7 8 | mysql> grant replication slave,reload,super on *.* to 'testslave' @ '%' identified by '123456' ; mysql> flush privileges; #注意:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成具体的ip #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建 replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。 super权限:允许用户使用修改全局变量的SET语句以及CHANGE MASTER语句 reload权限:必须拥有reload权限,才可以执行flush [tables | logs | privileges] |
2、主库配置
1 2 3 4 5 6 7 8 | 修改数据库配置文件 /etc/my .cnf 保证以下四点 log-bin= /opt/xiaolu/log/a .log #开启binlog日志,master必写 server- id =153 #定义server id master必写 并保持唯一 gtid_mode=ON #开启gtid enforce_gtid_consistency=1 #强制gtid 重启数据库 |
3、从库配置
1 2 3 4 5 6 | 修改数据库配置文件 /etc/my .cnf server- id =154 gtid_mode=ON enforce_gtid_consistency=1 重启数据库 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #进入从库 mysql> stop slave; #停止数据库监听 Query OK, 0 rows affected (0.01 sec) #设置从库监听信息 mysql> change master to master_host= '192.168.37.153' , #主ip 地址 最好用域名 master_user= 'testslave' , #主服务上面创建的用户 master_password= '111111' , master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.00 sec) # 开启监听 mysql> start slave; Query OK, 0 rows affected (0.00 sec) # 查看从库监听状态 mysql> show slave statusG |
4、其余从库做相同配置,查看主从复制状态
1 2 | # 查看线程 mysql> SHOW PROCESSLISTG |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。