在实际的生活环境中,如果对数据库的读和写都在同一个数据库服务中操作,无论是在安全性,高可用还是高并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制的方式来同步数据,再通过读写分离来提升数据的高并发负载能力这样的方案来进行部署。

读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库。

目前较为常见的MySQL读写分离方案有两种:

1.基于程序代码内部实现:

根据select,insert进行路由分类,是目前生产环境应用最广泛的,优点是性能好,因为在代码中实现,不需要增加额外的设备作为硬件开支,缺点是需要开发人员来实现,运维人员无从下手。

2.基于中间代码层实现:

代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,代表性程序:

(1)mysql-proxy为mysql开发早期开源项目,通过其自带的lua脚本进行SQL判断,虽然是mysql的官方产品,但是mysql官方不建议将其应用到生产环境。

(2)Amoeba(变形虫)由陈思儒开发,曾就职与阿里巴巴,该程序由java语言进行开发,阿里巴巴将其应用于生成环境,它不支持事物和存储过程。

通过程序代码实现mysql读写分离自然是一个不错的选择,但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的java应用,如果在程序代码中实现读写分离对代码改动就较大,像这种应用一般会考虑使用代理层来实现。

MySQL Master IP: 192.168.96.6

MySQL Slave1 IP: 192.168.96.7

MySQL Slave2 IP: 192.168.96.5

MySQL Amoeba IP: 192.168.96.4

MySQL Client IP: 192.168.96.9

在主机Amoeba上安装Java环境(因为Amoeba是基于jdk1.5版本开发的,所以官方推荐使用1.5或1.6版本)

rz

将bin格式的安装包传进来(jdk-6u14-linux-x64.bin)

chmod +x jdk-6u14-linux-x64.bin      //添加可执行权限

./jdk-6u14-linux-x64.bin    //执行后会生成一个文件夹(jdk1.6.0_14 )

mv jdk1.6.0_14/ /usr/local/jdk1.6     //将文件夹移动到/usr/local/下起名为jdk1.6

vim /etc/profile    //修改文件

文档底部插入内容:

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile    //声明一下修改的文档

java -version     //查看版本号

如果Java版本号过高请执行一下操作:

rm -rf /usr/bin/java

source /etc/profile

java -version

将amoeba-mysql-binary-2.2.0.tar.gz  传入

mkdir /usr/local/amoeba    //创建一个amoeba的文件夹

tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba    //解压

chmod -R 755 /usr/local/amoeba     //给文件夹一个755权限

配置Amoeba读写分离,两个Slave读负载均衡

在Master、Slave1、Slave2服务器中配置Amoeba的访问授权

grant all on *.* to 'test'@'192.168.96.%' identified by '123.com';   //三台机器都做

修改amoeba配置文件

cd /usr/local/amoeba/conf/

cp amoeba.xml amoeba.xml.bak   //给要修改的文件做一个备份

vim amoeba.xml

cp dbServers.xml dbServers.xml.bak    //做备份

vim dbServers.xml

配置无误后,启动Amoeba软件,默认端口是TCP协议8066

nohup /usr/local/amoeba/bin/amoeba start &    //开启Amoeba在后台

netstat -lnpt    //查看一下有没有8066端口

在Client上进行访问测试

mysql -u amoeba -p123456 -h 192.168.96.6 -P 8066       //IP为主机IP  123456为设置amoeba的密码

master上操作:

create database db_test;   //创建新库

use db_test

create table student (id int(10),name varchar(10),address varchar(20));   //创建新数据,查看每个服务器都有新的数据

stop slave;   //关闭主从复制,所有的都关闭

在master上:

use db_test

insert into student values('1','crushlinux','this_is_master');

在slave1上:

use db_test

insert into student values('2','crushlinux','this_is_slave1');

在slave2上:

use db_test

insert into student values('3','crushlinux','this_is_slave2');

测试读操作:均在在测试机上操作

select * from student;

测试写操作:

在client上插入语句:

use db_test

insert into student values('4','crushlinux','write_test');

select * from student;

在Slave上

start slave;

show slave status\G

