该架构只能主机写入和读取,从机只能读取
主:192.168.0.1;从:192.168.0.2
保证两台服务器可以互相访问,且端口打开
[mysqld]
# 主服务器唯一ID,一般为ip第四位
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
# binlog-ignore-db=information_schema
# 设置需要复制的数据库,不配置代表所有,但切记配置不要复制的库,建议基础库都不排除掉
# binlog-do-db=test1
# 设置binlog格式
binlog_format=STATEMENT
binlog 日志有三种格式
[mysqld]
server-id=2
# 启用中继日志
relay-log=mysql-relay
重启主从数据库
# 创建用户
CREATE USER 'myslave'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'%';
# 查看主机的状态
mysql> show master status;
+---------------+-----------+--------------+------------------+-----------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+-----------+--------------+------------------+-----------------------------------------------+
| binlog.000001 | 587 | test1 | mysql | |
+---------------+-----------+--------------+------------------+-----------------------------------------------+
# 停止复制
stop slave;
# 重置复制信息
reset master;
reset slave;
配置主机信息
# 配置复制信息
CHANGE MASTER TO
MASTER_HOST = '192.168.0.1',
MASTER_PORT = 3306,
MASTER_USER = 'myslave',
MASTER_PASSWORD = '123456',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=587;
# 开始复制
start slave;
# 查看从机状态,出现双yes即为正常
show slave status\G;
该架构两个主机都可以读取
主1:192.168.0.1;主2:192.168.0.2
[mysqld]
# 主服务器唯一ID,一般为ip第四位
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
# binlog-ignore-db=information_schema
# 设置需要复制的数据库,不配置代表所有,但切记配置不要复制的库,建议基础库都不排除掉
# binlog-do-db=test1
# 设置binlog格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
# 表示自增长字段每次递增的量,指自己字段的起始值,其默认值是1,取值范围是1~65535(主要是区分M1,M2的自增)
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1~65535
auto-increment-offset=1
[mysqld]
# 主服务器唯一ID,一般为ip第四位
server-id=2
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
# binlog-ignore-db=information_schema
# 设置需要复制的数据库,不配置代表所有,但切记配置不要复制的库,建议基础库都不排除掉
# binlog-do-db=test1
# 设置binlog格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
# 表示自增长字段每次递增的量,指自己字段的起始值,其默认值是1,取值范围是1~65535(主要是区分M1,M2的自增)
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1~65535
auto-increment-offset=2
重启主从数据库
# 创建用户
CREATE USER 'myslave'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'%';
# 停止复制
stop slave;
# 重置复制信息
reset master;
reset slave;
# 查看主机的状态、记录下来
mysql> show master status;
+---------------+-----------+--------------+------------------+-----------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+-----------+--------------+------------------+-----------------------------------------------+
| binlog.000001 | 587 | test1 | mysql | |
+---------------+-----------+--------------+------------------+-----------------------------------------------+
# 配置复制信息
CHANGE MASTER TO
MASTER_HOST = '192.168.0.2',
MASTER_PORT = 3306,
MASTER_USER = 'myslave',
MASTER_PASSWORD = '123456',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=587;
# 开始复制
start slave;
# 查看从机状态,出现双yes即为正常
show slave status\G;
# 配置复制信息
CHANGE MASTER TO
MASTER_HOST = '192.168.0.1',
MASTER_PORT = 3306,
MASTER_USER = 'myslave',
MASTER_PASSWORD = '123456',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=587;
# 开始复制
start slave;
# 查看从机状态,出现双yes即为正常
show slave status\G;
MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。
下载地址:https://github.com/MyCATApache/Mycat-Server/releases
# 下载
wget http://dl.mycat.org.cn/1.6.7.6/20210730131311/Mycat-server-1.6.7.6-release-20210730131311-linux.tar.gz
#解压
tar -xvf Mycat-server-1.6.7.6-release-20210730131311-linux.tar.gz
schema.xml
定义逻辑库,表、分片节点等内容rule.xml
定义分片规则server.xml
定义用户以及系统相关变量,如端口等由于mycat1.6仅支持mysql5,不支持mysql8, 首先需要替换bin目录下面的mysq驱动文件为对应版本的。
将mysql驱动上传到mycat的lib目录下,替换之前的驱动
修改配置文件schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 在server.xml中被指定的逻辑库 -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1" dataNode="dn1">
</schema>
<!-- 对应schema中的 DataNode,database 是真正物理上的数据库 -->
<dataNode name="dn1" dataHost="host1" database="my_sql_test" />
<!-- name对应 dataNode 的 datatHost -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<!-- 心跳检测 -->
<heartbeat>select user()</heartbeat>
<!-- 定义写主机 -->
<writeHost host="hostM1" url="jdbc:mysql://192.168.0.1:3306" user="myslave" password="123456">
<redaHost host="hostS1" url="jdbc:mysql://192.168.0.2:3306" user="myslave" password="123456"></redaHost>
</writeHost>
</dataHost>
</mycat:schema>
dataNode 的 database
属性,为MySQL 真实的数据库名称。
dataHost 的 balance
属性,通过此属性配置读写分离的类型
balance="0"
不开启读写分离机制,所有读操作都发送到当前可用的 writeHostbalance="1"
全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单来说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与 select 语句的负载均衡。balance="2"
所有读操作都随机的在 writeHost、readHost 上分发balance="3"
所有读请求随机的分发到 readHost 执行,writeHost 不负担读压力dataHost 的 writeType
属性:
writeType="0"
所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeType="1"
所有操作都随机的发送到配置的 writeHost,1.5以后废弃不推荐dataHost 的 switchType
属性:
switchType="1"
默认值,自动切换switchType="-1"
不自动切换switchType="2"
基于MySQL 主从同步的状态决定是否切换修改配置文件server.xml
<!-- 连接mycat的用户信息 -->
<user name="mycat" defaultAccount="true">
<!-- 密码 -->
<property name="password">123456</property>
<!-- 逻辑库名称 -->
<property name="schemas">TESTDB</property>
<!-- 默认逻辑库 -->
<property name="defaultSchema">TESTDB</property>
</user>
# 启动
./mycat start
# 停止
./mycat stop
# 前台运行
./mycat console
# 重启服务
./mycat restart
# 暂停
./mycat pause
# 查看启动状态
./mycat status