广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 读写分离 (基于Amoeba)
  • 582
分享到

MySQL 读写分离 (基于Amoeba)

2024-04-02 19:04:59 582人浏览 八月长安
摘要

一.MySQL读写分离    主数据库处理事务性查询,从数据库处理select查询。数据库复制用来把事务性查询导致的变更同步到从数据库中。二.最为常见的读写分离有两种:1.基于

一.MySQL读写分离

    主数据库处理事务性查询,从数据库处理select查询。数据库复制用来把事务性查询导致的变更同步到从数据库中。

MySQL 读写分离 (基于Amoeba)

二.最为常见的读写分离有两种:

1.基于程序代码实现

   在代码中根据select,insert进程路由分类;

   优点:性能好,因为在代码中实现,不需要额外的硬件设备;

   缺点:需要开发人员来实现,对代码改动比较大,不适合大型复杂应用;

2.基于代理层实现

  Mysql-Proxy:隶属于mysql开源项目

  Amoeba:Amoeba是一个以Mysql为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求;

三.实验环境

OS:Centos 6.5 x64

Amoeba:192.168.0.128

master:192.168.0.134

slave:192.168.0.135

client:192.168.0.137

三.配置主从复制

1.MySQL读写分离是基于主从复制配置的,先配置好主从复制,再配置读写分离。

  主从复制博文连接:Http://guoxh.blog.51cto.com/10976315/1922643

2.添加授权账号供Amoeba访问

 master和slave:

mysql> grant all on *.* to  'proxy'@'192.168.0.128' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

四.Amoeba安装配置

1. Amoeba是基于jdk开发的,所有先安装JAVA环境

[root@amoeba ~]# chmod +x jdk-6u14-linux-x64.bin 
[root@amoeba ~]# ./jdk-6u14-linux-x64.bin 
[root@amoeba ~]# cat /etc/profile.d/java.sh 
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/lib:$PATH:$HOME/bin
[root@amoeba ~]# source  /etc/profile.d/java.sh 
[root@amoeba ~]# java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
#JAVA环境配置完成

2.安装Amoeba

[root@amoeba ~]# mkdir /usr/local/amoeba
[root@amoeba ~]# tar xf  amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba
[root@amoeba ~]# ls /usr/local/amoeba/
benchmark  bin  changelogs.txt  conf  lib  LICENSE.txt  README.html
[root@amoeba ~]# cat /etc/profile.d/amoeba.sh 
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin
[root@amoeba ~]# source  /etc/profile.d/amoeba.sh 
[root@amoeba ~]# /usr/local/amoeba/bin/amoeba
amoeba start|stop  # Amoeba安装成功

3.编辑amoeba.xml配置文件

[root@amoeba conf]# cd /usr/local/amoeba/conf/
[root@amoeba conf]# cp amoeba.xml  amoeba$(date +"%Y_%m_%d").xml #修改前备份一份
[root@amoeba conf]# vim amoeba.xml
27  <property name="authenticator">
28       <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
29 
30           <property name="user">amoeba</property>   #设置client连接的用户
31 
32           <property name="passWord">amoeba</property> #设置client连接的密码
33 
34              <property name="filter">
35              <bean class="com.meidusa.amoeba.server.IPAccessController">
36                <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
37              </bean>
38            </property>
39       </bean>
40  </property>

112                 </property>
113                 <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
114                 <property name="LRUMapSize">1500</property>
115                 <property name="defaultPool">master/property> #指定默认为master
116 
117                 <!--  #删除注释
118                 <property name="writePool">master</property> #指定写操作为master
119                 <property name="readPool">slaves</property> #指定读操作为slave
120                 -->  #删除注释
121                 <property name="needParse">true</property>

3.编辑dbServers.xml

25       <!-- mysql user -->
26       <property name="user">proxy</property>  #填mysql授权的用户
27 
28       <!--  mysql password -->
29       <property name="password">123456</property> #填MySQL授权的用户密码
30
 
45         <dbServer name="master"  parent="abstractServer">
46                 <factoryConfig>
47                         <!-- mysql ip -->
48                         <property name="ipAddress">192.168.0.134</property> #指定master的IP
49                 </factoryConfig>
50         </dbServer>
51 
52         <dbServer name="slave"  parent="abstractServer">
53                 <factoryConfig>
54                         <!-- mysql ip -->
55                         <property name="ipAddress">192.168.0.135</property> #指定slave的IP
56                 </factoryConfig>
57         </dbServer>
58         <dbServer name="slaves" virtual="true">
59                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
60                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
61                         <property name="loadbalance">1</property>
62 
63                         <!-- Separated by commas,such as: server1,server2,server1 -->
64                         <property name="poolNames">slave</property>
65                 </poolConfig>
66         </dbServer>