再次测试(测试过程略)

mysql amoeba 事务_MySQL基于Amoeba实现读写分离相关推荐

  1. MySQL 案例实战--MySQL 基于Mycat实现读写分离

    MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...

  2. MySQL使用Mycat实现分库分表-读写分离

    MySQL使用Mycat实现分库分表-读写分离 Mycat Mycat介绍 什么是Mycat? Mycat架构 Mycat核心概念 MyCat主要解决的问题 MyCat对多数据库的支持 Mycat分片 ...

  3. PG基于pgpool-II实现读写分离和负载均衡

    PG基于pgpool-II实现读写分离和负载均衡 PG:12 pgpool-II:4.2.2 OS:CentOS7.6 IP 主机名 作用 port 类型 备注 172.72.6.2 mambapg6 ...

  4. 基于mycat的mysql_MySQL基于Mycat实现读写分离

    基于Mycat实现读写分离 环境:mariadb主:192.168.200.129 Mariadb从:192.168.200.114 Mycat    :192.168.200.112 (1) 安装j ...

  5. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...

  6. mysql读写分离_MySQL基于amoeba读写分离实验

    =========================================== 主从复制只是一个同步数据的方式 读写分离:只在主的上面写,只在从的上面读 读写分离方案:[1]基于程序代码内部 ...

  7. mysql读写分离 存储过程_基于maxscale的读写分离部署笔记

    使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可. 基于connect方式的不要使用.从库延迟他还会继续分发请求过去,暂时不 ...

  8. mysql function 事务_MySQL 事务

    MySQL 事务 前言 在我们平常的开发过程中,我们经常对于一个业务流程需要执行一组SQL,但是为了确保这一组SQL要么全部执行成功,要么全部不执行,我们需要用到MySQL的事务,而在使用事务的时候我 ...

  9. mysql 开启事务_MySQL可重读隔离级别的底层实现原理

    原创 启明南公众号 先说下MySQL的四个隔离级别:读未提交(RU).读已提交(RC).可重读(RR).串行化(Serializable),本篇文章重点讲解可重读级别下的事务细节如:MVCC.视图的创 ...

最新文章

  1. Set Matrix Zeroes leetcode
  2. 数据结构-双向链表的实现
  3. ssl *** 思科支持设备型号
  4. python学习第二课要点记录
  5. 灰度图像--图像增强 平滑之均值滤波、高斯滤波
  6. matlab氢原子杂化轨道,网络版原子和分子结构可视化程序的开发
  7. linux shell 脚本 supress,《linux Shell 脚本攻略》进阶学习(第一部分)
  8. Bootstrap导航条所支持的组件
  9. JavaScript引用数据类型
  10. [NVIDIA] Ububtu 获取 CUDA_ARCH
  11. 小瓜牛漫谈 — 获取资源文件
  12. matlab z变换离散化_Matlab基础教程
  13. 『GDAL』读写TIFF文件
  14. 网上值得注册的论坛(最新整理)
  15. 服务器硬盘坏道修复教程视频,坏道和坏块什么区别?硬盘高级修复教程来了
  16. win10下pyt3.7安装scrapy后cmd运行相关命令SyntaxError: invalid syntax 解决办法
  17. 一些常见的处理器如arm,arduino,stm32,51,树莓派的联系和区别,还有各自的长短板?
  18. 【01】什么是 APP?移动 APP 有几种类型?
  19. idea-代码格式化快捷键设置
  20. python延迟实现

热门文章

  1. 【ElasticSearch】Es 源码之 GatewayMetaState 源码解读
  2. 【es】es 写入流程
  3. Linux : 文件处理命令
  4. 95-110-020-源码-Env-StreamExecutionEnvironment
  5. 【Flink】Flink Table SQL 用户自定义函数: UDF、UDAF、UDTF
  6. div iframe 显示html,IE中iframe标签显示在DIV之上的问题解决方案
  7. 基于SpringBoot+WebMagic实现一个的爬虫框架
  8. docker-compose安装镜像
  9. windows 根据端口杀死进程
  10. ES6中的扩展运算符