OneProxy并发查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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<string>

# 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;  

wKiom1X5JZLi7nawAAK7uWszmQg875.jpg

status这一栏为UP,表示集群正常。 

7)创建表 

登录OneProxy的转发端口 mysql-h<OneProxyIP> -P3307 -utest –ptest

注意:端口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插入测试数据

wKiom1X45mPAsVB6AAThPli40A0671.jpg

在master(192.168.1.132)主机下的test数据库下的表bigtable_1插入测试数据

wKioL1X46ImQr1AVAAYLSo9FbRs941.jpg

测试排序结果

CMD下连接上vip地址

C:\Users\jing> mysql -h192.168.1.120 -P3307 -utest -ptest

2.1.2、没有使用oreder by排序的情况

使用order by排序的情况(使用id号进行排序):

wKioL1X46HujKWUHAAWZzph9BQ4698.jpg

id号是主键,不同的表有相同的id号也不会发生冲突

wKiom1X45iLgehVdAAaemsaS5JE279.jpg

icol3


wKioL1X46EyQTPW2AAW1T2JksCg477.jpg  

2.2、group by分组测试

wKiom1X45cHBGc7TAADQTvkDAMc977.jpg

2.3、已经建好的两个表,OneProxy实现并发查询

  已经建好的两个表(不通过OneProxy进行分库分表),OneProxy要实现并发查询,对表名的格式有要求,表名后缀必须以“_0”、“_1”……结尾。可以通过建立视图的方法(相当于给原来的表建立一个表别名)来解决这个问题。

测试过程:

1)在主机为192.168.1.128 apex_db库下,有一个表名为apex_tb,给表名apex_tb建立一个视图apex_tb_0, 

wKioL1X45-KhdboaAAFX380IS74383.jpg

2)在主机为192.168.1.132 apex_db库下,有一个表名为apex_tb,给表名apex_tb建立一个视图apex_tb_1

wKiom1X45ZvghtxmAAG27NjvBZM754.jpg

3)通过以上的操作OneProxy就可以并发查询已经建好的两个表(要求表结构相同)。2.4、存储过程测试结论:不支持存储过程

wKiom1X45XiAgek2AADxeteIY9A893.jpg

可以建立存储过程,但是不能用call进行调用。




本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1695380,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
265
分享
相关文章
不了解 QPS、TPS、RT、并发数、吞吐量,劝你简历别写熟悉高并发
分布式、微服务、Service Mesh目前都是大家耳熟能详的词语了,现在随便一个互联网公司说出来大家都是在搞微服务。 但我们搞来搞去,怎么样来衡量一个应用当前的状态到底是怎么样的?到底需不需要扩容?是需要横向扩容还是进行项目重构?
10073 2
Typhoeus库在处理大量并发请求时的优化技巧
Typhoeus库在处理大量并发请求时的优化技巧
面试官:假如有几十个请求,如何去控制并发?
面试官:假如有几十个请求,如何去控制并发?
【缓存大对决】Memcached VS MySQL查询缓存,谁才是真正的性能之王?
【8月更文挑战第24天】在现代Web应用中,缓存技术对于提升性能与响应速度至关重要。本文对比分析了Memcached与MySQL查询缓存这两种常用方案。Memcached是一款高性能分布式内存对象缓存系统,支持跨服务器共享缓存,具备灵活性与容错性,但受限于内存大小且不支持数据持久化。MySQL查询缓存内置在MySQL服务器中,简化了缓存管理,特别适用于重复查询,但功能较为单一且扩展性有限。两者各有所长,实际应用中可根据需求单独或结合使用,实现最佳性能优化。
287 0
|
10月前
|
应对数据库不断膨胀的数据:缓存和队列中间件
【6月更文挑战第5天】该文探讨了优化数据库使用以提升应用系统性能的策略。文中建议利用Redis缓存和MQ消息队列作为辅助工具,以进一步优化性能和减少资源消耗。
337 2
应对数据库不断膨胀的数据:缓存和队列中间件
[go 面试] 缓存策略与应对数据库压力的良方
[go 面试] 缓存策略与应对数据库压力的良方
|
11月前
|
【源码共读】大并发量如何控制并发数
【源码共读】大并发量如何控制并发数
172 0
服务器百万并发的原理与实现
服务器百万并发的原理与实现
232 0
掌控MySQL并发:深度解析锁机制与并发控制
本文详尽地探索了MySQL中处理并发事务的各种方式,从基础的锁机制到高级的MVCC,从行锁到表锁,从读操作到写操作。我们将深入解析隐式锁、插入意向锁和其他类型的锁在MySQL并发控制中的作用,以及如何在各种场景中使用这些锁机制来保证数据的一致性和事务的并发性。
490 1
掌控MySQL并发:深度解析锁机制与并发控制
高并发帐户查询怎么做?
高并发帐户查询怎么做?
165 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等