CQRS读写分离MySQL数据库如何部署至Linux,实现一主多从

FearlessGuo

首先有一台可以使用的Linux服务器,可以自行购买,当然也可以白嫖。

有一款可以连接Linux的软件,我用的是putty

在Linux上下载docker镜像,类似应用商店。安装过程参阅下方链接

Linux安装Docker完整教程_docker安装_风随心飞飞的博客-CSDN博客

下载mysql镜像,查看版本

IMG_256

本次使用版本5.7

IMG_256

配置mysql的容器,每个容器就像是一台新的电脑,相互独立各不相同

实现demo:

--name后的内容可以修改

密码可以不为123456

结尾mysql为镜像名称,唯一可以只写name,不唯一也可以用id进行使用

这两段demo都可以创建容器,具体区别不清楚,多尝试一下,一个用不了就换一个。

1

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

2

docker run -p 3312:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

IMG_257

Docker ps 查看运行镜像

Docker ps -a 查看所有镜像

测试mysql容器是否正常

如果连接失败了

参阅以下文章:

MySQL 异常: "Host 'xxx' is not allowed to connect to this MySQL server"_mazaiting的博客-CSDN博客

下面我们配置数据库主从模式(可以当成读写分离)

  1. 我们专用的挂载好的容器(切记不要使用相同端口号,名字也不要相同)

//参数详解// -d守护进程// -p端口映射 -p 宿主机端口:容器端口// --privileged=true 应用容器 获取宿主机root权限// -v 绑定共享映射目录,-v 宿主机目录:容器目录

//主库

docker run -d -p 3322:3306 --privileged=true -v ~/docker_data/mysql-master/log:/var/log/mysql -v ~/docker_data/mysql-master/data:/var/lib/mysql -v ~/docker_data/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql

//从库

docker run -d -p 3324:3306 --privileged=true -v ~/docker_data/mysql-slave/log:/var/log/mysql -v ~/docker_data/mysql-slave/data:/var/lib/mysql -v ~/docker_data/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave mysql

//可以多个从库

docker run -d -p 3325:3306 --privileged=true -v ~/docker_data/mysql-salve/log:/var/log/mysql -v ~/docker_data/mysql-salve/data:/var/lib/mysql -v ~/docker_data/mysql-salve/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-salve mysql

下面我们需要配置Linux挂载文件夹里的文件

这里主库和从库的都已经备注好了

复制代码
//**主库配置** 这里在宿主机更新配置文件后,容器也会同步更新//在刚刚共享映射的宿主机conf目录新建my.cnf 写入以下内容//我的目录是:/docker_data/mysql-master/conf/my.cnf teps:不需要复制这段话

[mysqld]

## 设置server_id 同一局域网中需要唯一

server_id=101

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql

## 开启二进制日志功能

log-bin=mall-mysql-bin

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,stateement,row)

binlog_format=mixed

## 二进制日志过期清理时间 默认值为0 表示不自动清理

expire_logs_days=7

## 跳过主从复制值遇到的所有错误或指定类型的错误,避免slave端复制中断## 如:1062错误是指一些主键重复 1032错误是因为主从数据库数据不一致

slave_skip_errors=1062
复制代码

 

复制代码
//**从库配置** 这里在宿主机更新配置文件后,容器也会同步更新//在刚刚共享映射的宿主机conf目录新建my.cnf 写入以下内容//我的目录是:/docker_data/mysql-slave/conf/my.cnf teps:不需要复制这段话

[mysqld]

## 设置server_id 同一局域网中需要唯一

server_id=102

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql

## 开启二进制日志功能

log-bin=mall-mysql-slave1-bin

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,stateement,row)

binlog_format=mixed

## 二进制日志过期清理时间 默认值为0 表示不自动清理

expire_logs_days=7

## 跳过主从复制值遇到的所有错误或指定类型的错误,避免slave端复制中断## 如:1062错误是指一些主键重复 1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

## relay_log配置中继日志

relay_log=mall-mysql-relay-bin

## log_slave_updates表示slave将复制事件写进自己的二进制日志中

log_slave_updates=1

## slave设置为只读(具有super权限的用户除外)

read_only=1
复制代码

 

如多多个从库变一下server_id就可以了只要不重复就行。想的话可以多设置几个小弟,搞两个给你们演示一下。

这是一个事例,其他的照着写就行。

下面一步一步进入主库(对主库创建slave用户)成功以后可查看是否创建了slave

Exit退出容器,去从库容器中进行配置

如果没报错的话会出来这样一个会话框

我们可以看见这两个状态是关闭的。

可能运行会有报错,empty,没关系这是我们少写了一段话,加上就行。

change master to master_host='47.97.19.23', master_user='slave', master_password='123456', master_port=3322, master_log_file='mall-mysql-bin.000001', master_log_pos=371, master_connect_retry=30;

这边需要最长的demo很贴心的放到这里了。切记一行代码,不能换行!!!!

当然如果直接复制粘贴的话,肯定报错。

需要修改一下port,为你主服务器的端口

还有其他的东西,自己看看去。

//开启主从复制

Start slave;

//查询从库状态

Show slave status \G;

此处的状态已经为yes了说明我们已经配置成功了

这时候你的数据库就不是一个了,主库后面跟俩小弟,非常哇塞。

在主mysql里创建test数据库两个小弟也就有了

posted @   _Fearless  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示