老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

MyCat中怎么實現讀寫分離

這期內容當中小編將會給大家帶來有關MyCat中怎么實現讀寫分離,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

洛陽網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設等網站項目制作,到程序開發,運營維護。創新互聯于2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯

1、mycat實現讀寫分離

這里沒有用到MySQL03主機,讀寫分離的實現比較簡單,只需要修改mycat的下面兩個配置文件即可。如下:

1)修改server.xml文件
[root@mycat mycat]# pwd
/usr/local/mycat   
[root@mycat mycat]# vim conf/server.xml

[root@mycat mycat]# vim conf/server.xml    
          
                pwd@123   
                test_mycat    
                
        
2)修改schema.xml文件




        
        
            
                
        
                select user()
                
                                
                
                        
                                                
                        
                
        

注:上面提到的dataHost字段balance負載均衡類型,目前的取值有以下4 種:

  1. balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上(默認值)。

  2. balance="1",全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語句的負載均衡。

  3. balance="2",所有讀操作都隨機的在 writeHost、readhost 上分發。

  4. balance="3",所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,注意 balance=3 只在 1.4 及其以后版本有,1.3 沒有。

writeTyep字段有以下3中取值:

1、writeType="0", 所有寫操作發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個 writeHost,重新啟動后已切換后的為準,切換記錄在配置文件中:dnindex.properties 。
2、writeType="1",所有寫操作都隨機的發送到配置的 writeHost,1.5 以后廢棄不推薦。switchType 屬性

  • -1 表示不自動切換。

  • 1 默認值,自動切換。

  • 2 基于 MySQL 主從同步的狀態決定是否切換。

修改后的完整配置文件如下(為避免冗余,刪除了部分注釋):

server.xml配置文件內容如下:
[root@mycat mycat]# vim conf/server.xml 




        
        0  
        0  

                2
                0
                0

                1
                1m
                1k

                0
                384m

                true

        
        
                pwd@123
                test_mycat
        
schema.xml配置文件內容如下:
[root@mycat mycat]# vim conf/schema.xml





        
        
        
        
                select user()
                
                
                        
                        
                
        

注:至此,后端數據庫上自行創建有相關權限的用戶,比如我在上面的datahost字段中指定的writehost和readhost字段的user值為root,則數據庫的root賬號要有對應的登錄權限(默認root用戶只允許在localhost登錄,所以要自行修改root權限或換成其他有權限的用戶)。

總結:
1.指定的后端數據庫登錄用戶,必須可以有相應的權限;
2.在上面指定的后端真實數據庫為test,所以后端必須要有這個test庫;

3)啟動mycat并測試讀寫分離效果
[root@mycat mycat]# mycat start       #啟動mycat
[root@mycat mycat]# mysql -umycat -ppwd@123 -h 192.168.20.4 -P 8066   #登錄到mycat
#192.168.20.4為mycat主機IP,mycat監聽端口為8066,使用的登錄用戶為server.xml文件中創建的用戶
#創建表并插入一些測試數據
mysql> use test_mycat;
mysql> create table t1 (id int,name varchar(4));
mysql> insert into t1 values(1,'張三'),(2,'李四'),(3,'王五');
#此時,去后端數據庫上查看,應該是有上面這些數據的。
#現在可以暫時關閉后端數據庫的主從復制,然后再mycat主機上繼續插入數據,測試是否可以讀到
#關閉主從復制命令:stop slave;
#以下操作還是在mycat主機進行
mysql> insert into t1 values(4,'趙六');    #插入一條數據
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;      #查詢不到剛插入的數據,說明讀寫操作沒有在同一臺主機上進行
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
+------+--------+
#可以去后端兩個數據庫分別進行查看數據
#mysql01主機的數據如下(說明寫操作是在mysql01):
mysql> select * from t1;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
|    4 | 趙六   |
+------+--------+
4 rows in set (0.00 sec)
#mysql02主機的數據如下:
mysql> select * from t1(說明讀操作是在mysql02);
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
+------+--------+
3 rows in set (0.00 sec)

讀寫分離效果至此結束。(為不影響后面的測試進行,最好恢復mysql01和mysql02主機的主從復制)。

2、mycat實現分庫

一個數據庫由很多表組成,每個表對應著不同的業務,所謂分庫,就是按照業務將表進行分類,分不到不同的數據庫上面,這樣也就將數據或者說壓力分擔到不同的庫上面,分庫的原則:有緊密關聯關系的表應該在一個庫里,相互沒有或者關聯關系不大的表可以分到不同的庫里。

