mysql无法连接到服务器Mysql数据库——主从复制、分库分表
⽂章⽬录
mysql主从复制
数据库的⼏种模式
1. 单点,⼀个数据库:风险⾼
2. 主备:⼀个主数据库,多个备⽤数据库平时不⽤。主数据库还是负责交互,⽽备份数据库只有当主数据库挂掉了才顶上。
3. 主从:⼀个主节点,多个从节点。就是从原来的数据库复制⼀个完全⼀样的数据库,原来的数据库称作主数据库,复制的数据库称为
从数据库。从数据库会与主数据库进⾏数据同步,保持⼆者的数据⼀致性,主服务器挂掉,从服务器可以升级为主服务器。还可以配置主服务器和从服务器同时⼯作,读写分离,主服务器负责写,从服务器负责读数据,降低主服务器的压⼒,提⾼整体性能。
主从复制原理
MySQL之间数据复制的基础是⼆进制⽇志⽂件(binary log file)。
结构体标签是什么c语言1. 主库的更新事件会被写到bin log⽇志中。
2. 从库启⽤slave服务,发起连接,连接到主库,从数据库通过⼀个I/O线程与主服务器保持通信,并
监控master的⼆进制⽇志⽂件的变
化。
3. 如果发现master⼆进制⽇志⽂件发⽣变化,则会把**变化复制到⾃⼰的中继⽇志(Relay log)**中
4. 从库再创建⼀个SQL线程,从relay log⾥⾯读取内容,把相关的“事件”执⾏到⾃⼰的数据库。以此实现从数据库和主数据库的⼀致
性,也就实现了主从复制。
主从复制作⽤(优点)
python爬虫股票行情数据1. 备份,主数据库故障可以切换到从服务器
2. 可实现读写分离(主写,从读),使数据库能⽀持更⼤的并发。
3. 有利于架构的扩展,后⾯加⼊多个数据库
读写分离
和主从复制关系:
验证webservice可以调用接口
读写分离是依赖于主从复制,⽽主从复制⼜是为读写分离服务的。
定义
MySQL读写分离基本原理是在主从复制基础上,让master数据库处理写操作,slave数据库处理读操作,master将写操作的变更同步到各个slave节点,使数据库压⼒分摊到各个服务器,防⽌其中某台服务器压⼒过⼤。实现了数据库性能的优化,以及提升了服务器安全。
实现
1. 基于程序代码实现
在代码中根据select 、insert进⾏路由分类,也就是写操作代码语句给指定到主服务器,⽽读操作语句指定到从服务器。优点是性能较好,因为程序在代码中实现,不需要增加额外的硬件开⽀,缺点是需要开发⼈员来实现,运维⼈员⽆从下⼿。
earnestly2. 使⽤中间代理层实现
代理⼀般介于应⽤服务器和数据库之间,代理数据库服务器接收到应⽤服务器的请求后根据判断后转发到数据库。
⽐如:
MySQLProxy或者mycat进⾏相应的分析,判断出是读操作还是写操作,分发⾄对应的MySQLServer上。对于多节点Slave集,也可以起做到负载均衡的效果,就是可以让读操作分配到不同的服务器,⽽不⾄于⼀直读⼀个服务器的数据造成压⼒。
分库分表
分库
为什么分库
单台数据库,⽐如mysql数据库,当访问连接数过多时,就会出现‘too many connections’的错误,⼀般来说是访问量太⼤或者数据库设置的最⼤连接数太⼩的原因。但是当数据量过⼤时,单台数据库显⽰已经不能⽀撑应⽤服务器的访问。所以就需要做分。
垂直拆分
专库专⽤。⽐如⼀个⼤的表单库,我们拆分成不同的多个负责不同功能的数据库。⽐如⽤户系统数据库专门负责⽤户数据,订单系统数据库专门负责订单数据。优点:业务清晰,职责单⼀,易维护,易扩展。 缺点:系统复杂度较⾼。事物处理复杂。
⽔平拆分(分库分表)
当⼀个表数据量过⼤,我们把⼀个表的数据拆分到不同数据库中,他们的表结构相同,但是数据不同。优点:合理拆分,提⾼数据稳定性和负载能⼒。
缺点:引⼊分布式事物,要跨多个数据库操作,维护较复杂。
分表
gamma分布的矩母函数为什么分表:主要处理单表数据量太⼤问题。当⼀张表的数据达到⼏千万时,查询⼀次时间就会⾮常多。也就是我们要缩⼩⼀个表的⼤⼩。⼤数据量并且访问频繁的表,将其分为若⼲个表。⽐如有个表的数据量是五百万条,那么我们可以将它拆分成⼗个五⼗万条,当要插⼊数据的时候,判断表的⼤⼩,如果超过五⼗万条就插⼊到新表中。
垂直拆分
当某个表的字段⾮常多,那么我们把该表拆分成多个较少字段的表。优点:更加便于维护。
⽔平拆分
库内分表只解决单⼀表数据量过⼤的问题,⽔平拆分可以⼤⼤减少单表数据量,提升查询效率。但没有将表分布到不同机器的库上,所以我们⼀般采⽤⽔平分库分表。
⽔平拆分分库分表策略
那么我们基于什么来对表进⾏拆分呢。有⼏种策略。
1. HASH取模。假设有⽤户表user,将其分成3个表user0,user1,user2。路由规则是对3取模,当uid=1时,对应到的是
user1,uid=2时,对应的是user2。userid=5,就放到user2表
2. 范围分⽚。从1-10000⼀个表,0001-20000⼀个表。
3. 地理位置分⽚:华南区⼀个表,华北⼀个表。
4. 时间分⽚:按⽉分⽚,按季度分⽚等等,可以做到冷热数据。
分库分表引⼊的问题
1. 如果我们做了垂直分库或者⽔平分库以后,就必然会涉及到跨库执⾏SQL的问题,这样就引发了互
联⽹界的⽼⼤难问题——分布式事
务。也就是跨库事物。那要如何解决这个问题呢?使⽤⼀些中间件。
2. 跨库join的问题,当sql语句执⾏join也就是连接不同表的时候,这个时候要在不同的库是⽆法进⾏join的。那么就需要多次查询。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论