mysql读写分离

MySql读写分离实现

[亡魂溺海] 提交于 2019-11-29 21:04:54
技术原理 为什么?   进行中的项目,有大量的第三方数据频繁的写入,影响了读的效率。通过读写分离,可以实现读锁和写锁的竞争。读锁和写锁可以具体网上找其他资源了解。 怎么做?   1. 主从复制:主数据库有写操作,从数据库自动同步。从数据库通过I/O线程去请求主数据库的binlog日志文件(二进制日志,包含SQL的增删改查等,用来做备份恢复等),并写到中继日志中,SQL线程会读取中继日志,并解析成具体操作同步数据到从数据库。   2. 读写分离:数据库层面:主数据库复制写,从数据库复制读。软件(代码)层面:通过读写分离中间间,比如MyCat、shardingsphere等实现。 具体实现 数据库层面   1. 需要打开主库的二进制日志功能,通过配置文件修改。 (1)服务器ID命名 (2)日志功能开启 修改完后,重启sql服务,通过命令查看日志状态 (3)创建一个用户,并赋予replication slave权限。   2. 从库设置 (1)服务命名 (2)配置相关参数,重启服务 (3)连接主机,执行同步命令 代码程序层面    这里使用shardingsphere实现读写分离。 (1)相关jar引用 (2)读写分离配置 来源: https://www.cnblogs.com/knsbyoo/p/11532415.html

MySQL 读写分离

戏子无情 提交于 2019-11-29 19:38:32
面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 高并发这个阶段,肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是 app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗? 面试题剖析 如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。 MySQL 主从复制原理的是啥? 主库将变更写入 binlog 日志,然后从库连接到主库之后,从库有一个 IO 线程,将主库的 binlog 日志拷贝到自己本地,写入一个 relay 中继日志中。接着从库中有一个 SQL 线程会从中继日志读取 binlog,然后执行 binlog 日志中的内容,也就是在自己本地再次执行一遍 SQL,这样就可以保证自己跟主库的数据是一样的。 这里有一个非常重要的一点,就是从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行。所以这就是一个非常重要的点了,由于从库从主库拷贝日志以及串行执行 SQL 的特点,在高并发场景下,从库的数据一定会比主库慢一些

mysql读写分离-mysql-proxy的配置

戏子无情 提交于 2019-11-29 17:40:33
读写分离介绍 读写分离适合于读特别多的场景,一台只写,一台只读,提高读的效率。 实现的思路 前提: 读写分离建立在两台机器上,并且这两台机器是做了主从复制的,主库只写,从库只读,从而实现的。 实现: 第一种: 在主库创建一个只写的用户,而从库创建一个只写的用户,让程序去连接不同的服务器可达到读写分离的效果。 第二种: 通过代理软件,这种的好处是程序不需要关心写和读的操作分别连接的哪台服务器,只管往代理机器发即可,代理软件进行判断发往不同的mysql服务器。 通过代理实现的软件有:mysql-proxy,amoeba 代理方式的实现 图解: 环境: 需要开三台机器。 192.168.101 # 主库-只写 192.168.102 # 从库-只读 192.168.100 # 代理 安装lua脚本语言: # 这个是mysql-proxy需要的 官方下载地址: http://www.lua.org/ftp/ (1)安装依赖 yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel -y (2)下载包 wget http://www.lua.org/ftp/lua-5.3.5.tar.gz -P /opt/ (3)解压包 cd /opt/ tar xf

mysql事务

半城伤御伤魂 提交于 2019-11-29 10:15:33
本篇文章主要从事务的分类,操作,事务隔离级别几个方面进行阐述。 一、概述 事务是数据库系统区别文件系统的一个重要特性。 事务会把数据库从一种状态转为另一种状态。要么都修改,要么都不改。 事务可以是一个简单的sql,也可以是一个复杂的sql,事务是访问并更新数据库中各个数据项的一个程序执行单元 事务的四大特性为ACID,而innodb存储引擎完全符合ACID: 1、原子性(automicity):指整个数据库事务不可分割。要么都执行,要么都不执行。 2、一致性(consistency):指事务将数据库从一种状态转为另一种一致的状态,在事务开始前和结束后,数据库完整约束没有被破坏。 3、隔离性(isolation):(其他称呼:并发控制,可串行化,锁)指各个读写事务对象对其他事务操作相互分离,不可见。 4、持久性(durability):指事务完成后,其结果是永久的,即使机器宕机,也能够恢复。 二、提交方式 1.显式开启和提交。 使用begin或者start transaction来显式开启一个事务,显式开启的事务必须使用commit或者rollback显式提交或回滚。几种特殊的情况除外:行版本隔离级别下的更新冲突和死锁会自动回滚。 在存储过程中开启事务时必须使用start transaction,因为begin会被存储过程解析为begin...end结构块。 2.自动提交。

MySQL常见知识点2

孤街醉人 提交于 2019-11-29 09:47:24
在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM。 首先: 1.简单介绍这两种引擎,以及该如何去选择。 2.这两种引擎所使用的数据结构是什么。 1. a.Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。它本身实际上是基于Mysql后台的完整的系统。Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是,该引擎是不支持全文搜索的。同时,启动也比较的慢,它是不会保存表的行数的。当进行Select count(*) from table指令的时候,需要进行扫描全表。所以当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。 b.MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。不过和Innodb不同的是,MyIASM引擎是保存了表的行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的

