Mycat+Mysql

  • MySQL 主从模式
  • 搭建主库
  • 1. 创建目录并赋最高权
  • 2. 创建配置文件
  • 3. 创建容器并挂载数据轴
  • 4. 启动
  • 5. 进入MySQL 工具
  • 1. 创建同步账户以及授权
  • 2. 查看状态和配置项
  • 搭建从库
  • 1. 创建目录并赋最高权
  • 2. 创建配置文件
  • 3. 创建容器并挂载数据轴
  • 4. 启动
  • 5. 登入MySQL 工具
  • 1.设置master相关信息
  • 2. 启动同步
  • 3. 现在在主库上创建库 ,从库上会自动同步
  • MyCat
  • 1. 安装 jdk
  • 1. 解压tar包在这里插入代码片
  • 配置jdk环境
  • 2. 安装MyCat
  • 1. 解压tar包
  • 2. 配置 schema.xml
  • 3. 配置 rule.xml
  • 4. 重启 MyCat 进行测试
  • 5. 进入 MySQL 工具

MySQL 主从模式

在 Docker 下

搭建主库

1. 创建目录并赋最高权

mkdir -p /data/mysql/master01 
cd /data/mysql/master01 
mkdir conf data 
chmod 777 * -R

2. 创建配置文件

cd /data/mysql/master01/conf 
vim my.cnf

写入一下内容

[mysqld] 
log-bin=mysql-bin #开启二进制日志 
server-id=1 #服务id,不可重复

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_xml

3. 创建容器并挂载数据轴

密码设置为root

docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23

4. 启动

把日志打印出来,便于查看

docker start percona-master01 && docker logs -f percona-master01

5. 进入MySQL 工具

我使用的是SQLyog企业版

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_xml_02


先测试连接,成功后方可连接。连接成功说明主服务器搭建完成。

1. 创建同步账户以及授权
create user 'wf'@'%' identified by 'wf'; 
grant replication slave on *.* to 'wf'@'%'; 
flush privileges;

出现 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and错误解
决方案,在my.cnf配置文件中设置
sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

2. 查看状态和配置项
#查看master状态 
show master status; 
#查看二进制日志相关的配置项 
show global variables like 'binlog%'; 
#查看server相关的配置项 
show global variables like 'server%';

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_mysql_03

搭建从库

1. 创建目录并赋最高权

mkdir -p /data/mysql/slave01 
cd /data/mysql/slave01 
mkdir conf data 
chmod 777 * -R

2. 创建配置文件

cd /data/mysql/master01/conf 
vim my.cnf

写入一下内容

[mysqld] 
server-id=2 #服务id,不可重复

出现 [Err] 1055 参照主库解决方案

3. 创建容器并挂载数据轴

docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23

4. 启动

docker start percona-slave01 && docker logs -f percona-slave01

5. 登入MySQL 工具

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_MySQL_04

1.设置master相关信息

需要注意的四个地方:

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_mysql_05

CHANGE MASTER TO 
MASTER_HOST='192.168.1.110', 
MASTER_USER='wf', 
MASTER_PASSWORD='wf', 
MASTER_PORT=3306,  # 主库端口
MASTER_LOG_FILE='mysql-bin.000003',  
MASTER_LOG_POS=735;
2. 启动同步
#启动同步 
start slave; 
#查看master状态 
show slave status;

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_mycat_06

3. 现在在主库上创建库 ,从库上会自动同步

主库具有读写能力,从库有读的能力,主库上的操作会同步到从库,但是从库上的操作不会同步到主库。因此从库多数用来读取数据使用。

MyCat

在 CentOS7系统下

1. 安装 jdk

1. 解压tar包在这里插入代码片

tar -zxvf jdk-8u171-linux-x64.tar.gz

配置jdk环境

打开系统环境变量文件

vi /etc/profile

将下面配置加入最后

#java environment
export JAVA_HOME=/usr/local/jdk1.8.0_171
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

重新加载配置文件

source /etc/profile

2. 安装MyCat

1. 解压tar包

tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

2. 配置 schema.xml

# 进入目录
cd /usr/local/mycat/conf/ 
# 编辑文件
vim schema.xml

替换成下面配置

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
<!--配置数据表--> 
<schema name="wf" checkSQLschema="false" sqlMaxLimit="100"> 
<table name="dept" dataNode="dn1,dn2" rule="mod-long" /> 
</schema> 
<!--配置分片关系--> 
<dataNode name="dn1" dataHost="cluster1" database="db" /> 
<!-- 每有一个集群都需要增加一个分片 --> 
<dataNode name="dn2" dataHost="cluster2" database="db" /> 

<!--配置连接信息  配置第一个mysql集群--> 
<dataHost name="cluster1" maxCon="1000" minCon="10" balance="3" 
writeType="1" dbType="mysql" dbDriver="native" switchType="1" 
slaveThreshold="100"> 
<heartbeat>select user()</heartbeat> 
<writeHost host="W1" url="192.168.1.110:3306" user="root" 
password="root"> 
<readHost host="W1R1" url="192.168.1.110:3307" user="root" 
password="root" /> 
</writeHost> 
</dataHost> 
<!--配置连接信息 下面配置第二个mysql集群--> 
<dataHost name="cluster2" maxCon="1000" minCon="10" balance="3" 
writeType="1" dbType="mysql" dbDriver="native" switchType="1" 
slaveThreshold="100"> 
<heartbeat>select user()</heartbeat> 
<writeHost host="W2" url="192.168.1.110:3316" user="root" 
password="root"> 
<readHost host="W2R1" url="192.168.1.110:3317" user="root" 
password="root" /> 
</writeHost> 
</dataHost> 

</mycat:schema>

3. 配置 rule.xml

<function name="mod-long" class="io.mycat.route.function.PartitionByMod"> 
	<property name="count">1</property> 
</function>

将上面的替换下面部分 , count 是mysql 集群数量

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_MySQL_07

4. 重启 MyCat 进行测试

# 进入脚本目录
cd /usr/local/mycat/bin/ 
# 重启并打印日志
./startup_nowrap.sh && tail -f ../logs/mycat.log

5. 进入 MySQL 工具

直接使用mycat端口登陆

Linux结合Docker 整合 Mycat集群和Mysql 主从集群_mysql_08


成功连接,后mycat 就可以管理mysql服务器了