MySQL优化(四)——读写分离
1.MySQL高可用
主从复制 一主多备 多主多备
读写分离 减少IO开销,防止阻塞等等
2.主从复制参考
https://www.cnblogs.com/chx9832/p/12342626.html
3.MySQL读写分离------Mycat
1.Mycat暴露给外界访问ip地址,mycat在那一台机器上
2.ip就是对应机器ip,Mycat会虚拟出一个数据库,供外界连接 如:jdbc:mysql://192.168.xx.xx/dbname
3.Mycat会指定权限,让从机只能读,让主机能写能读,一般主机只做写
4.Mycat使用:
4.1 解压mycat,不要放在有中文目录的地方
4.2 修改mycat解压目录下的conf文件夹中server.xml文件,配置账户
<!-- 添加user -->
<user name="mycat_master">
<property name="password">mycat_master</property>
<property name="schemas">mycat</property>
</user>
<!-- 添加user -->
<user name="mycat_slave">
<property name="password">mycat_slave</property>
<property name="schemas">mycat</property>
<property name="readOnly">true</property>
</user>
4.3 配置schema.xml文件
<schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
<table name="t_users" primaryKey="user_id" dataNode="dn1" rule="rule1"/>
<table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" />
</schema>
<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple" />
<dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostMaster" url="192.168.7.11:3306" user="root" password="root">
</writeHost>
<writeHost host="hostSlave" url="192.168.7.22:3306" user="root" password="root"/>
</dataHost>
4.4 配置rule.xml
<tableRule name="rule1">
<rule>
<columns>user_id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<function name="func1" class="org.opencloudb.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
4.5 配置启动日志log4j.xml
<level value="debug" />
4.6 启动mycat 端口:8066
启动bin下startup_nowrap.bat
使用sqlyog模拟jdbc连接
新建一个主机的虚拟连接
连接成功后,就出现了配置的俩张表
虚拟主机可以执行读写操作,添加一条数据测试
回到主机查看,写操作成功
从机同样也是会同步这条数据
再新建一个连接,建立一个虚拟从机的连接
尝试修改之前的数据
提示只读
这样也就保证了
从机只能读不能写
做到了读写分离