一、 mysql主从搭建
1.安装mysql拉取镜像
docker pull mysql
2.创建容器
创建主库
docker run -p 3306:3306 -d --name mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql
创建从库
docker run -p 3307:3306 -d --name mysqlslave --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql
3.进入到容器内部创建链接密码
CREATE USER 'mycat'@'%' IDENTIFIED BY 'mycat';
4.给账号加权限
ALTER USER 'mycat'@'%' IDENTIFIED WITH mysql_native_password BY 'mycat';
GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%';
FLUSH PRIVILEGES;
5.查看主库的binlog
show master status
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 | 1137 | | | |
+---------------+----------+--------------+------------------+-------------------+
6.查看主库容器ip进入从库建立链接
docker inspect mysql | grep "IPAddress"
进入从库配置
change master to master_host='172.17.0.2',master_port=3306,master_user='mycat',master_password='mycat',master_log_file='binlog.000002',master_log_pos=1137;
7.启动主从
start slave
8.查看主从是否连接成功
show slave status\G
IO线程和SQL线程都是YES说明主从连接成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
9.这里要注意的是mysql8链接密码方式更改:将用的plugin变更为mysql_native_password MySQL8的默认是caching_sha2_password
10.修改从库msql配置文件my.cnf server-id如果两个库的server的id是一样的话会导致失败
复制容器内部的配置文件到宿主机修改
docker cp mysqlslave:/etc/mysql/my.cnf /docker/mysql/
[mysqld]
server-id = 130
docker cp /docker/mysql/my.cnf mysqlslave:/etc/mysql/my.cnf
docker restart mysqlslave
二、搭建mycat
Mycat 原理它拦截了用户发送过来的 SQL 语句,首先对SQL语句做了一些特定的分析,例如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL语句发往后端的真实数据库,并将返回的结果做适当处理,最终再返回给用户 ,当数据达到一千万的时候就可以考虑分库分表了
1.拉取镜像
docker pull manondidi/mycat
2.创建容器为了方便修改配置我们先创建好容器然后把配置文件复制到宿主机
docker run -p 8066:8066 -p 9066:9066 -d --name mycat manondidi/mycat
3.复制配置文件到宿主机(先在宿主机把配置文件目录定好 我这里就放在 /docker/mycat/conf)
docker cp mycat:/usr/local/mycat/conf/rule.xml /docker/mycat/conf
docker cp mycat:/usr/local/mycat/conf/server.xml /docker/mycat/conf
docker cp mycat:/usr/local/mycat/conf/schema.xml /docker/mycat/conf
4.删除容器为了方便管理配置文件
docker rm -f mycat
5.重新构建
docker run -p 8066:8066 -p 9066:9066 -d --name mycat -v /docker/mycat/conf/rule.xml:/usr/local/mycat/conf/rule.xml -v /docker/mycat/conf/server.xml:/usr/local/mycat/conf/server.xml -v /docker/mycat/conf/schema.xml:/usr/local/mycat/conf/schema.xml --privileged=true manondidi/mycat
6.mycat的目录介绍
bin :mycat程序目录
conf :mycat的配置目录
log:mycat的日志目录
lib:mycat相关的jar包
7.配置文件介绍
rule.xml 这个是配置规则的配置文件
server.xml 这个是mycat的连接配置文件可以设置用户名和密码
schema.xml 这是是配置数据库的
8.编辑配置文件修改完成重启mycat
(1) schema.xml 配置连接
<table>
便签介绍:
Name:表名称
primaryKey:主键
subTables:分片表的表名设置
dataNode:数据节点
Rule:分片规则
取模mod-long
范围rang-long
<dataNode>
便签介绍:
Name:节点名称
dataHost:数据源名称
Database:真实的数据库名称
<dataHost>
便签介绍:
Name:数据源名称
maxCon:最大连接数
minCon:最小连接数
Balance:负载均衡类型,有0,1,2,3四种类型
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双
主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
均衡。
3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
(2) server.xml 配置账号密码
<user name="用户名称" defaultAccount="true">
<property name="password">密码</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
</user>
(3) rule.xml 配置分片规则
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">分片数</property>
</function>
分片规则:https://blog.csdn.net/zhouhuahao/article/details/115455954
配置规则 全局表配置规则 <table name="表名" primaryKey="主键" type="global" dataNode="dn1,dn2" /> 垂直拆分关联join <table name="news" primaryKey="id" type="global" dataNode="orders"> <childTable name="news_detail" primaryKey="id" joinKey="news_id" parentKey="id" /> </table>
<table name="orders" primaryKey="id" subTables="orders_$0-63" dataNode="orders" rule="mod-long" />
(4)有提供xa事务的支持,通过xa事务即可解决
开启事务 事务id必须唯一
XA START 事务id
一阶段:提交准备就绪
XA END 事务id
XA PREPARE 事务id 提交准备就绪
二阶段:提交 / 回滚
XA COMMIT 事务id
XA ROLLBACK 事务id
三、源码安装
1.解压文件
链接:https://pan.baidu.com/s/1bgDcAqtOTlM-8IKatQZA2Q 提取码:59ub
tar -zxvf jdk-8u20-linux-x64.tar.gz tar -zxvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
2.移动文件
mv jdk1.8.0_20 /usr/local/java
mv mycat /usr/local/mycat
3.配置java环境变量
vim /etc/profil
export JAVA_HOME=/usr/local/java
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
4.启动mycat
console | start | stop | restart | status | dump
./mycat start
5.连接
mysql -uroot -p -h127.0.0.1 -P8066 -DTESTDB
本文由:xiaoshu168 作者:xiaoshu611发表,转载请注明来源!