amoeba实现mysql数据库读写分离
来源:互联网 发布:淘宝在哪里领取优惠卷 编辑:程序博客网 时间:2024/05/01 11:22
最近学习分布式数据库,想做一个只使用mysql读写分离的小demo,发现问题挺多的,虽然有很多前辈都有相关讲解,但是由于一些版本原因,导致坑比较多,在这里记一下。本文主要参考博客:http://www.cnblogs.com/alvin_xp/p/4162249.html
一、准备工作
本次demo在windows和Ubuntu上安装了两个mysql,计划以windows上的做主数据库,用于写操作;虚拟机上的作为从数据库,用于读,以减少单个数据库的压力。(安装过程这里不再赘述,需要的可以自行百度)
下载amoeba客户端 https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/ (解压在windows上即可)
二、mysql主从关系建立
1.远程访问问题
首先,第一点,mysql是默认用户只能在本机访问的,所以需要给用户赋权才能远程访问。(强烈建议新建用户赋权)
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'%' IDENTIFIED BY '密码';
以为这就完了?还有坑!Linux下的mysql在配置文件里绑定本机ip访问,所以必须要找到它,解除绑定。
我的配置文件是在/etc/mysql/mysql.conf.d/mysql.cnf 下,编辑它
里面有一句:
bind-address=127.0.0.1 在它前面加上#注解掉!
2.日志输出问题
然后修改windows下的配置文件,让它支持日志输出(从数据库需要这个),
找到my.ini文件,又是巨坑.你以为它是在C:\Program Files\MySQL\MySQL Server 5.7文件夹下,一看只有一个my-default.ini ,以为版本变更改名了?
其实人家不是,真正的在C:\ProgramData\MySQL\MySQL Server 5.7 文件夹下.在[mysqld]这句话后面加上:
server-id=1 log-bin=master-binlog-bin-index=master-bin.index
测试一下:重启mysql服务,cmd登陆进去,执行这一句:
SHOW MASTER STATUS;
有结果返回就算成功了.
然后去改Ubuntu上的,一般会放在/etc/my.cnf,/etc/mysql/my.cnf
实在找不到就查找吧:
find / -name my.cnf
然后在里面加上:
[mysqld]server-id=2relay-log-index=slave-relay-bin.indexrelay-log=slave-relay-bin
3.主从连接问题
然后让从数据库连接上主数据库,从数据库登录mysql,执行如下代码:
change master to master_host='192.168.0.104', //Master 主数据库电脑Ipmaster_port=3306,master_user='repl',//主数据库用户名master_password='mysql',//密码master_log_file='master-bin.000001',//主数据库产生的日志master_log_pos=0;
没报错就是执行成功了,执行下面这段代码启动重启数据库:
start slave;
如果不行重启下服务
这样就执行成功了,想检验下是否成功,可以再主数据库上添加一个数据库看看:
主数据库执行:create database hello;
从数据库执行:show databases;
查看到就说明成功了.
以上,主从数据库配置完成.
再次建议,新手结合这篇博文使用:
http://www.cnblogs.com/alvin_xp/p/4162249.html
三、使用amoeba代理进行读写操作的分离工作。
amoeba很强大,这里只是示范,不深究哈
代理原理,我们不再直接访问mysql,只是以访问mysql的格式在访问amoeba,它替我们进行读写分离.
(conf目录下)
1.amoeba.xml
amoeba.xml中找到下面这句话,代理
<!--默认端口号,不冲突别动--><property name="port">8066</property><!--下面把root改成你的用户名和密码--><property name="user">root</property><property name="password">root</property><!--进行读写分离,这个被注释的内容要打开,这里的服务名后面将--><property name="writePool">server1</property><property name="readPool">server2</property>
2.dbServers.xm
然后是这个文件dbServers.xml,对数据库进行管理,需要配置项就是你每个数据库的连接,一个dbserver是一个数据库,不过最新版本已经做了优化,抽象出不变的配置,只需要配一次即可,只有ipAddress需要单独配置,当然如果有不与父类配置相同的,重写一遍即可(未测试):
<!-- mysql 端口号 --><property name="port">3306</property><!-- mysql schema --><property name="schema">amoeba1</property><!-- mysql 用户名密码 --><property name="user">slave</property><property name="password">1234</property><!-- 配置每个数据库的名称,ip --><dbServer name="server2" parent="abstractServer"><factoryConfig> <!-- mysql ip --> <property name="ipAddress">10.10.10.152</property></factoryConfig></dbServer>
还有一个数据库负载均衡的配置:
<dbServer name="multiPool" virtual="true"><poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!--1代表轮询,2代表权重,3... --><property name="loadbalance">1</property><!-- 把你的数据库名都填进去 --><property name="poolNames">server1,server2</property></poolConfig></dbServer>
这样基本就OK了,如果需要深究,建议阅读官方文档:
http://docs.hexnova.com/amoeba/
3.测试
测试方法:双击bin/launcher.bat允许,没报错说明启动成功:
新开一个cmd,以访问mysql的方式访问amoeba:
mysql -uroot -h127.0.0.1 -P8066 -proot
改成自己的用户名密码端口号,访问成功.
然后,我用eclipse搭了个框架,用mybatis访问了一下,报错了….
问题出在mysql驱动上,amoeba有点老了,新的驱动跟它连不上,于是我换了一个5.1.21版本的,测试成功.
至于测试是否真的实现读写分离了,可以参考其他博主的文章,这里不再赘述.
当然,如果发现我这样还没有真正达到读写分离的话,我还会回来的…
谢谢观看~
- Amoeba数据库代理 实现mysql读写分离
- amoeba实现mysql数据库读写分离
- Amoeba+mysql实现读写分离
- Amoeba实现mysql读写分离
- Amoeba实现mysql读写分离
- mysql中间件amoeba实现mysql读写分离
- 【mysql】amoeba实现mysql读写分离
- Mysql数据库主从+Amoeba读写分离
- 用amoeba实现数据库的读写分离
- mysql amoeba读写分离
- MySQL Amoeba读写分离
- mysql读写分离 amoeba
- MySQL-amoeba-读写分离
- 使用Amoeba实现MySQL读写分离
- amoeba + mysql-mmm 实现读写分离
- Amoeba实现mysql主从读写分离
- 使用Amoeba实现mysql读写分离
- 使用Amoeba 实现MySQL DB 读写分离
- java的类和对象
- hibernate 只进 ResultSet 不支持请求的操作
- myeclipse里重要的快捷键
- BIF 字符判断的内置函数
- java 常用类之String-StringBuffer
- amoeba实现mysql数据库读写分离
- JNI返回自定义结构体数组到Java
- 数据库事务的四大特性以及事务的隔离级别
- 作业
- 中断和异常的概念
- java简单实例
- NumPy基础练习(练一遍搞定NumPy)
- ZigBee串口说明
- Python高级可视化库seaborn分布分析(基础整理)