mysql主从配置 简书_mysql主从、主主配置

引言

实际生产中要求数据库的高可用性,就要考虑mysql的主从、主主。若针对的是上云的机器,比如使用阿里云,那可以购买相应厂商的服务,只需要修改相应的配置就可以做到热备,冷备的效果。但是若针对的是使用自己的服务器的企业,那只能自己撸起袖子来干了。

参考网址

主主搭建

本文将以174,175两台服务器为例子,介绍给读者双主数据库的搭建方法。

1. Mysql安装

安装方法在网上有很多,此处本文就不在重复了,但是要强调一点,两台机器上的mysql至少安装5.7以上的版本,且两台机器上的mysql版本,安装路径,配置,最好是一模一样的。

2. Mysql配置

修改my.cnf配置信息,默认安装存放在 /etc/my.cnf中

2.1 开启relay log配置

这里以174上的mysql作为例子,同理可修改175上的配置,建议配置均以后缀IP不同作为区分。

[mysqlId]

# 同一局域名内注意要唯一

server-id=174

# 开启二进制日志功能,可以随便取(关键)

log-bin=mysql-bin-174

# relay_log配置中继日志

relay_log=mysql-relay-bin-174

2.2 设置步长

在主主同步是先写入一台机器,然后在同步到另外一台机器上面,本质上并不是数据的同步,而是sql语言的同步。基于这个原理,在双主模式下如果只是单纯使用mysql的自增长策略,那将会导致冲突(比如A机器插入一条id为3的数据,B机器也插入了一条id为3的数据,这样子AB机器之间就无法同步了)。

这个问题其实可以扩大成分布式环境下数据库id一致性问题。解决办法有很多,比如本博主之前写到的另外一篇文章,采用雪花算法保证全局id的唯一性。

这里因为是两台机器,所以我们可以做一种简单处理,针对mysql的自增长一台为单数,一台为复数进行区分。因此修改mysql配置如下

[mysqlId]

#设置步长,两台机器均为2

auto_increment_increment=2

#设置初始值,一台为1,另一台为2

auto_increment_offset=1

修改完成mysql的配置后记得要重启

sevice mysql restart

3. mysql主主实现

在两台机器174,175上均用root用户访问mysql

3.1 创建slave用户

174

create user 'slave'@'xx.xx.xx.175' identified by 'pwd';

grant replication slave,replication client on *.* to 'slave'@'xx.xx.xx.175';

flush privileges;

175

create user 'slave'@'xx.xx.xx.174' identified by 'pwd';

grant replication slave,replication client on *.* to 'slave'@'xx.xx.xx.174';

flush privileges;

3.2 配置主主

在174上配置自己为slave,主指向175;

在175上配置自己为slave,主指向174。

174

show master status \G; #记录下 file和position

master_host='xx.xx.xx.175',master_user='slave',master_password='pwd',master_port=3306,master_log_file='175上记录下的file',master_log_pos=175上记录下的position;

175

show master status \G; #记录下 file和position

master_host='xx.xx.xx.174',master_user='slave',master_password='pwd',master_port=3306,master_log_file='174上记录下的file',master_log_pos=174上记录下的position;

命令说明

master_host :Master的地址

master_port:Master的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

分别在174和175中中查看主从同步状态:

show slave status \G;

此时的SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。

开启主从复制:

start slave;

再次查看同步状态:

show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是Yes说明主从复制已经开启。

4. 更多

4.1 问题

若SlaveIORunning一直是Connecting,有下面4种原因:

1、网络不通,检查ip端口

2、密码不对,检查用于同步的用户名和密码

3、pos不对,检查Master的Position

4、mysql8特有的密码规则问题引起:

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa';

将密码规则修改为:mysql_native_password

4.2 指定数据库主从

如果需要指定想要主从同步哪个数据库,可以在master的my.cnf添加配置:

binlog-do-db:指定mysql的binlog日志记录哪个db

或者在slave的my.cnf添加配置:

replicate-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

replicate-ignore-db=需要忽略的数据库名,如果忽略多个数据库,重复设置这个选项即可

4.3 slave的启动

若遇到奇怪的问题,可以先关闭slave,调整好file和position,在重新开启。不过此时应该注意两边数据的完整性

stop slave;

start slave;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值