网站建设的目的定位盈利模式和功能,南京 外贸网站建设,西安网站seo推广,公司注册代理免费MySQL 读写分离配置指南
读写分离概述
什么是读写分离#xff1f;
读写分离是一种数据库架构优化技术#xff0c;基本原理是让主数据库#xff08;Master#xff09;处理事务性增、改、删操作#xff08;INSERT、UPDATE、DELETE#xff09;#xff0c;而从数据库#x…MySQL 读写分离配置指南
读写分离概述
什么是读写分离
读写分离是一种数据库架构优化技术基本原理是让主数据库Master处理事务性增、改、删操作INSERT、UPDATE、DELETE而从数据库Slave处理SELECT查询操作。通过数据库复制将事务性操作导致的变更同步到集群中的从数据库。
为什么要读写分离
数据库的写操作如写10000条数据可能要3分钟相对耗时数据库的读操作读10000条数据可能只要5秒钟相对快速读写分离解决数据库写入操作影响查询效率的问题
适用场景
数据库不一定要读写分离当程序使用数据库较多更新操作少而查询操作多的情况下考虑使用。利用数据库主从同步配合读写分离可以分担数据库压力提高性能。
MySQL 读写分离原理
读写分离只在主服务器上执行写操作在从服务器上执行读操作
主数据库Master负责处理所有写操作维护完整数据集从数据库Slave通过复制主数据库数据提供只读服务
常见实现方式
1. 基于程序代码内部实现
在代码中根据select、insert进行路由分类是生产环境应用最广泛的方式。
优点性能较好不需要额外硬件开支
缺点需要开发人员实现运维人员难以介入对大型复杂Java应用代码改动较大
2. 基于中间代理层实现
代理位于客户端和服务器之间接到请求后判断并转发到后端数据库。
代表性程序
MySQL-ProxyMySQL开源项目通过lua脚本进行SQL判断Atlas奇虎360开发维护的基于MySQL协议的数据中间层项目支持事务和存储过程Amoeba由陈思儒开发阿里巴巴用于生产环境但不支持事务和存储过程Mycat流行的基于Java的数据库中间件核心功能是分库分表配合主从模式可实现读写分离
Mycat 实现读写分离实战
环境准备主机角色IP地址系统环境备注mycat192.168.100.30Rocky Linux 9中间件节点slave192.168.100.20Rocky Linux 9从数据库节点master192.168.100.10Rocky Linux 9主数据库节点前置要求
关闭所有节点的防火墙和SELinux确保时钟同步所有节点安装MySQL完成master和slave的主从配置
配置步骤
1. 配置主机名解析
在所有节点的/etc/hosts文件中添加
192.168.100.10 master.example.com master
192.168.100.20 slave.example.com slave
192.168.100.30 mycat.example.com mycat2. 在Mycat节点安装Java环境
yum -y install java java-devel
java -version # 验证安装3. 部署Mycat服务
# 解压Mycat安装包
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/# 设置环境变量
echo export MYCAT_HOME/usr/local/mycat/ /etc/profile
source /etc/profile
echo $MYCAT_HOME # 验证环境变量4. 配置Mycat的schema.xml
编辑/usr/local/mycat/conf/schema.xml替换为以下内容
?xml version1.0?
!DOCTYPE mycat:schema SYSTEM schema.dtd
mycat:schema xmlns:mycathttp://io.mycat/schema nameUSERDB checkSQLschematrue sqlMaxLimit100 dataNodedn1/schema dataNode namedn1 dataHostlocalhost1 databasecy / dataHost namelocalhost1 maxCon1000 minCon10 balance3 dbTypemysql dbDrivernative writeType0 switchType1 slaveThreshold100 heartbeatselect user()/heartbeatwriteHost hosthostM1 url192.168.100.10:3306 userroot passwordredhatreadHost hosthostS1 url192.168.100.20:3306 userroot passwordredhat //writeHost/dataHost
/mycat:schema5. 配置Mycat的server.xml
编辑/usr/local/mycat/conf/server.xml确保root用户配置如下
user namerootproperty namepasswordredhat/propertyproperty nameschemasUSERDB/property
/user6. 启动Mycat服务
cd /usr/local/mycat/bin
./mycat start# 验证端口
netstat -tulnp | grep -E 8066|90667. 数据库权限配置
在主从数据库节点执行
GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY redhat WITH GRANT OPTION;
FLUSH PRIVILEGES;测试验证
1. 通过数据端口连接Mycat
mysql -uroot -predhat -P8066 -h127.0.0.12. 执行数据库操作
SHOW DATABASES;
USE USERDB;
SHOW TABLES;-- 插入测试数据
INSERT INTO xs VALUES(4, 22);-- 查询数据
SELECT * FROM xs;3. 通过管理端口查看读写分离状态
mysql -h127.0.0.1 -P9066 -uroot -predhat -e show datasource;预期输出应显示两个数据源主库hostM1的WRITE_LOAD值增加从库hostS1的READ_LOAD值增加。