分庫舉例:

假設現在有四張表: customer, orders, orders_detail, dict_order_type,每張表都有數百萬條數據,那么這四張表如若要實現分庫,則可以將customer表單獨分離到一個數據庫,另外三張表單獨在另一個數據庫。

1)修改server.xml文件(就改了一下邏輯庫名)
[root@mycat mycat]# cat conf/server.xml 



    
    0  
    0  

        2
        0
        0

        1
        1m
        1k

        0
        384m

        true

    
    
        pwd@123
        test_db
    
2)修改schema.xml文件
[root@mycat mycat]# cat conf/schema.xml




    
           
    
    
    
    
        select user()
        
        
            
            
        
    
    
    
        select user()
        
        
        
    
3)重啟mycat
[root@mycat mycat]# mycat restart

注:后端指定的真實數據庫必須要有test數據庫,因為在上面schema.xml文件中的dataNode字段指定的是連接后端的test數據庫。

4)測試分庫效果
#登錄到mycat
[root@mycat mycat]# mysql -umycat -ppwd@123 -h 192.168.20.4 -P 8066
#創建相應的表
mysql> use test_db;
mysql> CREATE TABLE customer(
    -> id_a INT AUTO_INCREMENT,
    -> NAME VARCHAR(200),
    -> PRIMARY KEY(id_a)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE orders(
    -> id_b INT AUTO_INCREMENT,
    -> order_type INT,
    -> customer_id INT,
    -> amount DECIMAL(10,2),
    -> PRIMARY KEY(id_b)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE orders_detail(
    -> id_c INT AUTO_INCREMENT,
    -> detail VARCHAR(2000),
    -> order_id INT,
    -> PRIMARY KEY(id_c)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE dict_order_type(
    -> id_d INT AUTO_INCREMENT,
    -> order_type VARCHAR(200),
    -> PRIMARY KEY(id_d)
    -> );
Query OK, 0 rows affected (0.01 sec)

#登錄到后端數據庫上,查看表是否按照預計的效果拆分
[root@mycat mycat]# mysql -uroot -p123.com -h 192.168.20.2
mysql> use test;

mysql> show tables;             #可以看到主機mysql01這里有三個表
+-----------------+
| Tables_in_test  |
+-----------------+
| dict_order_type |
| orders          |
| orders_detail   |
+-----------------+
3 rows in set (0.00 sec)

#登錄到mysql03上查看
[root@mycat mycat]# mysql -uroot -p123.com -h 192.168.20.21
mysql> use test;

mysql> show tables;     #可以看到這里只有customer表
+----------------+
| Tables_in_test |
+----------------+
| customer       |
+----------------+
1 row in set (0.00 sec)

至此,已經實現了分庫,多個表放在了不同的庫中(在上面的栗子中,實現的是多個表放在了不同的主機上),但對于通過mycat登錄的客戶來說,還是一個庫,庫中有四張表。

3、mycat實現分表

這里對一個新表emp進行拆分。

1)schema.xml文件修改如下(完整配置文件)
[root@mycat mycat]# cat conf/schema.xml




    
        
        
        
    
    
    
    
        select user()
        
        
            
            
        
    
    
        select user()
        
        
        
    
2)rule.xml文件添加以下內容
[root@mycat mycat]# vim conf/rule.xml      #修改rule.xml文件
            
                
                        id    
                        mod_long  
                
        
                        ...................
                                                
        
                
                2    
        
3)重啟mycat并登錄到mycat
[root@mycat mycat]# mycat restart
4)登錄到mycat插入數據進行測試分表效果
[root@mycat mycat]# mysql -umycat -ppwd@123 -h 192.168.20.4 -P 8066
mysql> use test_db;
#創建emp表(后端兩個數據庫節點上都會有這張表)
mysql> create table emp (
    -> id int,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.41 sec)
#插入多條數據(對于這種分表,插入數據需要指定列名,否則會報錯)
mysql> insert into emp(id,name) values(1,'張三'),(2,'李四'),(3,'王五'),(4,'趙六');
#查詢新插入的數據
mysql> select * from emp;    
+------+--------+
| id   | name   |
+------+--------+
|    2 | 李四   |
|    4 | 趙六   |
|    1 | 張三   |
|    3 | 王五   |
+------+--------+
4 rows in set (0.04 sec)
mysql> select * from emp order by id;    #對結果進行排序
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
|    4 | 趙六   |
+------+--------+
4 rows in set (0.01 sec)

