MySQL读写分离

Mysql进阶之Mysql-proxy的读写分离 Mysql-proxy简介: mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤, 从而实现读写分离和负载平衡。对于应用来说,My... 阅读详情

MySQL读写分离

主从复制

 

 

 

 

MySQL主从复制作用:数据备份、读写分离、高可用、集群。

主: 读和写权限

从: 读权限

读写分离的好处是能够提高服务器性能,减轻服务压力

主从复制产生的问题:

 1)延迟性 场景少 大多数先查询从节点,再查主节点

 2)主从不一致,清除所有数据,重新同步

 

数据库备份: 

   支付项目 支付回调幂等性。

   MQ有延迟,MQ幂等性,网络不通,消息重复消费

 

 

概念

影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。

 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。

 MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。

 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。

 在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。

 日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】

 日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。

 可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。

【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】

解决问题

数据如何不被丢失

备份

读写分离

数据库负载均衡

高可用

 

 

 

服务器准备

192.168.110.177  主服务器 master

192.168.110.178  从服务器slave

修改主(master)服务器

vi /etc/my.cnf  新增以下内容

server_id=177  ###服务器id

log-bin=mysql-bin   ###开启日志文件

重启服务器

service mysqld start

service iptables stop

 

主服务器给从服务器账号授权

GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';

//一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

登录主服务器的mysql,查询master的状态

show master status;

 

注意: 如果结果为null,则主服务器my.cf没有配置好.

 

修改从(slave)服务器

server_id=178

log-bin=mysql-bin

binlog_do_db=test

 

change master to master_host='192.168.110.177',master_user='mysync',master_password='q123456',

         master_log_file='mysql-bin.000002',master_log_pos=343;

 

启动同步

start slave

 

检查从服务器复制功能状态

SHOW SLAVE STATUS

 

Slave_IO_Running: Yes    //此状态必须YES
Slave_SQL_Running: Yes     //此状态必须YES

 

读写分离

什么是读写分离

在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。

读写分离的好处

 1)分摊服务器压力,提高机器的系统处理效率

    读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;

   假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能;

  2)增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务

 

 

主从复制原理

 依赖于二进制日志,binary-log.

 二进制日志中记录引起数据库发生改变的语句

  Insert 、delete、update、create table

 

Scale-up与Scale-out区别

Scale Out是指Application可以在水平方向上扩展。一般对数据中心的应用而言,Scale out指的是当添加更多的机器时,应用仍然可以很好的利用这些机器的资源来提升自己的效率从而达到很好的扩展性。

Scale Up是指Application可以在垂直方向上扩展。一般对单台机器而言,Scale Up值得是当某个计算节点(机器)添加更多的CPU Cores,存储设备,使用更大的内存时,应用可以很充分的利用这些资源来提升自己的效率从而达到很好的扩展性。

MyCat

什么是  Mycat

是一个开源的分布式数据库系统,但是因为数据库一般都有自己的数据库引擎,而Mycat并没有属于自己的独有数据库引擎,所有严格意义上说并不能算是一个完整的数据库系统,只能说是一个在应用和数据库之间起桥梁作用的中间件。

在Mycat中间件出现之前,MySQL主从复制集群,如果要实现读写分离,一般是在程序段实现,这样就带来了一个问题,即数据段和程序的耦合度太高,如果数据库的地址发生了改变,那么我的程序也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而对于很多应用来说,并不能接受;
 

  引入Mycat中间件能很好地对程序和数据库进行解耦,这样,程序只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务的,大量的通用数据聚合、事务、数据源切换等工作都由中间件来处理;

  Mycat中间件的原理是对数据进行分片处理,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成完成的数据库存储,有点类似磁盘阵列中的RAID0.

 

Mycat安装

创建表结构

CREATE DATABASE IF NOT EXISTS `weibo_simple`;

