MySQL读写分离

介绍

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

MySQL读写分离_第1张图片

目前较为常见的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 文件中配置读写分离、分库分表等内容

MySQL读写分离_第2张图片

2、配置文件设置

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

密码:123456

USERDB表示是逻辑库

<user name="root">
  <property name="password">123456property>
  <property name="schemas">USERDBproperty>

user>

<user name="user">
  <property name="password">userproperty>
  <property name="schemas">USERDBproperty>
  <property name="readOnly">trueproperty>
user>

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


DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	
	<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100"
		dataNode="dn1">schema>
	
	<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>
		
		<writeHost host="192.168.200.152" url="192.168.200.152:3306"
			user="root"
			password="123456">
			
			<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 是运行日志

下图表示主从库连接成功

MySQL读写分离_第3张图片

MySQL读写分离_第4张图片

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

MySQL读写分离_第5张图片

在这里插入图片描述

在这里插入图片描述

查看mycat 的数据端口8066

MySQL读写分离_第6张图片

查看逻辑数据库

MySQL读写分离_第7张图片

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

MySQL读写分离_第8张图片

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

主库设置通用日志开启

MySQL读写分离_第9张图片

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

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

MySQL读写分离_第10张图片

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

MySQL读写分离_第11张图片

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

MySQL读写分离_第12张图片

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

在这里插入图片描述

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

MySQL读写分离_第13张图片

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

sudo systemctl stop mysql

MySQL读写分离_第14张图片

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

MySQL读写分离_第15张图片

杂项

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

你可能感兴趣的:(MySQL,mysql,数据库)