准备四台同VPC的下服务器,本次测试使用mysql5.7版本
1.首先部署HAVIP
该部分直接忽略,可直接参考官网文档
https://cloud.tencent.com/document/product/215/20186
唯一需要注意的是在部署时要填写对端所有的IP以及优先级的设置
建议主从分开进行部署使用
实现目的
1.一主多从架构可以缓解读的压力,但是一旦主宕机了,就不能写了
多主多从架构可避免该问题
01和02互为主主
03和04为从库
2.安装MySQL
vim /etc/yum.repos.d/mysql.repo
[Mysql] name = Mysql baseurl = https://mirrors.cloud.tencent.com/mysql/yum/mysql57-community-el7/ gpgcheck = 0 enable = 1
yum install mysql-server
在四台实例上全部安装MySQL
配置如下
01
[mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql/ log-error=/var/log/mysqld.log pid-file=/var/log/mysqld.log character-set-server=utf8 lower_case_table_names=1 autocommit=1 log-bin=mysql-bin server-id=2021 auto_increment_increment=2 auto_increment_offset=1 log-slave-updates sync_binlog=1
02
[mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql/ log-error=/var/log/mysqld.log pid-file=/var/log/mysqld.log character-set-server=utf8 lower_case_table_names=1 autocommit=1 log-bin=mysql-bin server-id=2022 auto_increment_increment=2 auto_increment_offset=2 log-slave-updates sync_binlog=1
03
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql/
log-error=/var/log/mysqld.log
pid-file=/var/log/mysqld.log
character-set-server=utf8
lower_case_table_names=1
autocommit=1
server-id=2023
[mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql/ log-error=/var/log/mysqld.log pid-file=/var/log/mysqld.log character-set-server=utf8 lower_case_table_names=1 autocommit=1 server-id=2024
字段说明:
log-bin:二进制文件的位置
server-id:服务id,每台库的server-id值都要唯一
auto_increment_increment : 插入数据时主键的自增步长
auto_increment-offset:增长的起始值
如:01长为 2,起始值为1,插入数据的主键为 1,3,5,7...。同样02步长为2,起始值为2,所以插入数据主键为2,4,6,8...。
log-slave-updates:设置两台主服务器,彼此间复制的数据要不要往其下面的从服务器复制。有这个字段表示往下面从服务器复制。
sync_binlog:从库复制的延迟。值为0表示延迟时间长,1表示延迟时间短。
port:端口号 3306
socker:IP和port
datadir:数据路径
log-error:错误文件文位置
pid-file :pid文件位置
character-set-server :字符集
lower_case_table_names:是否忽略表大小写 1为忽略
autocommit:自动提交 1
主要必须保证server-id的唯一性,否则必报错。
查看服务启动状态
然后分别在两台主服务器上创建数据的账号并且授权
mysql5.7默认随机一个密码的查看可参考
cat /var/log/mysqld.log |grep password
创建一个复制账户报错
mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码
先重置下localhos的密码
alter user 'root'@'localhost' identified by '1lEeMihS&KpO';
再次创建成功
02相同操作
03和04也要进行以上重置操作
查看01binlog位置以及pos点位
show master status;
File为 mysql-bin.000001,Position为154表示正常
所以上图显示不正常需要重置:
stop slave;#如果之前启动过,需要先关闭
reset master;#重置
重置之后File为 mysql-bin.000001,Position为154即可
查看02
在从slave服务器上设置主Master:
在02和03的主为01,同理01和04的主为02。
搞清楚主从关系后,在02和03执行如下操作:
CHANGE MASTER TO MASTER_HOST='172.16.48.3', MASTER_USER='copy01', MASTER_PASSWORD='1lEeMihS&KpO', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
01和04执行
CHANGE MASTER TO MASTER_HOST='172.16.48.16', MASTER_USER='copy02', MASTER_PASSWORD='(Fk(k3(%_euu', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
showslavestatus \G进行验证
测试
1.在01中创建root%账户
使用02的外网IP进行登陆正常
在01中创建表
在04中查询
确定同步无异常
2.测试HAVIP——使用root账户登陆正常
qinhl——双主多从环境3 (很尴尬的是飘到03上了,03是从)
坑:
一定要注意赋权账户的密码
注:以上所有的实例为新实例,无数据以及binlog产生。所以binlog位置为01 pos点位偏移量一致。
具体请务必以实际查询到的个人数据为准。
03和04两个从库在开始登陆时请务必注意一并对系统随机密码再次重置下,以上为方便 ,重置密码时再次重置了系统随机下发密码。
如果有报错等可以在cat /var/log/mysqld.log中进行查看
最开始在配置HAVIP时将所有的实例均配置为高可用,使用过程中会存在03和04从库数据写入的情况。
建议分开进行配置
01和02作为主配置一个HAVIP
03和04作为从配置一个HAVIP 以方便业务上进行配置读写分离的场景。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。