mycat实现读写分离

1、在本地复制多一个数据库(有条件拥有多个服务器的忽略)

1)找到mysql实例文件夹和数据文件夹(通常在C:\Program Files下和C:\ProgramData下)
mycat实现读写分离_第1张图片
mycat实现读写分离_第2张图片
直接都复制一份出来做从库
2)修改从库配置my.ini

[client]
port=3307
[mysqld]
port=3307
basedir="C:/Program Files/MySQL/MySQL Server 5.7-bak"
datadir="C:/Program Files/MySQL/MySQL Server 5.7-bak/Data"
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7-bak/Uploads"

反正就是有之前主库的 MySQL Server 5.7 都要替换为从库 MySQL Server 5.7-bak

然后以管理员身份打开 进入到从库的 bin目录下 输入命令

C:\Program Files\MySQL\MySQL Server 5.7-bak\bin> mysqld-nt install MySQL2  --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7-bak\my.ini"

加入window服务,这样就可以了
启动从库之前,一定要把 data目录下的 auto.cnf 文件删除了,再启动从库,不然从库的server-uuid和主库的server-uuid相同,到时候做主从复制的时候会有问题的,删除后再启动,他会自动生成一个新的auto.cnf 文件,server-uuid也会是新的

2、配置mysql主从同步

1)注意:
主DB server和从DB server数据库的版本一致

主DB server和从DB server数据库数据一致[ 这里就会可以把主的备份在从上还原,也可以直接将主的数据目录拷贝到从的相应数据目录]

主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一
2)主库配置 在my.ini修改:
#开启主从复制,主库的配置
log-bin= mysql3306-bin

#指定主库serverid
server-id=101

#指定同步的数据库,如果不指定则同步全部数据库
binlog-do-db=需要同步的数据库名
#如果需要同步多个数据库配置多个即可
binlog-do-db=需要同步的数据库名1
binlog-do-db=需要同步的数据库名2

3)#授权用户slave01使用123456密码登录主mysql,用于从库访问主库
grant replication slave on . to ‘slave01’@'127.0.0.1’identified by ‘123456’;
flush privileges;
#备注 如果从库不是本机的话,可以使用通配符配置
#192.168.0.%通配符,表示0-255的IP都可访问主服务器,正式环境请配置指定从服务器IP
#若将 192.168.0.% 改为 %,则任何ip均可作为其从数据库来访问主服务器

4)从库配置 在my.ini修改 就一个
#指定serverid,只要不重复即可

server-id=102

5)打开window的 服务 找到主库和从库的服务,分别重启两个的服务
mycat实现读写分离_第3张图片
6)在主库中执行查询语句
SHOW MASTER STATUS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOaSHMQJ-1639728103883)(https://img-log.csdnimg.cn/a58c3163c0da49c8bf3c532c7447adce.png)]

然后在从库中执行以下sql,master_log_file和master_log_pos分别对应上面在主库查到的两个数据

CHANGE  MASTER TO
 master_host='127.0.0.1',
 master_user='slave01',
 master_password='123456',
 master_port=3306,
 master_log_file='mysql3306-bin.000023',
 master_log_pos=484301916;

#启动slave同步
START SLAVE;

启动后查看从库状态 show slave status 显示以下
mycat实现读写分离_第4张图片

3、使用mycat实现读写分离

1)下载mycat https://github.com/MyCATApache/Mycat-Server
解压
进入 conf目录
修改这两个配置文件 schema.xml 和 server.xml ,先备份一下
server.xml (如果只是对应一个数据库,那就写一个分片就可以了)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="defaultSqlParser">druidparser</property>
        </system>
         <!--以下设置为应用访问帐号权限 -->
        <user name="root">
                <property name="password">root</property>
                <!--分片名,对应 schema.xml的分片id(通常直接改成需要同步的数据库名也可以)-->
                <property name="schemas">test1,test2</property>
        </user>
         <!--以下设置为应用只读帐号权限 -->
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">test1,test2</property>
                <property name="readOnly">true</property>
        </user>
</mycat:server>

schema.xml (如果只是对应一个数据库,那就写一个就可以了)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="test1" checkSQLschema="ture" sqlMaxLimit="100" dataNode='dn1'></schema>
		<schema name="test2" checkSQLschema="ture" sqlMaxLimit="100" dataNode='dn2'></schema>

        <dataNode name="dn1" dataHost="dthost1" database="数据库名1"/>
        <dataNode name="dn2" dataHost="dthost2" database="数据库名2"/>
		
		<dataHost name="dthost1" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="wh1" url="localhost:3306" user="root" password="root">       
			<readHost host="rh1" url="localhost:3307" user="root" password="root"/>
		</writeHost> 
        </dataHost>
		
        <dataHost name="dthost2" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="wh2" url="localhost:3306" user="root" password="root">       
			<readHost host="rh2" url="localhost:3307" user="root" password="root"/>
		</writeHost> 
        </dataHost>
</mycat:schema>

mycat就配置完成了,开启mycat ,使用管理员身份执行
cd到mycat的bin目录下,执行 mycat.bat start 开启,开启成功后,可以使用链接数据库软件链接mycat,和链接mysql是一样的,端口默认是 8066 ,账号密码是 上面server.xml 配置的 root/root 。
然后在项目中的jdbc链接配置中url端口3306改为8066,交给mycatl管理,就可以实现读写分离了,非常的方便。

mycat的schema.xml 和 server.xml 的配置属性说明可以到
https://blog.csdn.net/weixin_41843699/article/details/92029826
这个博客上查看

因为这个是我做完后,根据记忆整理的,可能会有遗漏,如果在做的过程中,有什么问题可以在发一下评论

你可能感兴趣的:(mysql,数据库,服务器,java,mycat)