Docker搭建MySql主从复制及分表分库(二)

Docker搭建MySql主从复制及分表分库(二)

一、MySql安装及配置运行环境(以CentOs8.1为服务器)
1、前提(期待已久的这一篇终于有撸下来了)

其实,我在上一篇已经讲到怎么安装mysql以及运行环境的配置,今天我就带着大家完善上次出现的问题。首先,我先说明一下,安装我就不再累赘了,不知道怎么安装的小伙伴们可以去看我上一篇中文章。上一次出现这样的问题是由于版本过高导致的,官方目前mysql最新版本8.0.19,而mycat对于mysql最新版本有些功能还不是很完善,不支持原生操作,但允许Jdbc等一些连接操作。根据目前来看,稳定版本还是以mysql5.7版本为准,基本上对mycat完全支持。我这里以mysql5.7为咧子。

2、主要说一下mysql最新版本与mysql5.7配置上的区别
  • 密码加密方式不同,这个我在上一篇文章中有提到过。
  • 配置文件方式位置及名称发生了更改。
我这里就讲一下安装mysql5.7有哪些方面要注意的:

配置文件:mysql8.0以上主配置文件是在/etc/mysql/目录中的my.cnf文件

​ mysql5.7主配置文件在/etc/mysql/mysql.conf.d目录中的mysqld.cnf文件

是否更改加密:mysql8.0以上需要更改加密方式,不然客户端工具连接不上。

​ mysql5.7不需要更改默认密码方式

3、讲一下mysql5.7的安装及配置(稍微简咧一点,有如不懂的可以看上一篇)

其实,与上一篇讲的安装8.0版本的差不多,只是配置路径变了而已!

重点还是要看下面的操作:

#拉取mysql5.7版本
docker pull mysql:5.7
#运行两个mysql容器 (一主一从)
docker run --name=master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 #运行主
docker run --name=slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7	 #运行从
#查看是否运行成功
docker ps

然后,尝试用Navicat去连接主从mysql:

1)、在主mysql中建立一个新用户角色

#用户名:slave  密码:123456  %为全部ip,可改为指定ip
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
#赋权限给slave用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
#刷新权限
FLUSH PRIVILEGES;
#查看所有用户
SELECT * FROM mysql.`user`;

2)、查看mysql日志文件

#File为日志文件,Position是其位置,后面配置从数据库需要用到
show master status;

这里你可能会看到是空的:

我们看一下其日志状态信息

#查看sql日志状态信息
show variables like '%log_bin%';

发现log_bin的值为:OFF (默认是没开启日志同步信息的)

3)、我们开启一下binary日志

将主从mysql容器里面的配置文件复制到宿主机

#容器--》宿主机 (主)
docker cp master:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/mysql/master/mysqld.cnf
#容器--》宿主机 (从)
docker cp slave:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/mysql/slave/mysqld.cnf

在宿主机里面修改配置文件:

主配置文件:

在这里插入图片描述

从配置文件:

与主配置文件一样:只需要将server-id的值与主配置文件不同就行(比如:2)

然后,将这两个配置文件分别copy到主从容器里面,覆盖之前的mysql配置

#宿主机--》容器 (主)
docker cp /usr/local/mysql/master/mysqld.cnf master:/etc/mysql/mysql.conf.d/mysqld.cnf
#宿主机--》容器 (从)
docker cp /usr/local/mysql/slave/mysqld.cnf slave:/etc/mysql/mysql.conf.d/mysqld.cnf

之后,重启主从mysql容器:

在这里插入图片描述
4)、查看日志是否开启

在这里插入图片描述

这个位置主从复制需要用到:

在这里插入图片描述

在这里就不测试主从复制了,这一篇主要讲一下mycat分表分库,需要了解去看上一篇文章。

4、接下来我以mycat做分表分库操作(重点在这里)

首先需要先安装JDK环境,如果安装了可以省咧这一步:

安装JDk去看这一篇文章: https://blog.csdn.net/weixin_43322048/article/details/106877501

1)、安装mycat (准备好mycat安装包)

百度网盘链接:

链接:https://pan.baidu.com/s/1xrkQvipxTIpfszFdJwDpVA
提取码:jvzy

然后,将mycat安装包上传至服务器中(以xshell6为例):

#在根目录创建mycat目录
mkdir mycat
#将mycat上传到mycat目录中【使用rz命令上传】
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#若提示rz命令不存在则执行如下命令安装(使用yum源)
yum -y install lrzsz
#更改mycat名称为mycat.tar.gz
mv Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz mycat.tar.gz
#解压mycat
tar -zxvf mycat.tar.gz

配置环境变量vim /etc/profile 在文件末尾加入如下代码,并保存:

MYCAT_HOME=/mycat/mycat	
PATH=$MYCAT_HOME/bin:$PATH
export MYCAT_HOME PATH

mycat的配置文件的配置去看上一篇文章,这里就不说了~~~~~

2)、配置好以后(准备启动mycat)

启动mycat:

#进入mycat的bin目录启动
./mycat start  			#后台启动
./mycat console			#控制台启动
#关闭mycat
./mycat stop

启动过程中可能会遇到一些坑:这些我都有总结 如果遇到一些错误去看上一篇文章中讲述的mycat配置过程及启动过程中的一些问题。

3)、测试mycat读写分离(后续会继续连载)

我这里以Navicat进行测试:

在主mysql中创建order数据库并在该数据库下创建orders表:

#创建订单数据库
CREATE DATABASE IF NOT EXISTS `order`;
#创建orders表
CREATE TABLE `order`.`orders`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `shop_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '商品名称',
  `price` decimal(10, 2) NULL COMMENT '商品价格',
  `shop_count` int NULL DEFAULT 0 COMMENT '商品数量',
  `create_time` datetime NULL DEFAULT now() COMMENT '创建时间',
  `update_time` datetime NULL COMMENT '更新时间',
  `is_delete` tinyint(1) NULL DEFAULT 0 COMMENT '是否删除 0.未删 1.已删',
  PRIMARY KEY (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '商品表' ROW_FORMAT = DYNAMIC;

你此时会发现slave用户下也同样创建同样的数据库和表:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我mycat中只配置了一个库,为了演示,在实际操作中并没有那么简单。

然后,我们在orders表中添加一条数据:

#添加一条数据
INSERT into orders(shop_name,price,shop_count) VALUES('香蕉',36.00,356);

在这里插入图片描述

再去slave用户中和mycat登录端去查有没该条数据:

在这里插入图片描述

在这里插入图片描述

最后,在slave用户读库中添加数据:

在这里插入图片描述

你会发现读库是不能写入的,只有读的权限,到这里在mysql5.7版本中使用mycat做读写分离此时已经实现了。

若有不懂的地方可以再看看我上一篇文章中所讲的,这一篇主要是解决上一篇预留下的一点问题。

也可以加博主的微信直接交流:
在这里插入图片描述

附上上一篇链接: https://blog.csdn.net/weixin_43322048/article/details/105318168

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

架构潜行之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值