摘要:这篇MySQL栏目下的“详解如何利用amoeba(变形虫)实现mysql数据库读写分离”,介绍的技术点是“MySQL数据库、数据库读写分离、amoeba、MySQL、读写分离、数据库”,希望对大家开发技术学习和问题解决有帮助。

关于mysql的读写分离架构有很多,百度的话几乎都是用mysql_proxy实现的。由于proxy是基于lua脚本语言实现的,所以网上不少网友表示proxy效率不高,也不稳定,不建议在生产环境使用;

amoeba是阿里开发的一款数据库读写分离的项目(读写分离只是它的一个小功能),由于是基于java编写的,所以运行环境需要安装jdk;

前期准备工作:

1.两个数据库,一主一从,主从同步;

master: 172.22.10.237:3306 ;主库负责写入操作;

slave: 10.4.66.58:3306 ; 从库负责读取操作;

amoeba: 172.22.10.237:8066 ; 我把amoeba安装到了主库所在的服务器,当然,你也可以安装到第三台服务器上;

所有服务器操作系统均为centos7;

2.在amoeba所在的服务器上配置安装jdk;

我安装的是jdk1.8;

路径是: JAVA_HOME=/usr/local/java/jdk1.8.0_131

以上务必自己点搭建、配置好,主从正常工作,添加jdk环境变量: /etc/profile ;

安装amoeba的方式有很多,这里就不在安装上面费口舌了,我下载了amoeba-mysql-3.0.5-RC-distribution的安装包,直接解压即可使用;

解压目录: /usr/local/amoeba/

很明显 conf里是配置文件,bin里是启动程序;

刚才说到 amoeba的功能可不止读写分离,但如果只用读写分离功能的话只需要配置这几个个文件即可: conf/dbServers.xml conf/amoeba.xml 和 bin/launcher ;

conf/dbServers.xml :

`3306

#设置Amoeba要连接的mysql数据库的端口,默认是3306

testdb

#设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver

test1

#设置amoeba连接后端数据库服务器的账号和密码,因此需要在所有后端数据库上创建该用户,并授权amoeba服务器可连接

111111

500  #最大连接数,默认500

500    #最大空闲连接数

1    #最新空闲连接数

  #设置一个后端可写的数据库,这里定义为writedb,这个名字可以任意命名,后面还会用到

172.22.10.237 #设置后端可写dbserver的ip

  #设置后端可读数据库

10.4.66.58

  #设置定义一个虚拟的dbserver,实际上相当于一个dbserver组,这里将可读的数据库ip统一放到一个组中,将这个组的名字命名为myslave

1  #选择调度算法,1表示复制均衡,2表示权重,3表示HA, 这里选择1

slave01  #myslave组成员`

conf/amoeba.xml :

8066

#设置amoeba监听的端口,默认是8066

127.0.0.1

#配置监听的接口,如果不设置,默认监听所以的IP

# 提供客户端连接amoeba时需要使用这里设定的账号 (这里的账号密码和amoeba连接后端数据库服务器的密码无关)

root

123456

myslave

#设置amoeba默认的池,这里设置为writedb

master

#这两个选项默认是注销掉的,需要取消注释,这里用来指定前面定义好的俩个读写池

slave01

bin/launcher :

#启动脚本,需要配置jdk环境变量;

#在注释后的第一行添加:

JAVA_HOME=/usr/local/java/jdk1.8.0_131

launcher 是启动脚本,如果不配置JAVA_HOME的话,即便你在/etc/profile中配置了环境变量也可能会报错:没有配置jdk环境变量;

还有一个配置文件: jvm.properties

#占用内存配置文件

# -Xss参数有最小值要求,必须大于228才能启动JVM

#修改:

JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"

有经验的运维都知道,凡是和jdk沾上边的,基本都会和内存的调优有关系,amoeba也不例外;

现在可以启动了:

启动后就可以看到本机的8066端口:

这时,你只需要通过本机ip的8066端口和你配置文件中设置的账号密码来连接数据库就行了,写入的数据都会到master里,读取的数据都会从slave中读取;

测试:

