准备主从节点,这里是一主两从
修改主节点mysql的my.cnf配置,在[mysqld]下增加配置
server-id=1
log-bin=master-bin
# 复制的数据库名
bin-lob-do-db=nacos-config
# 复制策略,默认STATMENT(sql复制),可选ROW(行记录复制)、MIXED(混合复制)
binlog-format=STATMENT
修改两个从节点myqsl的my.cnf配置,server-id分别为2和3
server-id=2
relay-log=slave-relay
server-id=3
relay-log=slave-relay
重启所有节点的mysql
然后连接主节点,在主节点执行sql给从节点赋权
GRANT XA_RECOVER_ADMIN ON *.* to 'root'@'%';
GRANT ALL PRIVILEGES ON *.* to 'root'@'%';
FLUSH PRIVILEGES;
在主节点执行sql查询主节点的状态
show master status;
切换从节点,在所有从节点都执行sql绑定主节点。注意master_log_file和master_log_pos为主节点查询到的file和position
change master to master_host='192.168.xx.xx' , master_user='root',master_password='123456',master_log_file='master-bin.000001',master_log_pos=6155;
再执行start slave开启从节点
start slave;
开启完成之后可以查询子节点的状态确认是否成功绑定主节点,如果master_log和master_position设置正确,并且slave_io_running和slave_sql_running都为yes,且表示绑定成功
show slave STATUS;
如果绑定失败,可以执行stop slave;和RESET slave; 再重新绑定主节点。
然后在主节点执行语句,观察是否同步到从节点即可。
主从同步已经完成之后,就可以利用mycat2实现读写分离,将写请求发送到主节点,读请求发送到从节点。
首先确认安装java8环境
在主节点创建 Mycat 使用的数据库 mycat
CREATE DATABASE IF NOT EXISTS `mycat`;
这个库称为 Mycat 的原型库(prototype),Mycat 在启动时,会自动在原型库下创建其运行时所需的数据表。
下载 并安装 Mycat
这里选择了mycat2-1.21-release-jar-with-dependencies.jar
和mycat2-install-template-1.21.zip
mkdir -p /home/mycat2
cd /home/mycat2
# 下载安装包
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
# 下载 Mycat 2 所需依赖 jar
wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
unzip mycat2-install-template-1.21.zip
cd mycat
# 复制 Mycat 2 所需依赖 jar 到 mycat 的 lib 文件夹
cp ../mycat2-1.21-release-jar-with-dependencies.jar lib/
# 授予 bin 目录下所有命令可执行权限
chmod 777 bin/*
配置 Mycat 原型库的数据源(datasource)信息,到/home/mycat2/mycat/conf/datasources目录编辑prototypeDs.datasource.json
{
// 数据库类型
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// 数据库读写类型:READ、WRITE、READ_WRITE。Mycat 对数据库需要是可读可写的
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称,这里不要修改
"name":"prototypeDs",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 数据库连接,这里直接配置在主节点
"url":"jdbc:mysql://localhost:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
复制主从数据库的数据源信息
cp prototypeDs.datasource.json master.datasource.json
cp prototypeDs.datasource.json slave1.datasource.json
cp prototypeDs.datasource.json slave2.datasource.json
编辑master数据源信息
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
# 主数据源为可读可写
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
# 名称为master
"name":"master",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://localhost:3306/nacos-config?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
编辑slave数据源信息
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
# 从数据源配置为只读即可
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
# 名称为slave1
"name":"slave1",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://localhost:3307/nacos-config?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
# 从数据源配置为只读即可
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
# 名称为slave2
"name":"slave2",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://localhost:3308/nacos-config?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
配置集群(cluster)信息
cd /home/mycat2/mycat/conf/clusters
cp prototype.cluster.json nacos-config.cluster.json
vim nacos-config.cluster.json
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"master"
],
"replicas":[
"slave1",
"slave2"
],
"maxCon":200,
# 集群名称
"name":"nacos-config-cluster",
"readBalanceType":"BALANCE_ALL",
"switchType":"NOT_SWITCH"
}
配置物理库和 Mycat 中数据源集群的关系
cd /home/mycat2/mycat/conf/schemas
touch nacos-config.schema.json
vim nacos-config.schema.json
{
# 物理库为nacos-config
"schemaName":"nacos-config",
"shardingTables":{},
# 目标名称为cluser配置中的集群名称
"targetName":"nacos-config-cluster",
"views":{}
}
修改 Mycat 登录用户信息
cd /home/mycat2/mycat/conf/users
vim root.user.json
{
"dialect":"mysql",
"ip":null,
# 由于mycat原型库建在主节点,所以这里使用主节点的密码
"password":"123456",
"transactionType":"proxy",
"username":"root"
}
启动 Mycat
cd /home/mycat2/mycat/bin
./mycat start
启动完成,在navicat创建连接并验证,mycat端口默认8066
插入数据再到主库和从库查询是否有这笔数据