<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/"><proxy><!-- service class must implements com.meidusa.amoeba.service.Service --><service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager"><!-- Amoeba 端口号 --><property name="port">8066</property><!-- bind ipAddress --><!-- <property name="ipAddress">127.0.0.1</property>--><property name="manager">${clientConnectioneManager}</property><property name="connectionFactory"><bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"><property name="sendBufferSize">128</property><property name="receiveBufferSize">64</property></bean></property><property name="authenticator"><bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"><!-- Amoeba 账号,密码 --><property name="user">root</property><property name="password">root</property><property name="filter"><bean class="com.meidusa.amoeba.server.IPAccessController"><property name="ipFile">${amoeba.home}/conf/access_list.conf</property></bean></property></bean></property></service><!-- server class must implements com.meidusa.amoeba.service.Service --><service name="Amoeba Monitor Server" class="com.meidusa.amoeba.monitor.MonitorServer"><!-- port --><!--  default value: random number<property name="port">9066</property>--><!-- bind ipAddress --><property name="ipAddress">127.0.0.1</property><property name="daemon">true</property><property name="manager">${clientConnectioneManager}</property><property name="connectionFactory"><bean class="com.meidusa.amoeba.monitor.net.MonitorClientConnectionFactory"></bean></property></service><runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"><!-- proxy server net IO Read thread size --><property name="readThreadPoolSize">20</property><!-- proxy server client process thread size --><property name="clientSideThreadPoolSize">30</property><!-- mysql server data packet process thread size --><property name="serverSideThreadPoolSize">30</property><!-- per connection cache prepared statement size  --><property name="statementCacheSize">500</property><!-- query timeout( default: 60 second , TimeUnit:second) --><property name="queryTimeout">60</property></runtime></proxy><!-- Each ConnectionManager will start as threadmanager responsible for the Connection IO read , Death Detection--><connectionManagerList><connectionManager name="clientConnectioneManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper"><property name="subManagerClassName">com.meidusa.amoeba.net.ConnectionManager</property><!-- default value is avaliable Processors <property name="processors">5</property>--></connectionManager><connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper"><property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property><!-- default value is avaliable Processors <property name="processors">5</property>--></connectionManager></connectionManagerList><!-- default using file loader --><dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader"><property name="configFile">${amoeba.home}/conf/dbServers.xml</property></dbServerLoader><queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"><property name="ruleLoader"><bean class="com.meidusa.amoeba.route.TableRuleFileLoader"><property name="ruleFile">${amoeba.home}/conf/rule.xml</property><property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property></bean></property><property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property><property name="LRUMapSize">1500</property><!-- 默认数据库,主数据库 --><property name="defaultPool">master</property><!-- 写数据库 --><property name="writePool">master</property><!-- 读数据库,dbServer.xml 中配置的 虚拟数据库,数据库池 --><property name="readPool">slaves</property><property name="needParse">true</property></queryRouter>
</amoeba:configuration>
rule.xml
Java代码
  1. <?xml version="1.0" encoding="gbk"?>
  2. <!DOCTYPE amoeba:rule SYSTEM "rule.dtd">
  3. <amoeba:rule xmlns:amoeba="http://amoeba.meidusa.com/">
  4. <tableRule name="message" schema="test" defaultPools="server1">
  5. </tableRule>
  6. </amoeba:rule>
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:rule SYSTEM "rule.dtd">
<amoeba:rule xmlns:amoeba="http://amoeba.meidusa.com/"><tableRule name="message" schema="test" defaultPools="server1"></tableRule>
</amoeba:rule>
不需要 数据库分片时,不用配置。 但是不能没有 tableRule 元素, 否则报错。 随便写个空规则就行了。
3. 测试读写分离
a. 在 Master , Slave1 , Slave2 中分别查看 日志文件: mysql.log
Shell代码
  1. tail -f ./log/mysql.log
tail -f ./log/mysql.log
b. 启动 Amoeba, 使用 Mysql GUI Tools 连接 Amoeba