Mysql常见知识点3

倾然丶 夕夏残阳落幕 提交于 2019-11-29 09:47:17
Mysql 的存储引擎,myisam和innodb的区别。 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。 2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。 数据表类型有哪些 答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。 MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。 InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。 c. mysql库主从读写分离。 d. 找规律分表,减少单表中的数据量提高查询速度。 e。添加缓存机制,比如memcached,apc等。 f. 不经常改动的页面,生成静态页面。 g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

101个MySQL的调优技巧(1)

妖精的绣舞 提交于 2019-11-29 09:37:06
MySQL是一个功能强大的开源数据库. 随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限. 这里是101条调节和优化MySQL安装的技巧. 一些技巧是针对特定的安装环境的,但这些思路是通用的. 我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多. 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢. 3. 使用电池供电的RAM(注:RAM即随机存储器). 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列) – 最好是RAID10或更高. 5. 避免RAID5(注:一种存储性能、数据安全和存储成本兼顾的存储解决方案) – 确保数据库完整性的校验是要付出代价的. 6. 将操作系统和数据分区分开,不仅仅是逻辑上,还包括物理上 – 操作系统的读写操作会影响数据库的性能. 7. 把MySQL临时空间和复制日志与数据放到不同的分区 – 当数据库后台从磁盘进行读写操作时会影响数据库的性能. 8. 更多的磁盘空间等于更快的速度. 9. 更好更快的磁盘. 10. 使用SAS(注: Serial

集群之MYsql主从服务之引伸出Mysql互为主从(环形结构)外加简单实现自己个人的负载均衡器(3)

时光总嘲笑我的痴心妄想 提交于 2019-11-29 09:19:57
备注: 本人资历很浅,说的不对话,万望各位前辈不要计较, 另关于环形的问题,我在后面的评论给予回复, 其实环形,解决多地域问题比较好的选择 关于配置步骤我重新整理了一下(主从AND环形)的配置步骤 在我博客中,有兴趣的朋友可以看一下, http://my.oschina.net/u/1246814/blog/267518 多谢大家的指导. 比如 我有主的1台mysql服务器,俩从服务服务器 外加一个负载均衡器(如果把负载均衡器非常简单的来说话其实就DNS的转发,非常简单来说,其实 IP的轮换嘛) 我读数据的也就(查询)数据 也就(Select)语句时候,我只是在 仨台从服务器中读取数据 主服务器负责(增,删,改)这个一系列操作 顺便唠叨一下, 为啥 Select 我们建仨服务器或者多个呢? 因为距统计,大概B/S架构70%以上的操作都是以查为主(说白了就是展示嘛) 我们执行了DML语句那么负载均衡器, 就会把请求转发到主mysql服务器上, 这里有个问题? 我们已经向主服务器插入数据,或者删除数据,或者更新了数据, 那么是不是意味从服务里数据也应该发生变化呢 是的,从服务器肯定要发生变化的,不然就出现问题, 比如说,我删除了一个用户, 我查询一下被删除的用户, 丫的发现这个用户压根就没被删除,这不是搞笑了嘛, 那么就有了主从配置一说 主从原理:mysql中有一种日志叫做bin日志

Mysql访问中间件--Atlas初探

…衆ロ難τιáo~ 提交于 2019-11-29 09:01:17
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性,目前该项目在360公司内部得到了广泛应用。 Atlas主要有以下功能 读写分离 从库负载均衡 IP过滤 自动分表(目前只支持在同一个库中进行分表) DBA可平滑上下线DB 自动摘除宕机的DB Atlas相对于官方MySQL-Proxy有以下优势 将主流程中所有Lua代码用C重写,Lua仅用于管理接口 重写网络模型、线程模型 实现了真正意义上的连接池 优化了锁机制,性能提高数十倍 下面就一步一步带大家去安装和使用Atlas数据库中间件 安装Atlas-sharding_1.0.1-el6.x86_64.rpm包 大家可以从++ https://github.com/Qihoo360/Atlas/releases++网站下载到最新的rpm包,推荐使用rpm包安装 加密应用访问mysql数据库访问密码 安装好Atlas的rpm包之后,进入到/usr/local/mysql-proxy/bin目录,使用下面命令对密码进行加密 ./encrypt tony ANDKNNypf4k= <--这个就是加密后的密码 配置Atlas配置文件(/usr/local/mysql

mysql主从数据库不同步的2种解决方法(转)

有些话、适合烂在心里 提交于 2019-11-29 07:55:36
参考: http://www.cnblogs.com/gl-developer/p/6170423.html https://www.cnblogs.com/luckcs/articles/2543607.html 通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力 一主多从模型 ,提高并发能力,但是同步存才小延迟。多主多从更加复杂 Mysql主从复制的实现原理图大致如下: master数据库启用二进制日志,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。同步存在延迟 实现MySQL主从复制需要进行的配置: 主服务器: 开启二进制日志 配置唯一的server-id 获得master二进制日志文件名及位置 创建一个用于slave和master通信的用户账号 从服务器: 配置唯一的server-id 使用master分配的用户账号读取master二进制日志 启用slave服务 具体实现过程如下: 一、准备工作: 1.主从数据库版本最好一致 2