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,不可重复
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企业版
先测试连接,成功后方可连接。连接成功说明主服务器搭建完成。
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%';
搭建从库
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 工具
1.设置master相关信息
需要注意的四个地方:
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;
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 集群数量
4. 重启 MyCat 进行测试
# 进入脚本目录
cd /usr/local/mycat/bin/
# 重启并打印日志
./startup_nowrap.sh && tail -f ../logs/mycat.log
5. 进入 MySQL 工具
直接使用mycat端口登陆
成功连接,后mycat 就可以管理mysql服务器了