4.启动服务

[root@amoeba ~]# amoeba start &
[1] 2666
[root@amoeba ~]# log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
2017-05-07 00:42:16,692 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2017-05-07 00:42:17,064 INFO  net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066.
2017-05-07 00:42:17,067 INFO  net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:56460.

[root@amoeba ~]# netstat -anptl | grep java
tcp        0      0 ::ffff:127.0.0.1:56460      :::*                        LISTEN      2666/java           
tcp        0      0 :::8066                     :::*                        LISTEN      2666/java           
tcp        0      0 ::ffff:192.168.0.128:37361  ::ffff:192.168.0.135:3306   ESTABLISHED 2666/java           
tcp        0      0 ::ffff:192.168.0.128:35241  ::ffff:192.168.0.134:3306   ESTABLISHED 2666/java           
#Amoeba默认端口为8066


五.测试

1.客户端连接Amoeba

[root@client ~]# mysql -uamoeba -p123456 -h 192.168.0.128  -P8066

2.新建一个数据库

mysql> create database guoxh;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| infORMation_schema |
| aaa                |
| guoxh              |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.01 sec)

3.master和slave查看数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| aaa                |
| guoxh              | #刚建的数据库已经同步
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

五.测试读写分离:

1.在master新建一个表,同步到slave上,然后关掉slave功能,在slave上插入区别语句

master:创建名为student的表

mysql> show tables;
Empty set (0.00 sec)

mysql> create table student (id int(10),name varchar(10),info varchar(50));
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+-----------------+
| Tables_in_guoxh |
+-----------------+
| student         |
+-----------------+
1 row in set (0.00 sec)

slave:停止同步

mysql> show tables;
+-----------------+
| Tables_in_guoxh |
+-----------------+
| student         |
+-----------------+
1 row in set (0.00 sec)
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

master:插入区别数据

mysql> insert into student values('1','zhangsan','Mysql_master');
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+------+----------+--------------+
| id   | name     | info         |
+------+----------+--------------+
|    1 | zhangsan | Mysql_master |
+------+----------+--------------+
1 row in set (0.00 sec)

slave:插入区别数据

mysql> select * from student;
Empty set (0.00 sec)

mysql> insert into student values('2','lisi','Mysql_slave');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+------+------+-------------+
| id   | name | info        |
+------+------+-------------+
|    2 | lisi | Mysql_slave |
+------+------+-------------+
1 row in set (0.00 sec)

3.测试读操作:

client:

mysql> show tables;
+-----------------+
| Tables_in_guoxh |
+-----------------+
| student         |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from student;
+------+------+-------------+
| id   | name | info        |
+------+------+-------------+
|    2 | lisi | Mysql_slave |
+------+------+-------------+
1 row in set (0.00 sec)

mysql> select * from student;
+------+------+-------------+
| id   | name | info        |
+------+------+-------------+
|    2 | lisi | Mysql_slave |
+------+------+-------------+
1 row in set (0.00 sec)

# 此时,读操作已经已经全部分配到slave上面。

4.测试写操作

client:插入一条数据,这里是看不到数据的,得到master查看

mysql> insert into student values('3','wangwu','Mysql_client');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+------+------+-------------+
| id   | name | info        |
+------+------+-------------+
|    2 | lisi | Mysql_slave |
+------+------+-------------+
1 row in set (0.00 sec)

master:

mysql> select * from student;
+------+----------+--------------+
| id   | name     | info         |
+------+----------+--------------+
|    1 | zhangsan | Mysql_master |
|    3 | wangwu   | Mysql_client |
+------+----------+--------------+
2 rows in set (0.00 sec)

#此时,写操作全部分给了master。


到此为止,MySQL已经实现了读写分离!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 读写分离 (基于Amoeba)

