Mysql企業實戰

來源:互聯網
上載者:User

標籤:規則   mysq   技術   表結構   多個   個人   關鍵字   通訊   個數   

==========================業務垂直分割:
1》介紹說明:

    隨著公司的業務規模擴充,DBA需要根據企業資料業務進行切割,垂直切割又稱為縱向切割,垂直資料切割是根據企業網站業務、產品進行切分,比如:使用者數        據、部落格文章資料、照片資料、標籤資料類型、群組數等等,每個業務都獨立的分庫分表進行切割. 如果一個應用只針對單純的業務功能模組,那麼可以直接連接相應       的被垂直切分的資料庫,但是有些複雜的應用需要利用到相當多的業務資料,甚至牽扯到所有業務資料那麼垂直切割將給應用帶來一定的複雜度,而且對研發人員也會    有一定的影響,導致整個應用複雜度提升,那麼Amoeba在其中充當了門面功能,疏通應用於多個資料庫的通訊如果垂直切分功能:假如有有3個資料庫:userdb blogdb      otherdb

2》DB架構圖

          

                

================================業務水平分割 

1》介紹說明

      上次我們講到垂值切割。那麼如果垂值切割不能滿足企業需求怎麼辦??那麼我們對架構進行進一步最佳化,讓水平切割來解決這一問題,水平切割根User_ID範      圍值劃分,然後再進去模數 % 2 ,那麼最終得到的值只有0 和1定義到每台DB Server 上去。此範圍適合用於中小DB架構擴充,我們將在下一章將講到360度環形庫     的擴充,將用於大型DB架構設計;


  需求說明:
    總使用者數量500萬
    User_DB 儲存使用者基本資料<如、登入認證、個人資訊>
    Blog_DB 儲存使用者部落格文章
    Other_DB 儲存其它業務
    經過垂直分割將3個DB分割到不同的伺服器上面,然後進行水平切割將DB使用者量分割開來,
    User_DB1 承載250萬使用者的基本資料 User_ID範圍值<500萬 User_ID模數 % 2 取值0的讀此伺服器
    User_DB2 承載250萬使用者的基本資料 User_ID範圍值<500萬 User_ID模數 % 2 取值1的讀此伺服器

    Blog_DB1 承載250萬使用者的部落格文章 User_ID範圍值<500萬 User_ID模數 % 2 取值0的讀此伺服器
    Blog_DB2 承載250萬使用者的部落格文章 User_ID範圍值<500萬User_ID模數 % 2 取值1的讀此伺服器

    Other_DB1 承載250萬使用者的其它資訊 User_ID範圍值<500萬User_ID模數 % 2 取值0的讀此伺服器
    Other_DB2 承載250萬使用者的其它資訊 User_ID範圍值<500萬User_ID模數 % 2 取值1的讀此伺服器
    相當於2台機器針對500萬使用者。各承載了。2分之1,此範圍可以根據ID範圍值,無限擴充下去。

2》DB架構圖

          

3》環境案例實戰

   因為我們上面已經講過了讀寫分離,這個實戰案例主要講水平分割,通過Amoeba實現分割,判斷ID範圍值與模數
  1>Amoeba_Server(Linux) 10.0.0.203 實現水平切割
  2>User_DBA_Server1(Linux) 10.0.0.201 承載250萬使用者基本資料User_ID範圍值<500萬 User_ID模數 % 2 取值0的讀此伺服器
  3>User_DBA_Server2(Linux) 10.0.0.202 承載250萬使用者基本資料User_ID範圍值<500 User_ID模數 % 2 取值1的讀此伺服器
  相當於2台機器針對500萬用三戶。各承載了。2分之1,此範圍可以根據ID範圍值,無限擴充下去。注意這2台機器。並沒有做主             從,是單獨的兩台單機MYSQL

4》設定DB_server1 DB_server2 設定Amoeba遠端存取授權

  mysql-->grant all privileges on *.* to [email protected]‘%‘ identified by ‘123456‘;

  mysql-->flush privileges;

5》建立測試表

  在DB_server1 和DB_server2 上,兩邊的表結構以及表名是一樣的。注意。
  建立t_user表
  create table zyalvin (
    user_id integer unsigned not null,
    user_name varchar(45),
    user_address varchar(100),
    primary key (user_id)
      )engine=innodb;
  Query OK, 0 rows affected (0.01 sec      

6》配置Amoeba IP 與使用者

  vim /usr/local/amoeba/conf/amoeba.xml

         

7》配置Server1和Server2

  配置Server1:

           

           配置Server2

              

                   

8》配置水平分割規則

  # vim /usr/local/amoeba/conf/rule.xml
  tableRule name=”zyalvin,t_user”可以多個表,

         

          啟動服務
     #:nohup bash -x amoeba &   

9》插入測試資料

  在Amoeba Server登入:
  # mysql -uroot -p123456 -h 192.168.100.214 -P 9006
    mysql->use zytest;
   mysql->insert into zyalvin(user_id,user_name,user_address)values(‘1‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘2‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘3‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘4‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘5‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘6‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘7‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin user_id,user_name,user_address)values(‘8‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘9‘,‘user1‘,‘China‘);
   mysql->insert into zyalvin (user_id,user_name,user_address)values(‘10‘,‘user1‘,‘China‘);
   DB_server1查看,偶數全部寫入了server1

          

          DB_server2 查看,奇數全部寫入了server2

            

總結:
    (1)amoeba 是根據 sql 解析來進行水平切分的,需要把切分的關鍵字段(這裡是user_id),加入到insert sql語句中,否則切分規              則無效。無效後,會在 server1, server2 均都插入資料。
    (2)amoeba插入資料的時候必須先use dbname(比如要先use test庫名,或者查詢帶上庫名和表名,test.t_user) 否則插入資料會默         認插到server1上面
    (3)在rule.xml 指定的ID範圍,在插入資料user_id的時候,不能超過這個範圍,否則分區無效,比如定義的ID範圍為:1-500000號
    insert into zyalvin(user_id,user_name,user_address)values(‘5000001‘,‘user1‘,‘China‘);如果插入ID超過5000000,變成了                   5000001的話那麼這個資料將同時寫到server1和server2 導致分區無效。

開啟以.xml結尾的檔案出現亂碼時,用以下方法處理:

         

Mysql企業實戰

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.