执行以上几个命令。 查看日志内容。
Master mysql.log
Shell代码
  1. [mysql@prx1 mysql]$ tail -f log/mysql.log
  2. 370 Query SET SESSION sql_mode=''
  3. 370 Query SET NAMES utf8
  4. 370 Query SHOW FULL TABLES
  5. 370 Query SHOW COLUMNS FROM `t_message`
  6. 370 Query SHOW COLUMNS FROM `t_user`
  7. 370 Query SHOW PROCEDURE STATUS
  8. 370 Query SHOW FUNCTION STATUS
  9. 110813 15:21:11 370 Query SHOW VARIABLES LIKE 'character_set_server'
  10. 370 Query SHOW FULL COLUMNS FROM `test`.`t_message`
  11. 110813 15:21:12 370 Query SHOW CREATE TABLE `test`.`t_message`
  12. 110813 15:22:40 374 Connect test_user@192.168.14.129 on test
  13. 375 Connect test_user@192.168.14.129 on test
  14. 376 Connect test_user@192.168.14.129 on test
  15. 110813 15:23:40 370 Query insert into t_message values(1, 'c1')
  16. 110813 15:24:07 377 Connect test_user@192.168.14.129 on test
  17. 378 Connect test_user@192.168.14.129 on test
  18. 379 Connect test_user@192.168.14.129 on test
  19. 110813 15:24:15 370 Query insert into t_user values(8, 'n8', 'p8')
  20. 110813 15:24:24 370 Query SHOW FULL COLUMNS FROM `test`.`t_user`
  21. 370 Query SHOW CREATE TABLE `test`.`t_user`
  22. 110813 15:24:35 370 Query SHOW FULL COLUMNS FROM `test`.`t_message`
  23. 370 Query SHOW CREATE TABLE `test`.`t_message`
[mysql@prx1 mysql]$ tail -f log/mysql.log370 Query     SET SESSION sql_mode=''370 Query     SET NAMES utf8370 Query     SHOW FULL TABLES370 Query     SHOW COLUMNS FROM `t_message`370 Query     SHOW COLUMNS FROM `t_user`370 Query     SHOW PROCEDURE STATUS370 Query     SHOW FUNCTION STATUS
110813 15:21:11   370 Query     SHOW VARIABLES LIKE 'character_set_server'370 Query     SHOW FULL COLUMNS FROM `test`.`t_message`
110813 15:21:12   370 Query     SHOW CREATE TABLE `test`.`t_message`
110813 15:22:40   374 Connect   test_user@192.168.14.129 on test375 Connect   test_user@192.168.14.129 on test376 Connect   test_user@192.168.14.129 on test
110813 15:23:40   370 Query     insert into t_message values(1, 'c1')
110813 15:24:07   377 Connect   test_user@192.168.14.129 on test378 Connect   test_user@192.168.14.129 on test379 Connect   test_user@192.168.14.129 on test
110813 15:24:15   370 Query     insert into t_user values(8, 'n8', 'p8')
110813 15:24:24   370 Query     SHOW FULL COLUMNS FROM `test`.`t_user`370 Query     SHOW CREATE TABLE `test`.`t_user`
110813 15:24:35   370 Query     SHOW FULL COLUMNS FROM `test`.`t_message`370 Query     SHOW CREATE TABLE `test`.`t_message`
Slave1 mysql.log
Shell代码
  1. [mysql@prx2 mysql]$ tail -f log/mysql.log
  2. 317 Connect test_user@192.168.14.129 on test
  3. 318 Connect test_user@192.168.14.129 on test
  4. 110813 15:35:30 315 Query SELECT @@sql_mode
  5. 110813 15:35:32 315 Query SELECT @@sql_mode
  6. 110813 15:35:44 315 Query SELECT @@SQL_MODE
  7. 110813 15:35:46 315 Query SELECT @@SQL_MODE
  8. 110813 15:37:18 319 Connect test_user@192.168.14.129 on test
  9. 320 Connect test_user@192.168.14.129 on test
  10. 110813 15:37:19 321 Connect test_user@192.168.14.129 on test
  11. 110813 15:37:26 246 Quit
  12. 110813 15:38:21 315 Query SELECT @@SQL_MODE
  13. 110813 15:38:22 42 Query BEGIN
  14. 42 Query insert into t_message values(1, 'c1')
  15. 42 Query COMMIT /* implicit, from Xid_log_event */
  16. 110813 15:38:50 322 Connect test_user@192.168.14.129 on test
  17. 323 Connect test_user@192.168.14.129 on test
  18. 324 Connect test_user@192.168.14.129 on test
  19. 110813 15:38:58 42 Query BEGIN
  20. 42 Query insert into t_user values(8, 'n8', 'p8')
  21. 42 Query COMMIT /* implicit, from Xid_log_event */
  22. 110813 15:39:08 315 Query SELECT @@SQL_MODE
  23. 110813 15:39:19 315 Query SELECT @@SQL_MODE
  24. 110813 15:44:08 325 Connect test_user@192.168.14.129 on test
  25. 326 Connect test_user@192.168.14.129 on test
  26. 327 Connect test_user@192.168.14.129 on test