-- ------------------------------------
-- Table structure for `t_users` 用户表
-- ------------------------------------
DROPTABLEIFEXISTS`t_users`;
CREATETABLE`t_users` (
  `user_id`varchar(64) NOTNULLCOMMENT'注册用户ID',
  `user_email`varchar(64) NOTNULLCOMMENT'注册用户邮箱',
  `user_password`varchar(64) NOTNULLCOMMENT'注册用户密码',
  `user_nikename`varchar(64) NOTNULLCOMMENT'注册用户昵称',
  `user_creatime` datetime NOTNULLCOMMENT'注册时间',
  `user_status` tinyint(1) NOTNULLCOMMENT'验证状态  1:已验证  0:未验证',
  `user_deleteflag` tinyint(1) NOTNULLCOMMENT'删除标记  1:已删除 0:未删除',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDBDEFAULTCHARSET=utf8;
 
-- -------------------------------------
-- Table structure for `t_message`微博表
-- -------------------------------------
DROPTABLEIFEXISTS`t_message`;
CREATETABLE`t_message` (
  `messages_id`varchar(64) NOTNULLCOMMENT'微博ID',
  `user_id`varchar(64) NOTNULLCOMMENT'发表用户',
  `messages_info`varchar(255) DEFAULTNULLCOMMENT'微博内容',
  `messages_time` datetime DEFAULTNULLCOMMENT'发布时间',
  `messages_commentnum`int(12) DEFAULTNULLCOMMENT'评论次数',
  `message_deleteflag` tinyint(1) NOTNULLCOMMENT'删除标记 1:已删除 0:未删除',
  `message_viewnum`int(12) DEFAULTNULLCOMMENT'被浏览量',
  PRIMARY KEY (`messages_id`),
  KEY`user_id` (`user_id`),
  CONSTRAINT`t_message_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES`t_users` (`user_id`)
) ENGINE=InnoDBDEFAULTCHARSET=utf8;

 

 

配置server.xml

 

         <!-- 添加user -->

   <user name="mycat">

    <property name="password">mycat</property>

    <property name="schemas">mycat</property>

    </user>

        

         <!-- 添加user -->

   <user name="mycat_red">

    <property name="password">mycat_red</property>

    <property name="schemas">mycat</property>

         <property name="readOnly">true</property>

    </user>

 

配置schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <!-- 与server.xml中user的schemas名一致 -->

    <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="172.27.185.1:3306" user="root" password="root">

        </writeHost>

        <writeHost host="hostSlave" url="172.27.185.2:3306" user="root" password="root"/>

    </dataHost>

   

</mycat:schema>

配置rule.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- - - Licensed under the Apache License, Version 2.0 (the "License");

         - you may not use this file except in compliance with the License. - You

         may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0

         - - Unless required by applicable law or agreed to in writing, software -

         distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT

         WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the

         License for the specific language governing permissions and - limitations

         under the License. -->

<!DOCTYPE mycat:rule SYSTEM "rule.dtd">

<mycat:rule xmlns:mycat="http://org.opencloudb/">

          <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>

</mycat:rule>

为了更好地定位错误,修改log4j.xml

<level value="debug" />

双击startup_nowrap.bat开始启动

 

常见问题

SHOW MASTER STATUS 如果为,则在my.ini文件中添加一行

log-bin=mysql-bin

 

给账号分配权限

grant all privileges on *.* to 'root'@'172.27.185.1' identified by 'root';

查询服务器server_id

SHOW VARIABLES LIKE 'serve

 

Mysql 读写分离中间件 mysql读写分离算是很早就提出的一个提高数据库性能的方案,最少有10多年之久了吧,但是实际应用中非常多的企业系统中还是在使用MySQL主从,甚至就是一个mysql。甚至很多资深的开发人员知道读写分离,什么mycat 等等,但是真正用于生产的还是不多。今天我们就给大家推荐一款轻量级,配置简单搭建方便的读写分离中间件。经过多款读写分离中间件比对后最为实用,非常适合中小型系统的读写分离中间件 maxscale。 阅读详情

相关推荐

mysql读写分离

1.创建登陆用户create user 'maxscale_monitor'@'192.168.142.%' identified with mysql_native_password by 'Admin@123456';3.创建路由用户:create user 'maxscale_route'@'192.168.142.%' identified with mysql_native_password by 'Admin@123456';高可用:底层mysql,如果从库挂了,自动摘除流量;

2301_78530830的博客 1047

Mysql面试题整理

请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别? Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效.

记得微笑的博客 2129

MySQL的读写分离的配置

MySQL的读写分离的配置

hzk1791318012的博客 1781

MySQL主从复制与读写分离

常用命令: service mysqld start service iptables stop mysql –u root  主从复制   概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。  假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。  MYSQL-B收到后,写入本地日志系...

飞上云端看彩虹 654

机器学习kaggle案例:风控评分卡模型(Give_Me_Some_Credit)

kaggle链接:https://www.kaggle.com/c/GiveMeSomeCredit ipynb文件:https://github.com/824024445/KaggleCases/blob/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0kaggle%E6%A1%88%E4%BE%8B%EF%BC%9A%E9%A3%8E%E6%8E%A7%...

weixin_42662126的博客 1万+

从FSI到三层堆叠:一文搞懂车载CIS图像传感器技术演进与选型避坑

本文深入解析车载CIS图像传感器从FSI到三层堆叠的技术演进,揭示不同结构在低光性能、HDR表现和温度稳定性上的关键差异。通过实测数据对比,指导智能驾驶系统选型策略,帮助开发者规避成本与性能的常见陷阱,提升车载摄像头在复杂环境下的成像质量。

weixin_30689307的博客 101

MySQL主从架构、读写分离、集群相关面试问题

文章目录一、MySQL主从同步原理二、MySQL主从集群面试相关问题1、全库同步与部分同步2、GTID同步集群3、集群扩容与MySQL数据迁移4、理解半同步复制5、主从集群与读写分离6、扩展更复杂的集群结构 一、MySQL主从同步原理 既然要解决MySQL数据库的分布式集群化问题,那就不能不先了解MySQL自身提供的主从同步原理。这是构建MySQL集群的基础,也是后续进行分库分表的基础,更是MySQL进行生产环境部署的基础。 其实数据库的主从同步,就是为了要保证多个数据库之间的数据保持一致。如果要保证数据能

严老板的技术梦想博客 1万+

Matlab实现POD本征正交分解数据降维模型

近年来,随着大数据时代的到来,各种复杂的工程问题产生了海量的高维数据,如何有效降维、提取数据中的关键信息成为了众多领域中的重要问题。在传统的数据降维方法中,PCTFA(主成分分析)是一种典型的统计方法,然而对于流体动力学等非线性问题,PCTFA在处理时可能失去部分物理意义,难以捕捉到系统的复杂性。在降维过程中,POD提取的主要特征通常是一组复杂的正交基函数,如何将这些结果有效地转化为直观且易于理解的物理意义,特别是在实际应用中,对该特征的理解和分析,依然是一个重要的课题。本项目的扩展性也得到了有效体现。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1216

读写分离_一文带你了解 Mysql 读写分离

来源 | yes的练级攻略作者 |yes的练级攻略因为用户的增多,数据的增多,单机的数据库往往支撑不住快速发展的业务,所以数据库集群就产生了!今天来说说读写分离的数据库集群方式!读写分离顾名思义就是读和写分离了,对应到数据库集群一般都是一主一从(一个主库,一个从库)或者一主多从(一个主库,多个从库),业务服务器把需要写的操作都写到主数据库中,读的操作都去从库查询。主库会同步数据到从库保...

weixin_39634351的博客 287

相场断裂模型中的各向异性机制:从裂纹密度到驱动力的数值实现

断裂力学是研究材料在载荷作用下裂纹萌生与扩展规律的基础学科,其核心在于理解材料失效的能量准则与路径选择。传统方法通常预设裂纹路径,而相场断裂模型通过引入连续的相场变量,将裂纹模拟转化为一个能量最小化问题,能够自发预测裂纹的萌生、扩展与分叉,在工程失效分析中具有重要价值。当材料具有显著的方向依赖性时,如单晶、复合材料或轧制金属板,各向同性假设会失效,此时需引入各向异性机制。该机制的核心在于改造两个关键部分:一是裂纹密度函数,通过引入各向异性张量来定义不同方向上形成裂纹微结构的能量成本;二是临界能量释放率(断裂

weixin_31421613的博客 298

Multisim 14.0元件库下载权威指南:官方与社区资源

详解Multisim元件库下载的官方途径与可靠社区资源,帮助用户快速获取Multisim 14.0所需元件模型,提升电路仿真效率。

weixin_32925455的博客 749

常见八股面试题:用过 MySQL 读写分离吗?怎么做的?

读写分离就是读操作和写操作从以前的一台服务器上剥离开来,将主库压力分担一些到从库。 本质上是因为访问量太大,主库的压力过大,单机数据库无法支撑并发读写。

codenav的博客 487

计算机毕设:线性回归 Xgboost LSTM 预测黄金价格实战 完整代码数据视频讲解 可直接运行

线性回归 Xgboost LSTM 预测黄金价格实战 完整代码数据视频讲解 可直接运行

1761

mysql 读写分离_详解MySQL读写分离

主从复制的原理MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离。读写分离的原理简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本原理是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来把事务性查询导致的变更同步到从数据库中。基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客...

weixin_33173924的博客 3250

仿真学习系列(四十三):Sigrity仿真之平面谐振分析

在 SIGRITY 中,平面谐振分析(Plane Resonance Analysis)是一种用于分析信号完整性(SI)问题的高级仿真方法,尤其关注于层间电磁波的传播、谐振现象和信号衰减等问题。平面谐振分析通常用于电源分配网络(PDN)、信号线和参考平面之间的相互作用。本文将详细介绍如何在 SIGRITY 中进行平面谐振分析,并提供一些实用的分析方法与步骤,帮助工程师们识别和优化可能存在的设计问题。

案例文章,高速信号 481

基于Simscape的双PID比例调速阀与比例溢流阀液压控制系统建模与仿真

本文提出了一种基于Simscape的双PID液压控制系统建模方法,通过比例调速阀和比例溢流阀实现液压缸速度与压力的解耦控制。系统采用Simscape Fluids物理建模,精确模拟液压元件非线性特性。文章详细介绍了液压被控对象建模过程,包括动力单元、比例阀组合建模、执行机构及传感器配置。同时设计了双PID控制器架构,分别控制速度环和压力环,并给出参数整定建议。该方法通过物理网络直接模拟流体流动和压力动态,相比传统传递函数法具有更高精度,为液压系统仿真提供了有效解决方案。

AI的内部世界的博客 284

Mysql 读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

lihui12356的博客 2406

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MySQL 读写分离

简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性查询,而从数据库处理 select 查询。数据库复制被用来把主数据库上事务性查询导致的变更同步到集群中的从数据库。目前较为常见的 MySQL 读写分离分为两种:在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支。缺点是需要开发人员来实现,运维人员无从下手。代理一般位于客户端和服务器之间,代理服务器接到客户端

2501_91344566的博客 1221

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【MySQL数据库】MySQL读写分离

读写分离是为了优化数据库性能,通过将写操作(INSERT、UPDATE、DELETE)和读操作(SELECT)分别分配到不同的数据库实例上,以达到降低单一数据库负载、提高整体响应速度的目的。这通常通过数据库的主从复制技术来实现,主数据库负责处理写操作,从数据库负责处理读操作,并保持与主数据库的数据同步。1)基于程序代码内部实现:优点:性能好,不需要额外的硬件设备支出;首先,在 Master、Slave1、Slave2 的 MySQL 上开放权限给 Amoeba 访问。

Karoku的博客 1608

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 关于索引
下一篇: 通过join方法顺序执行多个线程
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值