MYSQL在生产环境的集群方式

业务层百万读写进入数据库,单个的数据库一定是顶不住压力的,所以需要建立集群

在业务中,基本上80%的业务是读,数据库,20%的业务是写

从服务器会复制主服务器.

1. 所以,要进行读写分离,一般是主服务器写,从服务器读,因为从服务器可以创建无数个来应付那80%的读请求.

2. 如果写请求量太大,一个主顶不住,那么就需要多个主来抗住压力,也就是主主复制(会有数据不一致问题)

解决数据不一致的问题:用机械硬盘, 传输数据用光纤 ,就是快!!!越快出现不一致现象越少

Mysql强一致性部署

数据一致性: 因为主服务器写入数据之后需要同步到其他主服务器,这其中有延迟,不能立刻同步数据,那么就让其达到最终一致性.

这里顺便提一句,如果是涉及到多数据源,并且是boot项目,可以这么配置,并且框架自动会分辨读请求和写请求,将其分配给对应的库

一般来说,运维搭建好数据库集群,我们开发只需要按下面这么配置就ok

主从复制(一主多从)

 1,准备多个MYSQL Server

2.规划哪个是master,哪个是slave  -> my.cnf

3.让master把每次数据改变都记录bin_log

4.配置slave同步数据

-指明master的地址, 访问的账号密码等

5. 让slave启动同步

提示:一定要将虚拟机运行内存调成4g,不然会栈溢出

我们用docker来搞一个Mysql的主从,至于docker的下载,我就不赘述了

docker安装mysql

docker pull mysql:5.7.36

启动mysql

docker run --name mysql-02 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3307 -d mysql:5.7.36

-e的环境变量:指定mysql的密码

-d:后台运行

-p:端口暴露     -p物理机端口: 容器端口  

-v:数据挂载    将mysql的配置文件和数据文件以及日志都应该挂出来

密码是:123456

创建三个

# mysql的配置文件和数据文件以及日志都应该挂出来
# 配置文件只要在容器的 /etc/mysql/conf.d 目录下  随便叫xxx.cnf mysql都会认为是mysql的配置
docker run -p 3333:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /soft/mysql-1/data:/var/lib/mysql \
-v /soft/mysql-1/conf:/etc/mysql/conf.d \
-v /soft/mysql-1/logs:/var/log \
-d --restart=always --name=mysql-1a mysql:5.7.36
docker run -p 3334:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /soft/mysql-2/data:/var/lib/mysql \
-v /soft/mysql-2/conf:/etc/mysql/conf.d \
-v /soft/mysql-2/logs:/var/log \
-d --restart=always --name=mysql-2b mysql:5.7.36
docker run -p 3335:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /soft/mysql-3/data:/var/lib/mysql \
-v /soft/mysql-3/conf:/etc/mysql/conf.d \
-v /soft/mysql-3/logs:/var/log \
-d --restart=always --name=mysql-3c mysql:5.7.36

然后用navicat连接

当然不要忘了给配置文件改编码格式

vim /soft/mysql-1/conf/base.cnf
vim /soft/mysql-2/conf/base.cnf
vim /soft/mysql-3/conf/base.cnf

插入以下

##字符集
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

 搭建主从

1.主服务器的配置(1当主,23服务器当从)

主服务器的配置,还是在vim /soft/mysql-1/conf/base.cnf对应指代文件中配置

[mysqld]
server-id=1                    #服务器id
log-bin=mysql-bin        #开启bin_log ;把数据的改变记录到 mysql-bin这个文件中
binlog-ignore-db=mysql   #设置bin-log不需要感知的数据库
binlog-ignore-db=infomation_schema
binlog-ignore-db=sys
binlog-ignore-db=performance_schema


binlog-do-db=text   #bin-log需要感知的数据库
binlog_format=STATEMENT

然后运行命令

# 给 slave 123456 给一个能复制所有库的权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
flush privileges;

 重启主机,然后看看二进制文件又没有生成

我这里是生成了

然后show master status,就有东西了

2.从服务器的配置

vim /soft/mysql-2/conf/base.cnf

vim /soft/mysql-3/conf/base.cnf

对应配置文件中配置

[mysqld]
server-id=2
relay-log=mysql-relay 

因为是从机,所以给一个专门的slave1.cnf目录

从机也要运行命令

CHANGE MASTER TO MASTER_HOST='主机ip地址',
MASTER_USER='X',MASTER_PASSWORD='X',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值; 


CHANGE MASTER TO MASTER_HOST='192.168.48.128',MASTER_PORT=3333,MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

start slave; #开始同步  

show slave status; #观察状态 

看到这个就是已经配置完成了

 两个从数据库都要执行这三行命令

测试

很简单,我们只需要在主服务器建一张表,然后看看从服务器有没有同步就ok了

当然,我一开始就指定的是同步test库,所以建立别的库是无法被同步的

 创建text库

其他的从服务器就自动同步了,建表也是一样

 下次整合mybatis-plus做一个crud,并且,写去主库,读去从库

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值