数据库主从分离和读写分离
问题:
读和写所有压力都由一台数据库承担,压力大(没有实现扩容)
数据库服务器磁盘损坏则数据丢失,单点故障(没有实现高可用)
解决:
使用集群做高可用
1.MySQL主从复制
MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志复制然后再解析日志并应用到自身,最终实现从库和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
MySQL复制过程分为三步:
1.master将改变记录到二进制日志(binary log)。
2.slave将master的binary log拷贝到它的中继日志(relay log)。
(从节点【IO线程】会不断地监听主节点的binlog)
3.slave重做中继日志中的事件,将改变应用到自己的数据库中。
(从节点还有一个【sql线程】会读取中继日志的内容指令然后进行【重做】,保证从库和主库数据的一致)
2.实现数据库主从复制的配置过程
1.准备两台装好mysql的服务器
2.对主库进行配置
1.修改mysql配置文件:
1.vim /etc/my.cnf
在末尾加入两行:
log-bin=mysql-bin #[必须]启用二进制日志
server-id=123 #[必须]服务器唯一ID(唯一即可)
2.重启mysql服务让配置生效:
systemctl restart mysqld
3.登录mysql授予从节点主从复制账号访问权限:
GRANT REPLICATION SLAVE ON . to 'thrjy'@'%' identified by 'Root@123456';
4.刷新权限配置:
flush privileges;
5.查看主节点状态:(每有一次修改就会有偏移量,状态就会改变)
show master status;
(需要记录下结果等会做从库时要用。)
3.对从库进行配置
1.修改配置文件:
vim /etc/my.cnf
在末尾加上两行配置:
server-id=456 #[必须] 服务器唯一ID
slave_skip_errors=all #一定要加上这个,需要配置跳过错误,否则遇到错误时,主从复制则会停止
2.重启MySQL让配置生效:
systemctl restart mysqld
3.登录mysql
1.先停止slave:
stop slave;
2.配置主从复制连接信息:
change master to master_host='IP地址',
master_user='thrjy',
master_password='Root@123456',
master_log_file='mysql-bin.000001',
master_log_pos=590;
3.启动slave:
start slave;
4.查看从节点状态:如果有两个yes就代表配置成功了:
show slave status\G
4.进行主从复制测试
创建两个连接,连接到对应的mysql,在主库修改即可看到效果。
3.读写分离
面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免数据更新导致的行锁,使得整个系统的查询性能得到极大的改善。
4.Shard-JDBC实现读写分离
Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离和分库,分表。
1.适用于任何基于JDBC的ORM框架:JPA,Hibernate,Mybatis,Spring JDBC Template或直接使用JDBC。
2.支持任何第三方的数据库连接池:DBCP,C3P0,BoneCP,Druid,HikariCP等。
3.支持任何实现JDBC规范的数据库:目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。
使用Shard-JDBC步骤:
1.导入maven坐标:
<!--Sharding-JDBC-->
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version>
</dependency>
2.在配置文件中配置读写分离规则
spring:shardingsphere:datasource:names: master,slave#主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://ip地址:3306/reggie-take-out?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: 3569717299Asd!#从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.122.128:3306/reggie-take-out?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: rootmasterslave:#读写分离配置load-balance-algorithm-type: round_robin#最终的数据源名称name: dataSource#主库数据源名称master-data-source-name: master#从库数据源名称列表,多个用逗号隔开。slave-data-source-names: slaveprops:sql:show: true #开启SQL显示,默认false
注意:如果此时直接启动会报错
3.在配置文件中配置允许bean定义覆盖配置项
#允许bean被覆盖(允许shardingJDBC的数据源覆盖原有的数据源)
main:allow-bean-definition-overriding: true
数据库主从分离和读写分离相关推荐
- 基于Mysql主从同步的读写分离
Mysql读写分离 mysql读写分离技术又称为mysql代理服务,通过在mysql主从同步的基础上增加一台代理服务器来实现将访问数据库时的读和写操作分配到不同服务器上来实现负载均衡,从而提高数据库访 ...
- 【纯干货】Amoeba实现MySQL主从同步与读写分离
[纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...
- apache httpclient 工具类_HttpClient 和Mycat 主从节点和读写分离
第175次(HttpClient) 学习主题:HttpClient 学习目标: 1 掌握HttpClient自定义工具以及HttpClient具体的使用 对应视频: http://www.itbaiz ...
- sqlserver date类型和字符串比较_基于SQL Server数据库搭建主从复制实现读写分离实战演练...
一.课程介绍 读写分离(主从同步)从字面意思就可以理解,就是把对数据库的读操作和写操作分离开.读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上.读写分离的基 ...
- mysql读写分离错_MySQL主从同步、读写分离配置步骤、问题解决
根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记: 现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要 ...
- 高性能数据库集群:读写分离
目录 1.前言 2.读写分离 2.1 什么是读写分离? 2.2 什么情况下需要读写分离? 2.3 复制延迟 2.4 分配机制 2.5 Mysq支持的复制类型及与原理 1.前言 关系数据库由于其 ACI ...
- 高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制)
高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制) 视频地址:https://www.bilibili.com/video/BV1ry4y1v7Tr?p=8& ...
- mysql 读写分离缺点6_6\MySQL 主从同步 , MySQL 读写分离 , MySQL 性能调优
6\MySQL 主从同步 , MySQL 读写分离 , MySQL 性能调优 day06 一,mysql 主从同步 二,数据读写分离 三,MySQL 优化 ++++++++++++++++++++++ ...
- mysql主从和mycat读写分离的安装及验证
目录 一.背景介绍 二.安装mysql数据库(主从机器都需要先这样安装) 三.主从机配置 1.主服务器进行如下操作 2.从服务器进行如下操作 四.代理服务器安装和配置mycat读写分离 五.主从复制. ...
- Java中mysql的读写分离_mysql读写分离
MySQL读写分离原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先部署主从复制,只有复制完了,才能在此基础上进行数据的读写分离. 读写分离就是只在主服务器上写,只在从服务器上读, ...
最新文章
- 如何让phpmyadmin输入密码再进入
- Filter 设计模式编码实践
- 你应该了解的CSS语义化命名方式及常用命名规则
- Exchange2013DAG配置-零错误
- Android 自定义AlertDialog,调用方法与系统一致
- ASP.NET Core Web Api之JWT刷新Token(三)
- 14、ORACLE下的基本SQL操作
- js解析json数组+java对象转json字符串
- 【BZOJ1814】Ural 1519 Formula 1 插头DP
- python从excel中读取数据
- 动手学pytorch之通俗易懂何为卷积-深度AI科普团队
- 项目实体类报错_分享elasticserch在质检算法项目中的应用
- NYOJ 364 田忌赛马
- Excel实现数据的线性回归
- grasshopper for rhino 6下载_福利篇 | Rhino常用插件功能汇总
- oracle 亿级数据存储方案
- 关于_WIN32_WINNT
- 小白篇:阿里云 对象存储 OSS
- 让数据填报、收集效率提升80%!这个报表工具真的太强大了
- memcpy与memcpy_s的使用
热门文章
- 多波束测深系统工作原理及组成,多波束在无人船上的应用
- 易语言 执行java_CallJava易语言调用JAVA代码
- opencv和magick两个图像处理库的使用心得
- 2022制冷与空调设备运行操作考试模拟100题模拟考试平台操作
- 简单的中文姓名生成器
- 自阿里P8爆出1031道java面试题后,我在boss直聘狂拿千份Offer
- cdr 表格自动填充文字_当文字内容太多excel单元格盛不下应该怎么做
- java 实现http长轮询,Long Polling长轮询实现进阶
- 考研英语不熟悉的词义(List16-List20)
- Ryzen3 2200g安装Debian11.1后配置VBox