天天看點

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

修改相關語句

export ONEPROXY_HOME=/usr/local/oneproxy

  --proxy-master-addresses=192.168.1.128:3306@data1 \

  --proxy-master-addresses=192.168.1.132:3306@data2\

  --proxy-part-tables=${ONEPROXY_HOME}/hashpart.txt \

  --proxy-group-security=server1:0 \

  --proxy-group-policy=data1:master-only\

  --proxy-group-policy=data2:master-only \

注釋:

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;  

<a href="http://s3.51cto.com/wyfs02/M00/73/49/wKiom1X5JZLi7nawAAK7uWszmQg875.jpg" target="_blank"></a>

status這一欄為UP,表示叢集正常。 

7)建立表 

登入OneProxy的轉發端口 mysql-h&lt;OneProxyIP&gt; -P3307 -utest –ptest

注意:端口3307需要打開

C:\Users\jing&gt;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&gt;mysql -h192.168.1.120 -P4041-uadmin -pOneProxy -e "set gaccess data1:master-only"

C:\Users\jing&gt;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插入測試資料

<a href="http://s3.51cto.com/wyfs02/M01/73/45/wKiom1X45mPAsVB6AAThPli40A0671.jpg" target="_blank"></a>

在master(192.168.1.132)主機下的test資料庫下的表bigtable_1插入測試資料

<a href="http://s3.51cto.com/wyfs02/M01/73/42/wKioL1X46ImQr1AVAAYLSo9FbRs941.jpg" target="_blank"></a>

測試排序結果

CMD下連接配接上vip位址

C:\Users\jing&gt; mysql -h192.168.1.120 -P3307 -utest -ptest

2.1.2、沒有使用oreder by排序的情況

使用order by排序的情況(使用id号進行排序):

<a href="http://s3.51cto.com/wyfs02/M00/73/41/wKioL1X46HujKWUHAAWZzph9BQ4698.jpg" target="_blank"></a>

id号是主鍵,不同的表有相同的id号也不會發生沖突

<a href="http://s3.51cto.com/wyfs02/M02/73/45/wKiom1X45iLgehVdAAaemsaS5JE279.jpg" target="_blank"></a>

icol3

2.2、group by分組測試

<a href="http://s3.51cto.com/wyfs02/M01/73/45/wKiom1X45cHBGc7TAADQTvkDAMc977.jpg" target="_blank"></a>

2.3、已經建好的兩個表,OneProxy實作并發查詢

  已經建好的兩個表(不通過OneProxy進行分庫分表),OneProxy要實作并發查詢,對表名的格式有要求,表名字尾必須以“_0”、“_1”……結尾。可以通過建立視圖的方法(相當于給原來的表建立一個表别名)來解決這個問題。

測試過程:

1)在主機為192.168.1.128 apex_db庫下,有一個表名為apex_tb,給表名apex_tb建立一個視圖apex_tb_0, 

<a href="http://s3.51cto.com/wyfs02/M02/73/41/wKioL1X45-KhdboaAAFX380IS74383.jpg" target="_blank"></a>

2)在主機為192.168.1.132 apex_db庫下,有一個表名為apex_tb,給表名apex_tb建立一個視圖apex_tb_1

<a href="http://s3.51cto.com/wyfs02/M02/73/45/wKiom1X45ZvghtxmAAG27NjvBZM754.jpg" target="_blank"></a>

3)通過以上的操作OneProxy就可以并發查詢已經建好的兩個表(要求表結構相同)。2.4、存儲過程測試—結論:不支援存儲過程

<a href="http://s3.51cto.com/wyfs02/M01/73/45/wKiom1X45XiAgek2AADxeteIY9A893.jpg" target="_blank"></a>

可以建立存儲過程,但是不能用call進行調用。

本文轉自 corasql 51CTO部落格,原文連結:http://blog.51cto.com/corasql/1695380,如需轉載請自行聯系原作者