1. 程式人生 > >Linux資料庫管理——day10——分庫分表、資料庫硬體優化

Linux資料庫管理——day10——分庫分表、資料庫硬體優化

分庫分表     分庫分表也稱作分片技術,主要作用是將存放在一個數據庫中的資料按照特定的方法進行拆分,分散存放在多個數據庫中,以達到分散多臺裝置實現負載均衡

    垂直分割        縱向切分,把一個表的表結構拆分開來,形成多個表        實質上就是把一個表的表結構中的多個欄位拆成多個組合,每個組合都自成一個表

    水平分割        橫向切分,把一個表的表記錄切分成多個表        實質上吧一個表中的資料拆成多個模組,而表結構沒有變化。

Mycat    mycat是基於java的分散式資料庫系統,為高併發環境的分散式訪問提供解決方案

   工作流程       Mycat有很多演算法,每個演算法都有專屬的標識欄位,根據這些欄位,mycat可以找到資料具體儲存的位置。

   搭建mycat伺服器       1. 裝包         1.1 安裝jdk,也就是java相關的軟體包         1.2 安裝 mycat-server 服務軟體包       2. 配置

        修改配置檔案server.xml

        <user name="使用者名稱">
                <property name="password">密碼</property>
                <property name="schemas">邏輯庫名(使用者看到的庫名)</property>
                <property name="readOnly">true(只讀許可權設定,不寫這一行預設為讀寫許可權)</property>
        </user>

        配置檔案schema.xml

        <table name="travelrecord" dataNode="dn1,dn2(結點名,根據自己的資料庫個數決定)" rule="auto-sharding-long" />

        <!-- global table is auto cloned to all defined data nodes ,so can join 
            with any table whose sharding node is in the same data node -->
        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2(這兩行也是根據資料庫個數決定)" />
        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />

        <!-- 指定資料儲存節點的資料庫名,以及這個資料庫中儲存資料的庫名 -->
        <dataNode name="dn1(結點名)" dataHost="localhost1(資料庫名)" database="db1" />

        <!-- 給每個資料庫指定相應的資訊 -->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="資料庫伺服器IP:埠號(3306)" user="連線使用的使用者名稱"
                        password="密碼">
                        <!-- can have multi read hosts -->
                </writeHost>
        </dataHost>

      3. 對資料庫伺服器進行相關操作

sed -i '/lower_case_table_names/d' /etc/my.cnf
sed -i '/\[mysqld\]/alower_case_table_names = 1' /etc/my.cnf
systemctl restart mysqld

      4. 啟動服務

mycat start
netstat -ntlup | grep :8066 

   注意:      1. 客戶端連線的時候,發現有很多空表,這些都是要自己修改建立的      2. 不過建立的時候,需要根據資料庫的具體演算法進行,建立演算法要求的欄位(列)

系統優化    設定最大併發數

# 檢視設定的最大併發數:
show variables like 'max_connections';
# 修改最大併發數
set max_connections=值;
# 檢視歷史訪問最大併發數:
show global status like 'max_used_connections';

      設定的最優值:         max_connections = max_used_connections / 0.85          設定的最大併發值 = 歷史最大併發數 / 0.85       檢視連線的詳細資訊:

show processlist;
連線超時(單位秒)
connect_timeout 等待連線超時,當用戶在TCP三次握手連線的時候相應時間太久就會自動登出,一般時間不宜太高,預設10s
wait_timeout 等待關閉連線不活動超時,當從最後一次SQL語句操作開始計時,到下一個SQL語句間隔時間,過長久斷開,不過為了讓SQL語句能完整的執行完,不宜太短,預設8小時
快取控制(單位位元組)
key_buffer_size 用於MyISAM引擎的關鍵索引快取大小
show global status like 'key_read%'; 如果查出來的值較低的時候提高這個快取值
sort_buffer_size 為每個排序的執行緒分配此大小的快取空間
提高此值可以提高order的group的執行速度
read_buffer_size 為排序讀取表記錄保留的快取大小
影響SQL查詢的相應速度,此值越大查詢越快
tread_buffer_size 允許儲存在快取中的被重用的執行緒數量
show gloabal status like 'threads_%'; 檢視執行緒狀態,以這個值的常值為執行緒數最優
table_open_cache 為所有執行緒快取的開啟的表的數量
show global status like 'open%tables'; 檢視已經開啟的表,是理想比例<=95%
優化查詢快取設定
show variables like 'query_cache%';
query_cache_limit  快取最大儲存限制
query_cache_min_res_unit 快取最小儲存單元
query_cache_wlock_invalidate 是否開啟寫鎖,如果開啟,當資料修改,就會自動把快取中的資料刪除,下次使用者檢視的時候就是到磁碟中找
優化後作用表現(命中情況越高說明優化的越好)
show global status like 'qcache%';
Qcache_hits  查詢快取中的命中情況
Qcache_inserts 查詢請求總數