一主一从搭建
环境说明
- VMware虚拟机,系统使用CentOS 7
- 2台CentOS7,都安装了MySQL5.7
- 2台CentOS7的hostname分别为:rabbit-103(主机),ip:192.168.250.103 和 rabbit-104(从机),ip:192.168.250.104
- MySQL5.7
- 注意:如果是使用克隆VMware虚拟机,再克隆后,需要修改
hostname
、ip地址
,网卡UUID
,MySQL实例的UUID
(在/var/lib/mysql/auto.cnf中修改)
Master(主机)配置
1、在主机MySQL中配置文件中(/etc/my.cnf),添加如下配置信息,注意:需要在[mysqld]
配置分组下(麻烦仔细看配置说明哦
)
#【必选配置】
#主机服务ID
server_id=103
#设置binlog日志目录(此处log_bin配置,相当于配置了:log_bin、log_bin_basename、log_bin_index)
log_bin=/var/lib/mysql/binlog/rabbit-103-bin
#【可选配置】(可以不用配 ,都有默认值)
#开启mysql实例只读:(0读写,1只读)
#注意:当前配置为主机,一般主机都是支持读写,故这里配置为0
read_only=0
#设置binlog日志保留时长
#binlog_expire_logs_seconds=86400 #MySQL8.0配置,单位为秒
expire_logs_days=1 # MySQL5.7配置,单位为天
#单个binlog文件大小,默认值为1GB
max_binlog_size=512M
#设置不同步的数据库,多个多行配置
binlog_ignore_db=test
binlog_ignore_db=nacos
binlog_ignore_db=seata
#设置需要同步的数据库,不设置表示全部数据库,多个多行配置
binlog_do_db=book
binlog_do_db=cloud_order
#设置binlog格式,默认是ROW,可选:ROW、STATEMENT 和 MIXED
binlog_format=ROW
Slave(从机)配置
1、在从机的MySQL配置文件中(/etc/my.cnf)添加如下配置,注意:需要在[mysqld]
配置分组下(麻烦仔细看配置说明哦
)
#【必配项】
#从服务器唯一ID
server_id=104
#【可配项】
#启用中继日志
relay_log=/var/lib/mysql/relay/rabbit-104-relay-bin
#开启数据库实例只读模式
#这里由于是从机配置,一般从机为读数据,故设置为只读模式。
#只读模式,只对普通权限用户有控制效果,当普通用户执行修改操作时,
#会抛出:ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement错误
#super用户 和 用户权限有【ALL PRIVILEGES】不受控制,单可以设置super_read_only=1来让super用户也只能读
read_only=1
Master(主机)建立账户,并给账户赋予主从复制的权限
# GRANT授权语句,如果用户不存在,会自动创建用户
GRANT REPLICATION SLAVE ON *.* TO '账户名'@'从库IP地址' IDENTIFIED BY '密码'
示例:
GRANT REPLICATION SLAVE ON *.* TO 'slave01'@'192.168.250.104' IDENTIFIED BY '123456'
Slave(从机)配置需要复制的Master(主机)信息
1、先查看Master信息
,在Master主机上,执行:show master status
SQL语句(注意:是执行SQL语句),并记住File
和Position
这2个字段的值
2、在从机上执行如下SQL语句:
CHANGE MASTER TO
MASTER_HOST=主机IP地址,
MASTER_USER=刚才授权主从复制权限的账号
MASTER_PASSWORD=主从复制账号的密码
MASTER_LOG_FILE=第一步查到的File字段值
MASTER_LOG_POS=第一步查到的Position字段值
#示例:
change master to
master_host='192.168.250.103',
master_user='slave104',
master_password='123456',
master_log_file='rabbit-103-bin.000001',
master_log_pos=698;
3、启动从机复制,执行SQL语句:start slave;
4、查看主从复制状态,执行SQL语句:show slave status\G;
停止主从复制
1、停止从机的主从复制(从机上执行):stop slave;
2、重置从机的主从复制(从机上执行):reset slave;
重置后可以通过重新执行 CHANGE MASTER TO ...
来重设置主从
3、重置主机的主从复制信息(主机上执行):reset master;
【注意:该命令会重置binlog日志文件,慎用
】
常见搭建问题说明
1、主机UUID
与从机UUID
重复,在/var/lib/mysql/auto.cnf
中修改MySQL的UUID,使主从机上的UUID不重复即可
2、从机无法连接到主机,一般从以下几点排查:
- 从机与主机是否能够网络通讯,即在
从机上ping一下主机
,看网络是否OK - 确认
主从复制账号密码
是否正确 - 确认主机
3306端口
是否开放 - 尝试
关闭CentOS防火墙
,看一下是否因为防火墙导致无法连接到主机
3、如果启动start slave
报错时,执行SQL语句:reset slave
,然后重新执行CHANGE MASTER TO ...
操作
4、如果执行从机配置相关SQL语句出现:STOP SLAVE FOR
错误时,则先执行SQL:stop slave
语句,来停止主从复制
5、登录的账户无权限操作,此时请使用有权的super用户登录进行执行SQL
双主双从(主主互备,主写从读)
环境说明
- VMware虚拟机,系统使用CentOS 7
- 4台CentOS7,都安装了MySQL5.7
- 4台CentOS7的hostname 和 ip地址 分别为:
rabbit-103(主机),ip:192.168.250.103
rabbit-104(主机),ip:192.168.250.104
rabbit-105(主机),ip:192.168.250.105
rabbit-106(主机),ip:192.168.250.106
- MySQL5.7
- 注意:如果是使用克隆VMware虚拟机,再克隆后,需要修改
hostname
、ip地址
,网卡UUID
,MySQL实例的UUID
(在/var/lib/mysql/auto.cnf中修改)
2台Master(主机)配置
- 修改MySQL中的配置文件(/etc/my.cnf),与一主一从配置一样,只多了一个必配项:
log_slave_updates
(作用见配置说明)
- rabbit-103主机配置
#【必选配置】
#主机服务ID
server_id=103
#启用binlog
log_bin=/var/lib/mysql/binlog/rabbit-103-bin
#双主相互复制时,设置MySQL实例切换为从数据库时,有修改操作也要写入binlog日志
log_slave_updates
#【可选配置】(可以不用配 ,都有默认值)
#启用中继日志,由于双主也会作为相互的从机,故配置中继日志
relay_log=/var/lib/mysql/relay/rabbit-103-relay-bin
#开启mysql实例只读:(0读写,1只读)
#注意:当前配置为主机,一般主机都是支持读写,故这里配置为0
read_only=0
#设置binlog日志保留时长
#binlog_expire_logs_seconds=86400 #MySQL8.0配置,单位为秒
expire_logs_days=1 # MySQL5.7配置,单位为天
#单个binlog文件大小,默认值为1GB
max_binlog_size=512M
#设置不同步的数据库,多个多行配置
binlog_ignore_db=test
binlog_ignore_db=nacos
binlog_ignore_db=seata
#设置需要同步的数据库,不设置表示全部数据库,多个多行配置
binlog_do_db=atguigudb
binlog_do_db=cloud_order
#设置binlog格式,默认是ROW,可选:ROW、STATEMENT 和 MIXED
binlog_format=ROW
- rabbit-104配置
#【必配项】
#从服务器唯一ID
server_id=104
log_bin=/var/lib/mysql/binlog/rabbit-104-bin
log_slave_updates
#【可选配置】
relay_log=/var/lib/mysql/relay/rabbit-104-relay-bin
read_only=0
expire_logs_days=1
max_binlog_size=512M
binlog_ignore_db=test
binlog_ignore_db=nacos
binlog_ignore_db=seata
binlog_do_db=atguigudb
binlog_do_db=cloud_order
binlog_format=ROW
2台从机配置
- 修改从机的配置文件(/etc/my.cnf),与一主一从的从机配置无差异
- rabbit-105配置
#【必配项】
server_id=105
#【可配项】
#启用中继日志
relay_log=/var/lib/mysql/relay/rabbit-105-relay-bin
#开启数据库实例只读模式
#这里由于是从机配置,一般从机为读数据,故设置为只读模式。
#只读模式,只对普通权限用户有控制效果,当普通用户执行修改操作时,
#会抛出:ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement错误
#super用户 和 用户权限有【ALL PRIVILEGES】不受控制,单可以设置super_read_only=1来让super用户也只能读
read_only=1
- rabbit-106配置
#【必配项】
server_id=106
#【可配项】
relay_log=/var/lib/mysql/relay/rabbit-106-relay-bin
read_only=1
创建主从复制账号,并授予主从复制权限
- 为了方便,2台主机创建相同账号(注意:
2台主机都要创建
) - 又因为4台机器要相互设置主从,故账号
host
设置为通用[%]
# 注意:2台主机上都要创建该账号
# MySQL5.7中,给账号授权命令时,如果账号不存在,会自动创建该账号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';
2台从机,分别设置自己的主机
- rabbit-105从机设置的主机为rabbit1-03,rabbit-106从机设置主机为rabbit-104
- rabbit-105设置主机为rabbit-103,并开启主从复制
- 先通过show master status查看rabbit-103上的binlog信息,然后记住
File
和Position
字段信息 - 再进行如下配置
- 先通过show master status查看rabbit-103上的binlog信息,然后记住
#rabbit-105上,设置103的binlog file和position值
mysql> change master to
master_host='192.168.250.103',
master_user='slave',
master_password='slave',
master_log_file='rabbit-103-bin.000001',
master_log_pos=154;
#启动主从复制
mysql> start slave;
- rabbit-106设置主机为rabbit-104,并开启主从复制
- 先通过show master status查看rabbit-104上的binlog信息,然后记住
File
和Position
字段信息 - 再进行如下配置
- 先通过show master status查看rabbit-104上的binlog信息,然后记住
#rabbit-106上,设置104的binlog file和position值
mysql> change master to
master_host='192.168.250.104',
master_user='slave',
master_password='slave',
master_log_file='rabbit-104-bin.000001',
master_log_pos=154;
#启动主从复制
mysql> start slave;
-
两台从机,通过show slave status\G; 查看主从同步状态是否OK
2台主机相互复制配置(即相互作为对方从机)
- rabbit-103配置作为rabbit-104的从机(跟rabbit-106配置一样)
mysql> change master to
master_host='192.168.250.104',
master_user='slave',
master_password='slave',
master_log_file='rabbit-104-bin.000001',
master_log_pos=154;
# 启动主从复制
mysql> start slave;
- rabbit-104配置作为rabbit-103的从机(跟rabbit-105配置一样)
mysql> change master to
master_host='192.168.250.103',
master_user='slave',
master_password='slave',
master_log_file='rabbit-103-bin.000001',
master_log_pos=154;
#启动主从复制
mysql> start slave;
验证
- 通过show slave status\G; 查看每台MySQL上的主从配置和状态是否正常
-
在rabbit-103或rabbit-104主机上插入数据,观察另外3台是否同步数据