一. 概念
上图1 3 互为主从 2为1的从 4为3的从
网上找了个图片,基于这个图片我们分别定义四个身份master1,master2,slave1 ,slave2
搭建过程中主要理清谁是主谁是从
在此案例中
master1 主要有两个身份:
1.担任master2 和slave1 的主库
2.担任master2的从库
master2 主要有两个身份:
1.担任master1 和slave2 的主库
2.担任master1的从库
slave1 主要有一个身份:
1.担任master1的从库
slave2 主要有一个身份:
1.担任master2的从库
所以在配置的时候 master1 master2 额外要进行的操作是:
1.二进制日志目录创建以及授权
2.mysql主从复制操作用户创建以及授权
3.在作为从数据库的时候,有写入操作也要更新二进制日志文件。即log-slave-updates
而四台机器都要进行的操作是:
1. server-id的配置
2. 启动并配置主从 CHANGE MASTER TO...
3. 查看状态是否正常启动
思路清晰就简单
二. 搭建
准备四台机器
初始化环境:
关墙
设置主机名
设置本地host
安装mysql并初始化密码
这些操作不会的可看我之前的帖子
链接地址
# master1
[root@master01 log]# vim /etc/my.cnf
# 二进制日志所在位置, mysql-bin指的是二进制日志的前缀
log-bin=/var/log/mysql/mysql-bin
# 主库server-id与从库的server-id 不一致。
server-id=1
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
# 创建对应二进制日志目录并修改属主属组
[root@master01 log]# mkdir /var/log/mysql
[root@master01 log]# chown mysql.mysql /var/log/mysql
# 这里第一步操作和之前一致 除了加了log-slave-updates参数再配置中
# 重启
[root@master01 log]# systemctl restart mysqld
# 登录mysql并创建主从复制用户
[root@master01 log]# mysql -uroot -p
1. 创建用户
mysql> create user "repUser"@"%" identified by "123456";
2. 授权
mysql> grant replication slave on *.* to "repUser"@"%";
3. 刷新权限
mysql> flush privileges;
4. 查看
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
# master2
# 因为与master01互为主从 所以也要加上主库相关配置
# msater1的操作这里都要来一遍。。。。。这里省略 跟上面操作一致
# server-id注意不可与mastaer1一致
# 配置slave
mysql> CHANGE MASTER TO
-> MASTER_HOST='mysql-master01', # 这里是配置的本地host 也可直接用master1的ip
-> MASTER_USER='repuser', # master01 创建的主从操作用户
-> MASTER_PASSWORD='123456', # 对应密码
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001', # 二进制日志文件名 可从主上show master status\G里查看
-> MASTER_LOG_POS=154, # 二进制日志起始位置 可从主上show master status\G里查看
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
# 启动
mysql> start slave;
# 查看
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: mysql-master01
Master_User: repuser
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: master02-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
# 这里是两个yes就成功了
# slave01
# 这台机器需要配置master01的从库
# 由于只做从库 所以配置文件中只需要配置 server-id就可以了
[root@master01 log]# vim /etc/my.cnf
server-id=2
# 登录mysql 配置slave 跟master2 操作一致 因为都作为master1的从库
mysql> CHANGE MASTER TO
-> MASTER_HOST='mysql-master01', # 这里是配置的本地host 也可直接用master1的ip
-> MASTER_USER='repuser', # master01 创建的主从操作用户
-> MASTER_PASSWORD='123456', # 对应密码
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001', # 二进制日志文件名 可从主上show master status\G里查看
-> MASTER_LOG_POS=154, # 二进制日志起始位置 可从主上show master status\G里查看
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
# 启动
mysql> start slave;
# 查看
# master1
# 这里配置maser1 为master2 的从库
mysql> CHANGE MASTER TO
-> MASTER_HOST='mysql-master02', # 这里是配置的本地host 也可直接用master2的ip
-> MASTER_USER='repuser', # master02 创建的主从操作用户
-> MASTER_PASSWORD='123456', # 对应密码
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001', # 二进制日志文件名 可从主上show master status\G里查看
-> MASTER_LOG_POS=154, # 二进制日志起始位置 可从主上show master status\G里查看
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
# 启动
mysql> start slave;
# 查看略
# slave2
# 只担任master2的从库
1. 配置文件添加server-id
2. mysql> CHANGE MASTER TO
-> MASTER_HOST='mysql-master02', # 这里是配置的本地host 也可直接用master2的ip
-> MASTER_USER='repuser', # master02 创建的主从操作用户
-> MASTER_PASSWORD='123456', # 对应密码
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001', # 二进制日志文件名 可从主上show master status\G里查看
-> MASTER_LOG_POS=154, # 二进制日志起始位置 可从主上show master status\G里查看
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
# 启动
mysql> start slave;
验证
可以直接借助图形化工具进行操作验证 例如 navicat