溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

圖文演示通過OneProxy實現(xiàn)MySQL分庫分表

發(fā)布時間:2020-06-08 16:22:35 來源:網(wǎng)絡 閱讀:271 作者:三月 欄目:數(shù)據(jù)庫

不知道大家之前對類似通過OneProxy實現(xiàn)MySQL分庫分表的文章有無了解,今天我在這里給大家再簡單的講講。感興趣的話就一起來看看正文部分吧,相信看完通過OneProxy實現(xiàn)MySQL分庫分表你一定會有所收獲的。

OneProxy實現(xiàn)MySQL分庫分表

簡介

Part1:寫在最前

    隨著網(wǎng)站的壯大,MySQL數(shù)據(jù)庫架構一般會經(jīng)歷一個過程:

圖文演示通過OneProxy實現(xiàn)MySQL分庫分表

當我們數(shù)據(jù)量比較小的時候,一臺單實例數(shù)據(jù)庫足矣。等我們數(shù)據(jù)量增大的時候,我們會采用一主多從的數(shù)據(jù)庫架構來降低我們的讀寫io。當我們某張業(yè)務表達到幾百萬上千萬甚至上億時,就應該去進行分表處理。本文演示OneProxy對數(shù)據(jù)庫實現(xiàn)分表處理,對前端應用是透明的。


Part2:環(huán)境簡介

HE1:192.168.1.248 Master1

HE3:192.168.1.250 Master2

HE4:192.168.1.251 Oneproxy


環(huán)境構建

Part1:安裝Oneproxy

Oneproxy的安裝不是本文講述的重點,需要的可移步至

OneProxy實現(xiàn)MySQL讀寫分離與負載均衡

http://suifu.blog.51cto.com/9167728/1884673


Part2:proxy.cnf

proxy.cnf文件是oneproxy的主要參數(shù)配置文件,新版的oneproxy對整個目錄進行了重新的劃分,配置文件都放在了conf目錄里

[root@HE4 oneproxy]# cat conf/proxy.conf 
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.7.16
proxy-address = :3307
proxy-master-addresses.1 = 192.168.1.248:3306@group1
proxy-master-addresses.2 = 192.168.1.250:3306@group2
proxy-user-list = sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@test
proxy-part-tables.1 = /root/oneproxy/conf/part.txt
#proxy-part-tables.2 = /root/oneproxy/conf/part2.txt
proxy-charset = utf8_bin
proxy-group-policy.1 = group1:master-only
proxy-group-policy.2 = group2:master-only
proxy-secure-client = 192.168.1.248
proxy-sequence.1 = default
proxy-httpserver = :8080
proxy-httptitle = OneProxy Monitor


Part3:part.txt

part.txt文件是分區(qū)策略配置文件,在本博文中,采取hash分區(qū)來進行簡單演示

[root@HE4 oneproxy]# cat conf/part.txt 
[
  {
    "table" : "helei",
    "pkey" : "id",
    "type" : "int",
    "method" : "hash",
    "partitions" :     
      [
        { "suffix" : "_0", "group": "group1" },
        { "suffix" : "_1", "group": "group2" },
        { "suffix" : "_2", "group": "group1" },
        { "suffix" : "_3", "group": "group2"}
      ]
  }
]


實戰(zhàn)

Part1:啟動OneProxy

[root@HE4 oneproxy]# ./oneproxy.service start
Starting OneProxy ...                                      [  OK  ]


Part2:監(jiān)控頁面

我這里是兩臺Master

圖文演示通過OneProxy實現(xiàn)MySQL分庫分表


Part3:創(chuàng)建相關表

登錄oneproxy管理庫創(chuàng)建表