[mysql@prx2 mysql]$ tail -f log/mysql.log317 Connect   test_user@192.168.14.129 on test318 Connect   test_user@192.168.14.129 on test
110813 15:35:30   315 Query     SELECT @@sql_mode
110813 15:35:32   315 Query     SELECT @@sql_mode
110813 15:35:44   315 Query     SELECT @@SQL_MODE
110813 15:35:46   315 Query     SELECT @@SQL_MODE
110813 15:37:18   319 Connect   test_user@192.168.14.129 on test320 Connect   test_user@192.168.14.129 on test
110813 15:37:19   321 Connect   test_user@192.168.14.129 on test
110813 15:37:26   246 Quit
110813 15:38:21   315 Query     SELECT @@SQL_MODE
110813 15:38:22    42 Query     BEGIN42 Query     insert into t_message values(1, 'c1')42 Query     COMMIT /* implicit, from Xid_log_event */
110813 15:38:50   322 Connect   test_user@192.168.14.129 on test323 Connect   test_user@192.168.14.129 on test324 Connect   test_user@192.168.14.129 on test
110813 15:38:58    42 Query     BEGIN42 Query     insert into t_user values(8, 'n8', 'p8')42 Query     COMMIT /* implicit, from Xid_log_event */
110813 15:39:08   315 Query     SELECT @@SQL_MODE
110813 15:39:19   315 Query     SELECT @@SQL_MODE
110813 15:44:08   325 Connect   test_user@192.168.14.129 on test326 Connect   test_user@192.168.14.129 on test327 Connect   test_user@192.168.14.129 on test
Slave2 mysql.log
Shell代码
  1. [mysql@prx3 mysql]$ tail -f log/mysql.log
  2. 110813 15:35:08 305 Connect test_user@192.168.14.129 on test
  3. 306 Connect test_user@192.168.14.129 on test
  4. 307 Connect test_user@192.168.14.129 on test
  5. 110813 15:35:31 304 Query SELECT @@sql_mode
  6. 304 Query SELECT @@sql_mode
  7. 110813 15:35:44 304 Query SELECT @@SQL_MODE
  8. 110813 15:35:46 304 Query SELECT * FROM t_message t
  9. 110813 15:37:18 308 Connect test_user@192.168.14.129 on test
  10. 309 Connect test_user@192.168.14.129 on test
  11. 310 Connect test_user@192.168.14.129 on test
  12. 110813 15:38:21 8 Query BEGIN
  13. 8 Query insert into t_message values(1, 'c1')
  14. 8 Query COMMIT /* implicit, from Xid_log_event */
  15. 110813 15:38:50 311 Connect test_user@192.168.14.129 on test
  16. 312 Connect test_user@192.168.14.129 on test
  17. 313 Connect test_user@192.168.14.129 on test
  18. 110813 15:38:58 304 Query SELECT @@SQL_MODE
  19. 8 Query BEGIN
  20. 8 Query insert into t_user values(8, 'n8', 'p8')
  21. 8 Query COMMIT /* implicit, from Xid_log_event */
  22. 110813 15:39:08 304 Query select * from t_user
  23. 110813 15:39:19 304 Query select * from t_message
  24. 110813 15:44:08 314 Connect test_user@192.168.14.129 on test
  25. 315 Connect test_user@192.168.14.129 on test
  26. 316 Connect test_user@192.168.14.129 on test
[mysql@prx3 mysql]$ tail -f log/mysql.log
110813 15:35:08   305 Connect   test_user@192.168.14.129 on test306 Connect   test_user@192.168.14.129 on test307 Connect   test_user@192.168.14.129 on test
110813 15:35:31   304 Query     SELECT @@sql_mode304 Query     SELECT @@sql_mode
110813 15:35:44   304 Query     SELECT @@SQL_MODE
110813 15:35:46   304 Query     SELECT * FROM t_message t
110813 15:37:18   308 Connect   test_user@192.168.14.129 on test309 Connect   test_user@192.168.14.129 on test310 Connect   test_user@192.168.14.129 on test
110813 15:38:21     8 Query     BEGIN8 Query     insert into t_message values(1, 'c1')8 Query     COMMIT /* implicit, from Xid_log_event */
110813 15:38:50   311 Connect   test_user@192.168.14.129 on test312 Connect   test_user@192.168.14.129 on test313 Connect   test_user@192.168.14.129 on test
110813 15:38:58   304 Query     SELECT @@SQL_MODE8 Query     BEGIN8 Query     insert into t_user values(8, 'n8', 'p8')8 Query     COMMIT /* implicit, from Xid_log_event */
110813 15:39:08   304 Query     select * from t_user
110813 15:39:19   304 Query     select * from t_message
110813 15:44:08   314 Connect   test_user@192.168.14.129 on test315 Connect   test_user@192.168.14.129 on test316 Connect   test_user@192.168.14.129 on test
从日志中可以看出。
在 Master mysql.log 中,只执行了 insert into 命令。
在 Slave1 中,只是复制了 insert into 命令, 是主从复制的结果
在 Slave2 中, 复制了 insert into 命令,同时还执行了 select 命令。
说明,主从分离已经成功。

