OneProxy并发查询
1、OneProxy安装
[root@redhat Desktop]# mv oneproxy-rhel6-linux64-v5.7-ga.tar.gz/usr/local
[root@redhat Desktop]# cd /usr/local/
[root@redhat local]# tar zxvf oneproxy-rhel6-linux64-v5.7-ga.tar.gz
[root@redhat local]# cd oneproxy/
[root@redhat oneproxy]# cat demo.sh
#/bin/bash
#
exportONEPROXY_HOME=/data/oneproxy
#valgrind --leak-check=full --show-reachable=yes \
${ONEPROXY_HOME}/oneproxy--keepalive --proxy-address=:3307 \
--vip-address=192.168.1.120/eth0:0 \
--proxy-master-addresses=192.168.1.20:3306@server1 \
--proxy-slave-addresses=192.168.1.119:3306@server1 \
--proxy-user-list=test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test \
--proxy-part-tables=${ONEPROXY_HOME}/part.txt\
--proxy-charset=gbk_chinese_ci \
--event-threads=4--proxy-group-security=server1:0 \
--log-file=${ONEPROXY_HOME}/oneproxy.log \
--pid-file=${ONEPROXY_HOME}/oneproxy.pid
修改相关语句
[root@redhat oneproxy]# cat demo.sh
#/bin/bash
#
export ONEPROXY_HOME=/usr/local/oneproxy
#valgrind --leak-check=full --show-reachable=yes \
${ONEPROXY_HOME}/oneproxy--keepalive --proxy-address=:3307 \
--vip-address=192.168.1.120/eth0:0 \
--proxy-master-addresses=192.168.1.128:3306@data1 \
--proxy-master-addresses=192.168.1.132:3306@data2\
--proxy-user-list=test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test \
--proxy-part-tables=${ONEPROXY_HOME}/hashpart.txt \
--proxy-charset=gbk_chinese_ci \
--proxy-group-security=server1:0 \
--proxy-group-policy=data1:master-only\
--proxy-group-policy=data2:master-only \
--log-file=${ONEPROXY_HOME}/oneproxy.log \
--pid-file=${ONEPROXY_HOME}/oneproxy.pid
注释:
A) --proxy-user-list=test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test其中第一个test为连接proxy的用户名,该用户名也是用来连接后端数据库的用户名;1378F6CC3A8E8A43CA388193FBED5405982FBBD3为test用户的加密口令;最后一个test为各个数据库节点中的test数据库。
B)口令加密。启动OneProxy之后,进入管理端口,然后键入passwd
# mysql -uadmin -h 127.0.0.1 -P4041 -pOneProxy
mysql> passwd test;
+------+------------------------------------------+
| TEXT | PASSWORD |
+------+------------------------------------------+
| test | 1378F6CC3A8E8A43CA388193FBED5405982FBBD3 |
+------+------------------------------------------+
1 row in set (0.00 sec)
C) 分表文件hashpart.txt
[root@redhatoneproxy]# cat hashpart.txt
[
{
"table" :"bigtable",
"pkey" : "id",
"type" : "int",
"method" : "hash",
"partitions": 256,
"groups":["data1","data2"]
}
]
其中table:拆分的表;pkey:分表列;type:分表列类型,目前支持的类型为int和char;method:分区方法,目前支持hash,range,list,global
4)安装数据节点,并赋予用户相应权限。
A)MySQL安装(安装步骤略)
B)权限分配
登录到各个底层数据库所在的linux主机上,运行如下命令:
mysql-uroot -p -e "grant all privileges on *.* to test@'%' identified by 'test'"
5)启动
sh ./demo.sh
6)检查后端数据库节点状态
进入管理端口(默认端口为4041)
mysql -uadmin -h 127.0.0.1 -P4041 -pOneProxy
然后键入
list backend;
status这一栏为UP,表示集群正常。
7)创建表
登录OneProxy的转发端口 mysql-h
注意:端口3307需要打开
C:\Users\jing>mysql -h192.168.1.120 -P3307 -utest-ptest
DDL语句:
CREATE TABLE `bigtable` (
`id` bigint(20) NOT NULL,
`start` datetime DEFAULT NULL,
`icol3` int(11) DEFAULT NULL COMMENT ' 1-10 ',
`icol4` int(11) DEFAULT NULL COMMENT ' 1-100 ',
`icol5` int(11) DEFAULT NULL COMMENT ' 1-1000 ',
`icol6` int(11) DEFAULT NULL,
`vcol7` varchar(20) DEFAULT NULL,
`vcol8` varchar(20) DEFAULT NULL,
`vcol9` varchar(30) DEFAULT NULL,
`vcol10` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`) ) ;
执行这个语句,会看到报错:
ERROR 1044 (42000): Access denied due to securitypolicy, DDL disabled or DML restricted!
解释:由于OneProxy为了安全起见,默认是禁止DDL语句的。
解决办法:从OneProxy管理端口,运行如下命令
C:\Users\jing>mysql -h192.168.1.120 -P4041-uadmin -pOneProxy -e "set gaccess data1:master-only"
C:\Users\jing>mysql -h192.168.1.120 -P4041-uadmin -pOneProxy -e "set gaccess data2:master-only"
再次登录到OneProxy的转发端口,运行DDL命令即可成功。
经过上面的步骤之后,256个表就在2个底层数据库中创建好了,分别为bigtable_0 , bigtable_1.....bigtable_255。
2、OneProxy测试
2.1、order by排序测试
2.1.1插入测试数据
在redhat(192.168.1.128)主机下的test数据库下的表bigtable_0插入测试数据
在master(192.168.1.132)主机下的test数据库下的表bigtable_1插入测试数据
测试排序结果
CMD下连接上vip地址
C:\Users\jing> mysql -h192.168.1.120 -P3307 -utest -ptest
2.1.2、没有使用oreder by排序的情况
使用order by排序的情况(使用id号进行排序):
id号是主键,不同的表有相同的id号也不会发生冲突
2.1.3、使用order by排序的情况(使用icol3号进行排序)
2.2、group by分组测试
2.3、已经建好的两个表,OneProxy实现并发查询
已经建好的两个表(不通过OneProxy进行分库分表),OneProxy要实现并发查询,对表名的格式有要求,表名后缀必须以“_0”、“_1”……结尾。可以通过建立视图的方法(相当于给原来的表建立一个表别名)来解决这个问题。
测试过程:
1)在主机为192.168.1.128 apex_db库下,有一个表名为apex_tb,给表名apex_tb建立一个视图apex_tb_0,
2)在主机为192.168.1.132 apex_db库下,有一个表名为apex_tb,给表名apex_tb建立一个视图apex_tb_1
3)通过以上的操作OneProxy就可以并发查询已经建好的两个表(要求表结构相同)。2.4、存储过程测试—结论:不支持存储过程
可以建立存储过程,但是不能用call进行调用。