本文链接: https://www.lsjlt.com/news/35253.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 读写分离 (基于Amoeba)
    一.MySQL读写分离    主数据库处理事务性查询,从数据库处理select查询。数据库复制用来把事务性查询导致的变更同步到从数据库中。二.最为常见的读写分离有两种:1.基于...
    99+
    2022-10-18
  • mysql基于amoeba如何实现读写分离
    下文给大家带来关于mysql基于amoeba如何实现读写分离,感兴趣的话就一起来看看这篇文章吧,相信看完mysql基于amoeba如何实现读写分离对大家多少有点帮助吧。环境:    &n...
    99+
    2022-10-18
  • amoeba:关于mysql的读写分离
    今天用amoeba做了次读写分离,下面总结下步骤:三台linux:1、192.168.1.213    用于做amoeba服务器2、192.168.1.184&nbs...
    99+
    2022-10-18
  • mysql+amoeba读写分离
    mysql+amoeba读写分离一 简介:Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数...
    99+
    2022-10-18
  • MySQL读写分离amoeba&mysql-proxy
    ----主从同步介绍 refencen    https://www.cnblogs.com/lin3615/p/5684891.html 1. 读写分离方式 ...
    99+
    2022-10-18
  • mysql 基于mysql-proxy实现读写分离
    mysql 读写分离 读写分离首先不推荐使用,很多业务场景也没有必要,不仅增加技术复杂度,而且可能会导致读到落后的数据,建议优化数据库,推荐使用keepalive+mysql双主复制的方案 然后mysql-proxy是官方推出的中间件,不仅...
    99+
    2015-08-29
    mysql 基于mysql-proxy实现读写分离 数据库入门 数据库基础教程 数据库 mysql
  • Amoeba新版本MYSQL读写分离如何配置
    小编给大家分享一下Amoeba新版本MYSQL读写分离如何配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 官方简介 Amoeba的中文意思是变型虫 主要解决: &bul...
    99+
    2022-10-19
  • Amoeba实现数据库读写分离
    一 环境以及软件版本:系统:CentOS Linux release 7.2.1511 (Core)mysql:Server version: 5.6.33Amoeba:amoeba-mysql-3.0.5...
    99+
    2022-10-18
  • amoeba实现mysql读写分离+主从复制架构
    一、环境系统:centos6.5mysql版本:mysql5.6master服务器:192.168.1.21slave服务器: 192.168.1.100master写 slave读二、实现mysql主从复...
    99+
    2022-10-18
  • 利用Amoeba实现MySQL主从复制和读写分离
    在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave)的方式...
    99+
    2022-10-18
  • 基于 SpringBoot 实现 MySQL 读写分离的问题
    -     前言     - 首先思考一个问题: 在高并发的场景中,关于数据库都有哪些优化的手段? 常用的实现方法有以下几种:读写分离、加缓存、主从架构集...
    99+
    2022-05-21
    SpringBoot 实现 MySQL 读写分离 SpringBoot 读写分离
  • 利用amoeba(变形虫)实现mysql数据库读写分离
    前期准备工作: 1.两个数据库,一主一从,主从同步; master: 172.22.10.237:3306 ;主库负责写入操作; slave: 10.4.66.58:3306 ; 从库负责读取操作; amoeba: 172.22.10.23...
    99+
    2015-09-22
    利用amoeba(变形虫)实现mysql数据库读写分离
  • 利用amoeba实现mysql数据库读写分离的案例
    小编给大家分享一下利用amoeba实现mysql数据库读写分离的案例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!关于mysql的读写分离架构有很多,百度的话几乎都是用mysql_prox...
    99+
    2022-10-18
  • mysql主从基于docker和django实现读写分离
    目录1.主从搭建实操2.django实现读写分离settings.py配置手动指定读写分离自动指定(写router和配置setting)更细粒度(分库分表时需要)在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库1...
    99+
    2022-08-25
  • 利用amoeba实现mysql数据库的读写分离的方法
    这篇文章将为大家详细讲解有关利用amoeba实现mysql数据库的读写分离的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于mysql的读写分离架构有很多,百度的话...
    99+
    2022-10-18
  • Java基于JNDI怎么实现读写分离
    这篇文章主要介绍“Java基于JNDI怎么实现读写分离”,在日常操作中,相信很多人在Java基于JNDI怎么实现读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java基于JNDI怎么实现读写分离”的疑...
    99+
    2023-06-22
  • 基于maxscale的读写分离部署笔记
    使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可。基于connect方式的不要使用。从库延迟他还会继续分发请求过去,暂时不适合生产...
    99+
    2022-10-18
  • 通过amoeba工具实现配置mysql读写分离的方法介绍
    下面讲讲关于通过amoeba工具实现配置mysql读写分离的方法,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完通过amoeba工具实现配置mysql读写分离的方法这篇文章你一定...
    99+
    2022-10-18
  • MySQL-mycat读写分离
    Mycat 需要安装JDK 1.7 或者以上版本第一步:下载jdk-8u131-linux-x64.tar.gz文件 http://haixi.sfkcn.com:8080/201704/tools/jdk-linux-x64.tar.gz...
    99+
    2021-04-03
    MySQL-mycat读写分离 数据库入门 数据库基础教程 数据库 mysql
  • MySQL读写分离基本原理是什么
    本篇内容主要讲解“MySQL读写分离基本原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL读写分离基本原理是什么”吧!一、读写分离工作原理在一些...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作