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