docker之mysql集群和mycat

首先打开虚拟机,开启docker服务

service docker start

如果已经安装Portainer的话,就先开启它

docker ps -a
查找到portainer的id号
docker start portainerID

一、MySQL的安装

1、在虚拟机运行该命令

1.搜索镜像
docker search mysql;

2.拉取镜像
docker pull mysql;

3.创建两个mysql容器,分别开放3307和3308端口,给两个mysql容器取别名,设置密码都是root。
docker run -d -p 3307:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=root  mysql
docker run -d -p 3308:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root  mysql

2、分别从portainer中进入已运行的mysql1和mysql2的cmd中,运行4命令,建立mysql连接

image.png

注:该条指令的意思是开放root用户,%代表任何连接都能放行,建立navicat连接

4.进入容器登录mysql并开启远程连接
alter user 'root'@'%' identified with mysql_native_password by 'root';

image.png

3、相同的步骤创建mysql2的连接,创建后在两个连接中分别创建名称相同的数据库,这里创建的是“jgs007”。我们将mysql1里jgs2007库中的表视为主表,mysql2里jgs2007库中的表视为从表,此时还没有创建表,之后才会创建,这里先说明一下。

image.png

4、进入portainer,分别点击运行的容器mysql1和mysql2,查看他们的内网地址,mysql1的是172.17.0.3,mysql2的是172.17.0.4,不同的连接会显示不同的地址。记住这两个地址,之后会用到。

在这里插入图片描述

二、主从配置

主配

1、先从mysql状态中退出来,更新并下载vim编辑器。mysql2也是相同的操作。

exit
apt-get update
apt-get install vim

image.png

2、vim编辑器安装完成以后,正式开始主从配置

1.增加配置
vim /etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1
binlog-do-db=dbname

创建并编辑my.cnf文件,并粘贴之后的代码,将dbname换成我们创建的库的名称“jgs2007”,保存退出。

image.png

2.进入mysql模式
mysal -uroot -p

3.创建用户
CREATE USER 'username'@'ip' IDENTIFIED WITH mysql_native_password BY '123456';

4.授予权限
GRANT REPLICATION SLAVE ON *.* TO 'username'@'ip';

5.刷新
flush privileges;

退出编辑模式后,在mysql1连接中创建一个给mysql2使用的一个用户,用户名username自定义,这里写成“jgs2007”,IP为mysql2的内网地址172.17.0.4.
然后授予该用户权限,同样输入用户名和ip,之后刷新,重启。

image.png

重启之后

6.登录mysql

7.查看日志文件和位置(file和position)
SHOW MASTER STATUS;

image.png

从配

从数据连接的配置基本相同

1.增加配置
vim /etc/my.cnf

[mysqld]
server-id=2
replicate-do-db=dbname

dbname依然是“jgs2007”
image.png

2.配置主从连接
CHANGE MASTER TO MASTER_HOST='ip', MASTER_USER='username', MASTER_PASSWORD='123456',MASTER_LOG_FILE='logname',MASTER_LOG_POS=pos;

3.开启同步
START SLAVE;

4.查看Slave的运行状态
SHOW SLAVE STATUS\G;

第2步配置主从连接需要改一些地方,首先是连接mysql1的内网地址172.17.0.3,之后填入刚刚创建的新用户的用户名username=“jgs2007”,更改logname就是刚刚查看的mysql1的文件file,pos就是position。

image.png

运行完上述步骤之后如果标点的位置的都是yes,并且连对了数据库,那么说明主从配置成功了,有一个不正确都是失败。
image.png

之后在两个两个中分别创建两张表user,因为mysql1中的为主表,可以修改增加,mysql2中的为从表,所以只能查询,不能有其他操作否则就不同了。
image.png

三、mycat配置

首先介绍一下mycat:一个项目需要一个数据库连接,但是mysql集群会出现多数据库多端口号的情况,所以有必要提供一个统一的连接服务地址。并且可以设置那些数据库可以查询,那些数据库可以修改,mycat将自动实现。

1. 在本地虚拟机中拉取镜像
docker pull fify/mycat

2. 创建挂载目录
mkdir -p /home/mycat

3.在/home/mycat/下创建server.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <!-- 1为开启实时统计、0为关闭 -->
        <property name="useSqlStat">0</property>  
        <!-- 1为开启全加班一致性检测、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>  
        <property name="sequnceHandlerType">2</property>
        
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
        <property name="processorBufferPoolType">0</property>
        
        <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
        <property name="handleDistributedTransactions">0</property>
        <!-- off heap for merge/order/group/limit   1开启   0关闭 -->
        <property name="useOffHeapForMerge">1</property>
        <!-- 单位为m -->
        <property name="memoryPageSize">1m</property>
        <!-- 单位为k -->
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <!-- 单位为m -->
        <property name="systemReserveMemorySize">384m</property>
    </system>

    <user name="root">
        <property name="password">root</property>
        <property name="schemas">jgs2007</property>
    </user>

</mycat:server>

schemas为需要操作的数据库名,用户名和密码是root和root
image.png

4.在/home/mycat/下创建schema.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="jgs2007" checkSQLschema="true" sqlMaxLimit="100">
	<table name="user1" dataNode="dn1" primaryKey="id"/>
    </schema>
    
    <!-- dataNode -->
    <dataNode name="dn1" dataHost="dh1" database="jgs2007" />
    
    <dataHost name="dh1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
        <!-- 心跳语句 -->
        <heartbeat>select 1</heartbeat>
			<!-- 写实例 -->
			<writeHost host="hostM1" url="jdbc:mysql://172.17.0.3:3306?useSSL=false&amp;serverTimezone=UTC" user="root" password="root">
            <!-- 读实例 -->
            <readHost host="hostS1" url="jdbc:mysql://172.17.0.4:3306?useSSL=false&amp;serverTimezone=UTC" user="root" password="root" />
        </writeHost>
    </dataHost>

</mycat:schema>

分别加入数据库名,创建的user表名,连接主从mysql的连接地址
image.png


5.将server.xml和schema.xml上传至创建的挂载目录mycat下.

6.创建mycat容器,将两个配置文件映射到容器内部(这是一条语句)
docker run --name mycat -p 8066:8066  -v /home/mycat/server.xml:/usr/local/mycat/conf/server.xml -v /home/mycat/schema.xml:/usr/local/mycat/conf/schema.xml --privileged=true -d fify/mycat

启动mycat容器成功
image.png

但是现在还不能进行统一连接,因为没有连接驱动
image.png

进入mycat的cmd命令模式,查看一下,没有mysql8.0的jdbc驱动包。
image.png

7.上传mysql8.0的jdbc驱动包

因此需要将该驱动包放入mycat中,我将下载好的驱动包放在本地的挂在目录下,通过命令复制,映射到mycat环境中。先从mycat环境中获取此时该文件目录的位置,命令pwd。再从本地映射到该路径。
image.png

image.png

映射完成以后查看一下,已经过来了,但是报红,说明权限不够,赋予权限
chmod 777 文件名,再ls查看一下。
image.png

已经绿了,说明好了
image.png

8.重启mycat容器

现在连接已经完成了
image.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值