一、实验环境
1.mycat1.6.7.3
2.mysql5.7
3.docker最新版
注意选择环境情况
经过本人不断的查阅资料与我不断的实验,mycat连接mysql的版本5.7,不要使用MySQL8.0版本,不然会出现很多错误。
二、docker容器中的mysql实现主从复制(一主一从)
- 主机配置文件
编辑mysql配置文件。如果不存在就自己新建my.cnf
添加代码:
[client]
port = 3306
[mysqld]
server-id=1 //ID不要重复
log-bin=mysql-bin //日志名,可以在前面添加路径
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-do-db=db1 //需要复制的数据库
binlog_format=STATEMENT
- 从机配置文件
[client]
port = 3306
[mysqld]
server-id=2
relay-log=mysql-relay //启动relay日志
- 进入主机的mysql命令窗口
#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@ %'IDENTIFIED BY '123123'; //创建slave用户供从机使用
输入:查看主机的状态,纪录日志文件名,从机复制的接入点:154
- 进入从机的MySQL命令窗口
输入连接主机的命令:
CHANGE MASTER TO MASTER_HOST='172.17.0.3', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;
start slave; //启动复制操作
show slave status\G; //查看状态连接情况
出现两个yes表示连接成功
- Mycat中的schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="172.17.0.3:3306" user="root"
password="root">
<readHost host="hostS1" url="172.17.0.2:3306" user="root" password="root"/>
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>
远程连接Mycat的命令
mysql -uroot -p123456 -P8066 -h192.168.183.131 --default_auth=mysql_native_password
负载均衡类型,目前的取值有4种:
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",所有读请求随机的分发到readhost执行,writerHost不负担读压力。
- 安装mysql容器命令
docker run -d -p 9003:3306 --privileged=true -v /myMysql/twoCopy/conf/s2:/etc/mysql -v /myMysql/twoCopy/data/s2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysqlS2 mysql:5.7