热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql的主从复制的读写分离之Amoeba实现

Mysql的主从复制的读写分离之Amoeba实现以前写过了一篇Mysql的主从复制,但没有实现Mysql的主从复制的读写分离。关于读写分离:读写分离(ReadWriteSplitting),

Mysql的主从复制的读写分离之Amoeba实现以前写过了一篇Mysql的主从复制,但没有实现Mysql的主从复制的读写分离。关于读写分离:读写分离(Read/WriteSplitting),

Mysql的主从复制的读写分离之Amoeba实现

以前写过了一篇Mysql的主从复制,但没有实现Mysql的主从复制的读写分离。

关于读写分离:

读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增、改、删、操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

关于Mysql的读写分离实现大致有三种:

1、 程序修改Mysql操作类

就以程序来完成Mysql的读写操作,如以PHP程序、java程序等解决此需求。

优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配

缺点:自己维护更新,增减服务器上的代码处理。

2、 mysql-proxy

MySQL-Proxy是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景:

优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用同一个账号

缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高

3、 Amoeba

参考官网:,meidusa.com/
优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案

以上是三种常见的Mysql的读写分离方法。在这建议用第三种也就是amoeba来实现

关于Amoeba

Amoeba(变形虫)项目,该开源框架于2008年开始发布一款Amoeba for Mysql软件。这个软件致力于Mysql的分布式数据库前端代理层,它主要在应用层访问Mysql的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。位于Client、DB Server(s)之间,虚拟主机,对客户透明。具有负载均衡、高可用性、SQL过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上使用。

下面就来把 Mysql的主从复制和读写分离完整的实现一下。

先来做Mysql的主从复制。

我实现的环境如下:

System:Centos 5.4 32bit

主:192.168.1.107

从:192.168.1.139

读写分离:192.168.1.183

拓扑图如下:

MySql的主从复制:

对主MysqL服务器,主要是开启二进制日志,这个默认是开启的,在配置文件中:

# vim /etc/my.cnf

server-id = 1 (默认为1)

log-bin = mysql-bin (这个也是默认开启的)

下面连接到mysql数据库中创建一个用户并赋予复制权限。

mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.139' IDENTIFIED BY "123456";

这样在主服务器上操作暂时完成了。

下面来在从服务器上操作:

修改主配置文件:my.cnf

因为在主mysql中已经有数据了,所以要把主服务器的数据导入到从服务器中,所以在主服务器上的操作:

以上操作完成后就可以做把主从连接在一起了。

在从服务器上进入数据库中

  • 下面就可以在从服务器上开启复制了

    mysql> start slave;

    查看是否连接成功:

    可在主服务器上创建一个数据库或表来在从服务器上来验证一下。

    下面来进行最为核心的内容——读写分离

    下面的操作要在读写分离的服务器上操作也就是:192.168.1.183

    Amoeba的安装:

    安装Amoeba前要先安装JDK,因为Amoeba是用java开发的所要有JDK支持。

    如果没有安装JDK,要先安装,方法如下 :

    安装完成后就可以安装Amoeba了

    下载:

  • wget %20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
  • 安装:

    解压后就完成了。下面要做的就是配置。

    下面就来配置一下。

    # cd /usr/local/amoeba

    # vim dbServer.xml

    下面来配置amoeba.xml文件

    配置完成后就可以启动amoeba了。

    从上面的一些信息可以看到amoeba已经启动,下面就可以测试一下了。

    下面来做一测试:

    为了更好的看到测试结果,要做以下这些步骤:

    测试之前要先保证amoeba-server有访问两个主从服务器test库的权限,在主mysql上执行:

    下面开始测试:

    先让主从开始复制,即在从服务器上执行:

    mysql> slave start;

    再从读写分离的服务器上登录:

    # mysql -uroot -p123456 -h192.168.1.183 -P8066

    进入之后,先来创建一个数据库zhou,然后在这个数据库中创建一个表test

    mysql> create database zhou;

    mysql> use zhou;

    mysql> create table test (id int(10), name varchar(20),adress varchar(30));

    做完这些,回到从服务器上执行:

    mysql> slave stop;

    接着在主从服务器上各加入一条不同的数据。

    在主上:

    mysql> use zhou;

    mysql> insert into test ('1','zhou','this_is_master');

    在从上:

    mysql> use zhou;

    mysql> insert into test ('2','zhou','this_is_slave');

    完成后就可以在读写分离服务器上测试读写了

    在读写分离服务器上:

    mysql> use zhou;

    mysql> select * from test;

    +------+------+---------------+

    | id | name | address |

    +------+------+---------------+

    | 2 | zhou | this_is_slave |

    +------+------+---------------+

    1 row in set (0.01 sec)

    从结果可以看出数据是读的从服务器上的数据,然后我们直接插入数据,再来测试

    mysql> insert into test values('3','hhh','test_write');

    Query OK, 1 row affected (0.01 sec)

    mysql> select * from test;

    +------+------+---------------+

    | id | name | address |

    +------+------+---------------+

    | 2 | zhou | this_is_slave |

    +------+------+---------------+

    1 row in set (0.00 sec)

    结果显示出的数据没有改变,网站空间,因为我们把主从复制停了,所以数据没有同步,从查询的结果可以看到,数据还是来自从服务器。

    然后们再在主服务器上查询可以看到:

    mysql> select * from test;

    +------+------+--------------- +

    | id | name | address |

    +------+------+--------------- +

    | 1 | zhou | this_is_master |

    +------+------+--------------- +

    | 3 | hhh | test_write |

    +------+------+--------------- +

    从上面的结果可以看出,数据的读写分离成功了。

    以上就是mysql数据库的主从复制以及读写分离的整个过程。文中可能还存在不完整或者出错的地方,还请大家指出来,香港服务器,谢谢了。

    本文出自 “linux学习” 博客,请务必保留此出处

    推荐阅读
    • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • Centos下安装memcached+memcached教程
      本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
    • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
    • Python项目实战10.2:MySQL读写分离性能优化
      本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
    • [翻译]微服务设计模式5. 服务发现服务端服务发现
      服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
    • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
      本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
    • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
      本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
    • Oracle优化新常态的五大禁止及其性能隐患
      本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
    • 14亿人的大项目,腾讯云数据库拿下!
      全国人 ... [详细]
    • ZooKeeper 学习
      前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
    author-avatar
    谁是美甲花样美指
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有