[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 test
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 103
Server version: 5.7.16 OneProxy-Community-5.8.5 (OneXSoft)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create table helei(
    -> id int(10) unsigned NOT NULL AUTO_INCREMENT,
    -> c1 int(10) NOT NULL DEFAULT '0',
    -> c2 int(10) unsigned DEFAULT NULL,
    -> c5 int(10) unsigned NOT NULL DEFAULT '0',
    -> c3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    -> c4 varchar(200) NOT NULL DEFAULT '',
    -> PRIMARY KEY(id),
    -> KEY idx_c1(c1),
    -> KEY idx_c2(c2)
    -> )ENGINE=InnoDB ;
Query OK, 0 rows affected (0.27 sec)
mysql> \q


Part4:插入數(shù)據(jù)

[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 test -e"insert into helei(id,c1,c2,c5,c4) values(1,1,1,1,'1')"
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 test -e"insert into helei(id,c1,c2,c5,c4) values(2,2,2,2,'2')"
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 test -e"insert into helei(id,c1,c2,c5,c4) values(3,3,3,3,'3')"
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 test -e"insert into helei(id,c1,c2,c5,c4) values(4,4,4,4,'4')"
mysql: [Warning] Using a password on the command line interface can be insecure.

校驗

Part1:校驗oneproxy表內容

這里可以看到虛擬表helei中已經(jīng)具有剛剛插入的內容;

[root@HE1 ~]# mysql -usys_admin -pMANAGER -h292.168.1.251 -P3307 test -e"select * from helei";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+----+------+----+---------------------+----+
| id | c1 | c2   | c5 | c3                  | c4 |
+----+----+------+----+---------------------+----+
|  4 |  4 |    4 |  4 | 2016-12-23 00:07:21 | 4  |
|  1 |  1 |    1 |  1 | 2016-12-23 16:07:04 | 1  |
|  2 |  2 |    2 |  2 | 2016-12-23 00:07:10 | 2  |
|  3 |  3 |    3 |  3 | 2016-12-23 16:07:16 | 3  |
+----+----+------+----+---------------------+----+


Part2:校驗Master1中的內容

[root@HE1 ~]# mysql -uroot -pMANAGER test
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 158
Server version: 5.7.16-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| checksums      |
| helei_0        |
| helei_2        |
| sbtest         |
+----------------+
4 rows in set (0.00 sec)
mysql> select * from helei_0;
+----+----+------+----+---------------------+----+
| id | c1 | c2   | c5 | c3                  | c4 |
+----+----+------+----+---------------------+----+
|  4 |  4 |    4 |  4 | 2016-12-23 00:07:21 | 4  |
+----+----+------+----+---------------------+----+
1 row in set (0.00 sec)
mysql> select * from helei_2;
+----+----+------+----+---------------------+----+
| id | c1 | c2   | c5 | c3                  | c4 |
+----+----+------+----+---------------------+----+
|  2 |  2 |    2 |  2 | 2016-12-23 00:07:10 | 2  |
+----+----+------+----+---------------------+----+
1 row in set (0.00 sec)


Part3:校驗Master2中的內容

[root@HE3 ~]# mysql -uroot -pMANAGER test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2997
Server version: 5.7.16-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| checksums      |
| helei_1        |
| helei_3        |
+----------------+
3 rows in set (0.00 sec)
mysql> select * from helei_1;
+----+----+------+----+---------------------+----+
| id | c1 | c2   | c5 | c3                  | c4 |
+----+----+------+----+---------------------+----+
|  1 |  1 |    1 |  1 | 2016-12-23 16:07:04 | 1  |
+----+----+------+----+---------------------+----+
1 row in set (0.00 sec)
mysql> select * from helei_3;
+----+----+------+----+---------------------+----+
| id | c1 | c2   | c5 | c3                  | c4 |
+----+----+------+----+---------------------+----+
|  3 |  3 |    3 |  3 | 2016-12-23 16:07:16 | 3  |
+----+----+------+----+---------------------+----+
1 row in set (0.00 sec)

注意

Warning:警告1

不支持預編譯語句 PreparedStatement,不支持Bind、Execute調用接口。


Warning:警告2

不支持使用use命令來切換后端數(shù)據(jù)庫,use命令可執(zhí)行,但其含義是切換到不同的MySQL主備集群,OneProxy在支持分庫分表功能后,就將一個主備集群視為一個數(shù)據(jù)庫了,鏈接Oneproxy時如果指定了數(shù)據(jù)庫名,則需替換成Server Group的名字


Warning:警告3

禁止使用set命令,任何set命令都會直接返回成功,而不做任何處理。


Warning:警告4

默認禁止CALL、PREPARE、EXECUTE、DEALLOCATE命令,不支持存儲過程和函數(shù)。


Warning:警告5

OneProxy支持master進行故障轉移切換,但建議采用流行的高可用方案MHA實現(xiàn)。故障切換后,OneProxy可以自動識別哪臺機器是master。另外,架構必須是一主帶N從,不能是雙主帶N從。

通過OneProxy實現(xiàn)MySQL分庫分表看完這篇文章,大家覺得怎么樣?如果想要了解更多相關,可以繼續(xù)關注我們的行業(yè)資訊板塊。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI