MySQL读写分离

文章介绍了通过Mycat代理在MySQL主从服务器间实现读写分离的过程,包括Mycat的安装、配置文件设置,特别是`schema.xml`和`server.xml`的配置,以及端口、数据库连接设置。在主从服务器上,主服务器处理写操作,从服务器处理读操作,当主服务器不可用时,Mycat能自动切换到备用服务器。通过查看日志确认了读写操作的正确分配和故障切换功能。
摘要由CSDN通过智能技术生成

介绍

读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

在这里插入图片描述

目前较为常见的MySQL读写分离方式有:

程序代码内部实现

引入中间代理层方法:

  • MySQL_proxy
  • Mycat

我们这里也就是实验通过Mycat代理进行数据库读写,实现读写分离在不同的服务其上。

实践操作

网络配置

master(ubuntu): 192.168.200.152

slave(win10):192.168.200.1

1、安装Mycat

Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz(tar -zxvf解压)

建立链接,使得能够直接在任何路径下使用 mycat指令

root@ubuntu:/home/jyhlinux/mycat# ln -s /home/jyhlinux/mycat/bin/mycat /usr/bin/mycat

在 /home/jyhlinux/mycat/conf/schema.xml 文件中配置读写分离、分库分表等内容

在这里插入图片描述

2、配置文件设置

mycat 账号密码存储在**/home/jyhlinux/mycat/conf/server.xml** 中为:
账号:root

密码:123456

USERDB表示是逻辑库

<user name="root">
  <property name="password">123456</property>
  <property name="schemas">USERDB</property>

</user>

<user name="user">
  <property name="password">user</property>
  <property name="schemas">USERDB</property>
  <property name="readOnly">true</property>
</user>

/home/jyhlinux/mycat/conf/schema.xml:配置逻辑库和数据源、读写分离、分库分表信息等,主要配置的内容是逻辑库和逻辑表,数据节点以及物理数据库信息

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- 逻辑数据库 -->
	<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100"
		dataNode="dn1"></schema>
	<!-- 存储节点 mytest是主库中存在的-->
	<dataNode name="dn1" dataHost="node1" database="mytest" />
	<!-- 数据库主机 -->
	<dataHost name="node1" 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="192.168.200.152" url="192.168.200.152:3306"
			user="root"
			password="123456">
			<!-- can have multi read hosts -->
			<readHost host="192.168.200.152" url="192.168.200.152:3306"
				user="root" password="123456" />
		</writeHost>
		<!-- 写数据库宕机后的备份数据库 -->
		<writeHost host="192.168.200.152" url="192.168.200.152:3306"
			user="root"
			password="123456" />
	</dataHost>
</mycat:schema>

这里的配置是一个多主的配置

注意主库和从库都要设置能够被远程连接,这里实验时候从库忘记设置了:

参数解读

balance:

“0”:不开启读写分离

“1”:全部的readHoststand by writeHost参与select语句的负载

“2”:所有读操作随机readHostwriteHost上分发

“3”:所有读请求随机分发到writeHost对应的readHost上执行

writeType=“0”:所有写操作发送到配置的第一个writeHost,第一个挂掉切换到还生存的第二个writeHost

switchType

“-1”:不自动切换

“1”:自动切换,根据心跳select user()

“2”:基于MySQL的主从同步状态决定是否进行切换 show slave status

3、端口

8066:数据端口

9066:管理端口

具体操作

注意:主从库都要是mysql5.7,若不是,则mycat无法连接上去

./mycat start 

启动服务,默认在8066和9066端口

logs/wrapper.log 是启动日志

logs/mycat.log 是运行日志

下图表示主从库连接成功

在这里插入图片描述

在这里插入图片描述

show @@help; 查看帮助,有哪些变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看mycat 的数据端口8066

在这里插入图片描述

查看逻辑数据库

在这里插入图片描述

验证主库写,从库读的方法:采用通用日志,具体方法如下:
从库设置通用日志开启:set global general_log=on;

在这里插入图片描述

日志文件在目录:C:\ProgramData\MySQL\MySQL Server 5.7\Data 下

主库设置通用日志开启

在这里插入图片描述

日志文件在: /var/lib/mysql/ubuntu.log

然后在mycat:8066 (数据端口)中进行sql的读操作

在这里插入图片描述

在主库中查看日志发现没有查询记录

在这里插入图片描述

在从库查看日志,发现了查询的记录

在这里插入图片描述

此时测试插入(写)数据的sql:

在这里插入图片描述

在主库日志查看到插入的记录

在这里插入图片描述

主库停止服务,来查看是否切换到备用主库(win):

sudo systemctl stop mysql

在这里插入图片描述

观察可以发现读写都走备用主库(win:192.168.200.1)了

在这里插入图片描述

杂项

  • vim 到最后一行:$
  • vim 当前光标位置往前查:?[要查询的内容]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值