[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<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插入測試資料
<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> 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,如需轉載請自行聯系原作者