【Mysql】mysql的主从复制,一主一从,以及分布式集群环境下多主多从环境配置

1.背景

分布式环境下为了保证Mysql的查询效率,我们会配置Mysql的主从复制用来做读写分离,master主机用来做写主机,slave主机用来做读主机,读主机从写主机来复制数据,通常为了保证高可用性,我们需要至少双主双从,当一个主节点挂了之后,另一个主节点会被当作写主机进行数据的写入。

2.一主一从的配置

我这里偷个懒,使用docker搭建的mysql,不过和正常安装的mysql之间区别不大,接下来,我们开始配置一主一从的配置

2.1 配置master机器mysql的配置文件

正常安装的mysql直接配置 /etc/my.cnf即可,我这里使用的是docker搭建的mysql,所以配置 /etc/mysql/mysql.conf.d/mysqld.cnf

vim /etc/mysql/mysql.conf.d/mysqld.cnf

如果这里和我一样使用的是docker搭建的mysql,容器里面肯定是没有vim命令的,使用下面两条命令来安装一下

apt-get update

apt-get install vim -y

编辑master主机的配置文件,在[mysqld]下加入如下配置

server_id        = 1

log-bin            = master-bin

binlog-do-db   = testdb

binlog_format = ROW

 保存退出

这里把参数解释一下

server_id 代表mysql服务器的唯一ID

log-bin代表启用二进制文件,后面的代表二进制文件的名称

binlog-do-db代表需要复制的数据库名称

binlog_format这个参数我们这里着重讲一下

格式含义优缺点
STATEMENT记录的是DQL,DML,DDL语句

节省空间,磁盘IO小,如果出现系统变量,sysdate()等函数从数据库会和主数据库出现不一致的情况

ROW记录的是每一行的数据精确的复制数据到从库文件占用空间大,网络IO大,磁盘IO大
MIXED前面2者的混合准确性高,文件大小适中,还是会有数据不一致的情况出现

2.2 配置slave机器的mysql配置文件

修改配置文件(非docker安装的用户直接配置 /etc/my.cnf)

vim /etc/mysql/mysql.conf.d/mysqld.cnf

在[mysqld]标签下添加以下内容

server_id        = 2

replicate-do-db = testdb

 replicate-do-db 代表了从数据库需要复制的数据库名称

2.3 配置两台机器开始复制

① 将上述配置好的mysql服务重新启动

② 如果在2台机器上面部署的,记得打开防火墙的3306端口

③ 配置具有同步权限的账户

grant replication slave on *.* to 'account'@'%' identified by '123456';

生产环境中,一定不能指定用户访问IP为%,会有安全问题,这里为了演示,不做限制。

刷新一下数据

flush privileges;

④进入到master主机mysql中

show master status;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

 这里有2个重要的值

File下面的字符串 binlog文件的名称,后面我们要指定slave主机从这个文件中获取数据

Position下面的数字,代表偏移量,表示后面slave的主机从哪里开始复制。

⑤进入到slave主机的mysql中

CHANGE MASTER TO 
MASTER_HOST='master主机的IP',
MASTER_USER='account',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000002', # master主机binlog文件的名称
MASTER_LOG_POS=154, # binlog文件的偏移量
master_port=3306;

开始备份

start slave;

查看从机备份情况

show slave status\G;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

 只要看到这两项都为YES之后,表示已经开始备份了。

这时候我们创建一个testdb数据库,

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_12,color_FFFFFF,t_70,g_se,x_16

发现从数据库中也创建了一个同样的数据库;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_7,color_FFFFFF,t_70,g_se,x_16

 这时,无论是创建表还是插入数据,从数据库都会一直复制数据了。

3.多主多从的配置

我们这里以双主双从来分析,其实与一主一从类似,双主双从只是让两台主机也具有互相复制的功能即可。

3.1 master节点的配置

master1节点

server_id        = 1

log-bin            = master1-bin

binlog-do-db   = testdb

binlog_format = ROW

# 主节点宕机恢复之后变成从数据库之后,写入操作写入二进制文件中

log-slave-updates

# 自增字段每次增长的值

auto-increment-increment=2

# 自增字段的起始值

auto-increment-offset=1

# 设置自增字段的起始和增长值是为了保证多个主节点的情况下自增的字段不会重复

master2节点

server_id        = 2

log-bin            = master2-bin

binlog-do-db   = testdb

binlog_format = ROW

log-slave-updates

auto-increament-increment=2

# 自增的起始值为2

auto-increment-offset=2 

3.2 Slave节点的配置 

 slave1节点

server-id        = 3

replicate-do-db = testdb

slave2节点

server-id        = 4

replicate-do-db = testdb 

 3.3 配置双主双从的复制

① 4台mysql全部重启

②开启4台mysql的服务端口

③ 2台master节点全部新建一个同步权限的用户

grant replication slave on *.* to 'account'@'%' identified by '123456';

清理一下数据

flush privileges;

④查看两台主机的binlog状态

# 查看master1节点

show master status;

#查看master2节点

show master status;

⑤ 设置从节点复制的主机节点

slave1 复制 master1

CHANGE MASTER TO 
MASTER_HOST='master1主机的IP',
MASTER_USER='account',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master1-bin.000002', # master1主机binlog文件的名称
MASTER_LOG_POS=154, # binlog文件的偏移量
master_port=3306;

slave2 复制 master2

CHANGE MASTER TO 
MASTER_HOST='master2主机的IP',
MASTER_USER='account',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master2-bin.000002', # master2主机binlog文件的名称
MASTER_LOG_POS=154, # binlog文件的偏移量
master_port=3306;

⑥两台从主机开启复制

start slave

⑦ 查看两台从主机的复制状态

show slave status\G;

查看两个选项是否为Yes; 

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
⑧ 两台主机相互复制
master2 复制master 1
CHANGE MASTER TO 
MASTER_HOST='master1主机的IP',
MASTER_USER='account',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master1-bin.000002', # master1主机binlog文件的名称
MASTER_LOG_POS=154, # binlog文件的偏移量
master_port=3306;

master1 复制 master2

CHANGE MASTER TO 
MASTER_HOST='master2主机的IP',
MASTER_USER='account',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master2-bin.000002', # master2主机binlog文件的名称
MASTER_LOG_POS=154, # binlog文件的偏移量
master_port=3306;

⑨ 开启两台master节点的复制功能

start slave;

4. 关闭主从复制

从机停止同步

stop slave;

主机停止同步

stop slave;

reset master;

 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值