关闭master数据库,依然可以读取:执行 select 查看命令;

或者

关闭slave数据库,依然可以写入: 执行 update、inster命令;

mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离相关推荐

  1. python从random生成列表_详解Python利用random生成一个列表内的随机数

    详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...

  2. mysql通配符escape使用_详解MySQL like如何查询包含'%'的字段(ESCAPE用法)

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  3. mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...

    在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...

  4. mysql数据库的函数_详解数据库_MySQL: mysql函数

    一.内置函数 1.数学函数 rand() round(num) ceil(num) floor(num) 随机 四舍五入 向上取整 向下取整 2.字符串函数 length() 字节长度 char_le ...

  5. java获取mysql数据定时执行_详解SpringBoot 创建定时任务(配合数据库动态执行)...

    序言:创建定时任务非常简单,主要有两种创建方式:一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库 ...

  6. mysql 修改时间段内_详解mysql数据库MyISAM存储引擎如何转为Innodb及其中的注意点...

    概述 mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Inno ...

  7. mysql 的dcl语句_详解MySQL第三篇—DCL语句

    DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句.这些语句定义了数据库.表.字段.用户的访问权限和安全级别.主要的语句关键字包括 g ...

  8. qt4.7 mysql 6.3 版本_详解Qt 4.7编译和访问Mysql驱动

    Qt4.7编译和访问Mysql驱动是本文要介绍的内容,不多说,我们来看内容.今天摸索了一上午,终于用qt连上mysql了 1.安装一个mysql5.0以上版本*** 要求:(1)安装路径不要有空格和点 ...

  9. mysql内置变量_详解MySQL注入利用的变量

    MySQL注入数据库时,我们可以利用内置的变量来得到更多的mysql信息,下面就让我们一起来了解MySQL注入利用的变量. 当我们注射mysql库的输入点的时候,可以通过version()/user( ...

最新文章

  1. div自己移除自己/移除div下面的所有子元素
  2. [基础题]2.(*)利用接口做参数,写个计算器,能完成加减乘除运算。
  3. 145. Binary Tree Postorder Traversal 二叉树的后序遍历
  4. list agg cause ORA-06502 PL/SQL: numeric or value error
  5. flashcom网址收集
  6. l洛谷P4779 【模板】单源最短路径(标准版)(dijkstra)
  7. Java SE 7 Update 25 –发行说明进行了解释。
  8. 天地一体化信息网络发展与拟态技术应用构想
  9. Java基础 系统注解 @Override @Deprecated @SuppressWarnings 使用的方法及原因
  10. php 反转一个整数,LeetCode PHP 整数反转
  11. Android 解析JSON
  12. SpringBoot之AOP之基本使用
  13. Docker安装MongoDB管理工具nosqlclient
  14. LeetCode 67. Add Binary
  15. 爬取美女图片信息并保存(无图系列)
  16. C语言程序设计孙家啸第一版,广东(年4月自考各专业课程使用教材.doc
  17. 深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码
  18. 蚂蚁金服宫孙:guava探究系列之优雅校验数据
  19. C++中“map和set”相关内容整理分析
  20. JAVA网络编程、正则表达式

热门文章

  1. java response.write_@ResponseBody与response.getWriter .write()区别
  2. rpgmvp图片怎么看_拼多多商城图片和视频下载不了怎么办,看这里。。。。
  3. c++对数函数_DS-K1T105M-C 海康威视考勤门禁一体机 支持刷卡+密码 DS-K1T105E/M/C-C
  4. mysql 删除另一个表中的_mysql – 在一个查询SQL中删除两个表中的记录
  5. win10子系统ubuntu图形界面_win10系统中安装ubuntu子系统及图形界面
  6. python messagebox弹窗退出_python 弹窗提示警告框MessageBox的实例
  7. python目标检测答案_入门指南:用Python实现实时目标检测(内附代码)
  8. android 3.0单元测试,Android Studio 3.0 gradle 3.0.0-beta2打破了Kotlin单元测试覆盖率?
  9. java面向对象结课总结_java面向对象课程总结
  10. 【LeetCode笔记】5.最长回文子串(Java、动态规划、字符串)