转载于:https://blog.51cto.com/zhyuxuan/911742

Mysql 基于 Amoeba 的 读写分离(2)相关推荐

  1. Mysql 基于 Amoeba 的 读写分离

    首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别: 在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群.写集群 机器比较多情况下,用mysql pro ...

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

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

  3. MySQL主从复制和基于Amoeba的读写分离部署

    文章目录 MySQL主从复制和基于Amoeba读写分离 什么是主从复制? 为什么要有MySQL主从复制? 什么是读写分离? 一.MySQL主从复制原理 二.主从复制的工作过程 三.主从复制方式 1.异 ...

  4. mysql5.6主从复制与基于amoeba实现读写分离

    Mysql5.6主从复制 1.特性分析说明: mysql 5.6支持多线程复制的机制并且mysql 5.6还引用了GTID的概念,使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮. TID ...

  5. mysql amoeba 事务_MySQL基于Amoeba实现读写分离

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

  6. mysql基于mysql-proxy和amoeba的读写分离以及tcpdump+wireshark工具验证(上)

    mysql基于mysql-proxy和amoeba的读写分离 以及tcpdump+wireshark工具验证 [实验部署准备] 1,首先对后端节点部署主从关系. 2,然后前端MySQL-proxy对后 ...

  7. MySQL的主从复制、读写分离(amoeba)

    目录 一.MySQL主从复制 1.1 MySQL复制的类型 1.2 工作原理 1.3 mysql的四种同步的方式 二.MySQL的读写分离 2.1 什么是读写分离 2.2 读写分离的好处 2.3 常见 ...

  8. 【纯干货】Amoeba实现MySQL主从同步与读写分离

    [纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...

  9. 【MySql】mysql之主从复制和读写分离搭建

    [MySql]mysql之主从复制和读写分离搭建 文章目录 [MySql]mysql之主从复制和读写分离搭建 1主从复制 1.1MySql支持从复制类型 1.2主从复制的原理 1.3主从复制的工作过程 ...

最新文章

  1. 【深度学习入门到精通系列】遗传算法 (Genetic Algorithm)
  2. 获得供应商最近一次报价:OVER(PARTITION BY)函数用法的实际用法
  3. GDCM:gdcm::PixelFormat的测试程序
  4. php pdo预处理查询,关于php:从PDO预处理语句中获取原始SQL查询字符串
  5. vscode 新建php模板,使用vscode快速建立vue模板
  6. 第2章 Python 数字图像处理(DIP) --数字图像基础1 - 视觉感知要素 - 亮度适应与辨别
  7. c语言指针自定义函数,c语言函数指针定义,指针函数和函数指针的区别
  8. 鸿星尔克与钉钉签署专属音视频合作 全国5千家门店均可接入
  9. 学习老男孩linux全程班决心书
  10. 腾讯:干掉头条,先拿抖音开刀!
  11. python匿名函数就是没有名字的函数_python 之 匿名函数
  12. Linux爆本地提权漏洞 请立即更新udev程序
  13. PHP使用redis设置锁
  14. WinServer 2012 R2 搭建域控服务器、文件服务器并配置权限
  15. MFC 程序设计读书体会
  16. Sentaurus TCAD 2013 在RedHat7.0 Linux系统的安装教程
  17. tensorflow获取动态shape
  18. 布局万花筒:UIColletionview
  19. 魔兽世界开服一条龙服务端架设服务器搭建
  20. ubuntu提示根目录存储空间不足的解决办法

热门文章

  1. android mac测试地址,android获取有线网的Mac地址
  2. Java项目:OA办公自动化系统设计和实现(java+springboot+freemarker+mysql+maven+mybatis+jpa)
  3. String.hashCode 哈希值出现重复?
  4. python银行家算法代码_避免死锁的银行家算法C++程序实现
  5. python捕获异常后处理_python异常捕获处理
  6. 算法(2)KMP算法
  7. 样式集(二) 信息填写样式模板
  8. 13-flutter 加载图片
  9. iOS 中 load 和 initialize的实现顺序
  10. RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass