读写分离:
1.在自己创建好的目录下 创建docker-compose.yml文件,修改yml文件
1. mkdir xxxxxxxx 创建文件夹 名字自己定
2. cd进去
3. docker-compose.yml
2.yml文件:
version: '3.1'
services:
mysqlm0:
image: mysql
container_name: mysqlm0
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--server-id=47
--log_bin=master-bin
--log_bin-index=master-bin.index
--skip-name-resolve
ports:
- 3306:3306
volumes:
- ./mysqlm0/data:/var/lib/mysql
mysqls0:
image: mysql
container_name: mysqls0
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--server-id=48
--relay-log-index=slave-relay-bin.index
--relay-log=slave-relay-bin
--log-bin=mysql-bin
--log-slave-updates=1
--skip-name-resolve
ports:
- 3307:3306
volumes:
- ./mysqls0/data:/var/lib/mysql
yml文件写好 》 docker-compose up -d 》进去到主容器docker exec -it 号码 bash 》mysql -u root -p 》 输入密码 》show master status; 》根据显示的值 在从容器的mysql中设置主从 》exit exit 》进去到主容器docker exec -it 号码 bash 》mysql -u root -p 》 输入密码 》
CHANGE MASTER TO
MASTER_HOST='192.168.145.128',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000003',
MASTER_LOG_POS=157;
在上面我们已经完成了主从模式 下面是读写分离
<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">
<readHost host="hostS1" url="localhost:3007" user="root" password="123456"></readHost>
</writeHost>
balance的配置有4
种:
1 不开启读写分离机制,所有读操作都发送到当前可⽤的
writeHost
上。
2 全部的
readHost
与
stand by writeHost
参与
select
语句的负载均衡,简单的说,当
双主双从模式
(M1->S1
,
M2->S2
,并且
M1
与
M2
互为主备
)
,正常情况下,
M2,S1,S2
都参与
select
语句的负载均衡。
3 所有读操作都随机的在
writeHost
、
readhost
上分发。
4 所有读请求随机的分发到
wiriteHost
对应的
readhost
执⾏,
writeHost
不负担读压
⼒,注意
balance=3
只在
Mycat 1.4
及其以后版本有,
1.3
没有。
balance的配置有4种:这个容易漏 特地在强调一下 这里用的是3
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" randomDataNode="dn1">
<!--
<table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
-->
</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>
<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">
<readHost host="hostS1" url="localhost:3007" user="root" password="123456"></readHost>
</writeHost>
<writeHost host="hostM2" url="localhost:3308" user="root" password="123456">
<readHost host="hostS2" url="localhost:3009" user="root" password="123456"></readHost>
</writeHost>
</dataHost>
</mycat:schema>