#后端mysql01主機查詢到該表的數據如下:
mysql> select * from emp;
+------+--------+
| id   | name   |
+------+--------+
|    2 | 李四   |
|    4 | 趙六   |
+------+--------+
2 rows in set (0.00 sec)
#mysql03主機查詢到的數據如下:
mysql> select * from emp;          
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    3 | 王五   |
+------+--------+
2 rows in set (0.00 sec)

可以看到數據是平均分散在不同節點上保存的。

但是經過分片的普通表,是無法直接和其他表進行join的。

要想解決多表join的問題,還需要修改schema.xml配置文件,在分表的table字段下添加childTable字段,具體怎么實現,還在研究中。但是可以將分表的類型設置為全局表,這是一種比較簡單的實現方式。

3、全局表

分表后,與其他表如何join就成了比較棘手的問題,我們可以選擇將分表設置為全局表,這是一個解決join的方法(但不是唯一的方法),但全局表有一定的局限性,如下:

  • 全局表變動不頻繁;

  • 數據量總體變化不大;

  • 數據規模不大,很少有超數十萬的記錄。

全局表有以下特性:

  • 全局表的插入、更新操作會實時在所有節點上執行,保持各個分片的數據一致性;

  • 全局表的查詢操作,只從一個節點獲??;

  • 全局表可以跟任何一個表進行 JOIN 操作。

若想創建全局表,只需在table字段增加type="global"即可。如下:

1)定義全局表
[root@mycat conf]# cat schema.xml




    
        
        
        
        
    
    
    
    
        select user()
        
        
            
            
        
    
    
        select user()
        
        
        
    
2)驗證全局表
mysql> drop table emp;    #需要刪除之前創建的emp表
Query OK, 0 rows affected (0.03 sec)
#重新創建emp表
mysql> create table emp(
    -> id int,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.38 sec)
#插入數據測試
mysql>  insert into emp(id,name) values(1,'張三'),(2,'李四'),(3,'王五'),(4,'趙六');
#在mycat上查詢插入的數據如下:
mysql> select * from emp;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
|    4 | 趙六   |
+------+--------+
4 rows in set (0.02 sec)
#在后端主機上分別查看emp表中的數據:
#mysql01主機上數據如下:
mysql> select * from emp;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
|    4 | 趙六   |
+------+--------+
4 rows in set (0.00 sec)
#mysql03主機上數據如下:
mysql> select * from emp;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王五   |
|    4 | 趙六   |
+------+--------+
4 rows in set (0.00 sec)

上述就是小編為大家分享的MyCat中怎么實現讀寫分離了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。


本文名稱:MyCat中怎么實現讀寫分離
URL地址:http://www.xueling.net.cn/article/pdshid.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 我要色综合网 | 日韩久久精品网 | 中文字幕一区二区在线观看 | 中文字幕在线不卡 | 亚洲日产av中文字幕 | 少妇福利 | 久久久久久久久久久久福利 | 国产综合欧美无毒不卡怡红院 | 日本一级囗交免费 | 99久久精品免费看国产高清 | 欧美日韩在线视频免费观看 | 国产乱子夫妻XX黑人XYX真爽 | 国产人澡人澡澡澡人碰视频 | jj男色网 | 97人妻人人澡人人爽国产一 | 国产精品美女自拍视频 | 最新国产一区最新在线 | 亚洲国产影院 | 日韩人妻无码精品一专区二区三区 | 国产黄色91视频 | 九一传媒在线观看 | 黄色一区二区三区四区 | 亚洲最大AV资源网在线观看 | 中文高清少妇免费 | 亚洲中国女厕嘘嘘40 | 九九热在线精品 | 天天操天天骑 | 99久久精品免费看国产高清 | 人人玩人人添人人澡东莞 | 这里只有精品在线播放 | 久久97超碰 | 色婷婷av一区二区三区久久 | 欧美成人精品在线观看 | 国产激情毛片 | 国产1区二区 | 桃色一区二区三区 | 日日婷婷夜日日天干A片 | 麻豆av网站 | 国产亚洲AV无码专区A∨麻豆 | 圆产精品久久久久久久久久久 | av网址在线免费观看 |