Mysql分庫分表記錄

    一、下載安裝mysql(在5.6上作的驗證);
java

        Linux上默認安裝目錄:/usr/share/mysql,安裝後能夠經過mysql -u root -p登陸mysql:mysql

    

    二、配置master
sql

        a) 將安裝後的mysql目錄下的my.cnf拷貝到Linux的配置環境/etc/目錄下。
數據庫

        b) 修改my.cnf配置:網絡

         server-id               = 1    #主機標示,整數ide

         log-bin                 = master-bin.log   #slave複製日誌文件測試

         log-bin-index       = master-bin.indexthis

         binlog-do-db         =db_test   #須要同步到slave的數據庫spa

         binlog-ignore-db    =mysql   #不須要同步的數據庫日誌

         #innodb_flush_log_at_trx_commit=1

         #sync_binlog=1

        配置完後重啓mysql後會在數據庫目錄/var/lib/mysql生成相應的日誌文件:

        

        c) 經過show master status語句查看master信息

        

            紅框中就是slave中須要複製的文件以及開始同步數據的起始位置。

        d)在master上建立用戶備份的用戶並賦值REPLICATION SLAVE權限,用於slave鏈接master

            GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.63.%' IDENTIFIED BY 'slave';

             --可用show grants for 'backup'@'192.168.63.%';查詢用戶具備的權限

    三、配置slave環境

        a) 同理經過修改從庫中的my.cnf配置:

            port=3307

            server-id = 3

            log-error=slave_log.err

            log-bin =slave_log.log

            report-host = 192.168.63.176  #master地址

            report-port = 3306   #master端口

            report-user = slave   #鏈接master用戶

            report-password = slave #鏈接master用戶密碼

            binlog-do-db =db_test

            replicate-do-db =db_test

            binlog-ignore-db=mysql

            binlog-ignore-db=test

            binlog-ignore-db=information_schema

            binlog-ignore-db=performance_schema

            replicate-ignore-db=test

            replicate-ignore-db=mysql

            replicate-ignore-db=information_schema

            replicate-ignore-db=performance_schema

        b) 查看slave的相關狀態

            經過配置slave鏈接master主機的report-host、user好像沒用,後面經過sql語句從新賦值鏈接到master的相關配           置(執行sql以前須要stop slave):

             change master to master_host='192.168.63.176',master_user='slave',

                -> master_password='slave',

                -> master_log_file='master_log.000006',

                -> master_log_pos=120;

        執行以上語句後會在mysql安裝目錄下生成master.info文件,文件中包含了鏈接到master的地址、用戶名、密碼、複製      文件以及複製的起始位置等。

        c) 查看slave的狀態

            經過show slave status查看slave鏈接狀態:

            

        備註:這次是經過Linux做爲master,本機上的msyql做爲slave測試的;剛開始配置是網絡有問題一直slave鏈接master      失敗,最後把防火牆關閉後就能連上了。能夠經過mysql -uslave -pslave -h192.168.63.176;語句測試可否鏈接到主服務        器上的數據庫

    四、測試

        a) 在master上建立分區表user,安裝userid作hash分區:

        b) 查看slave庫可見已同步了master中剛建立的user表

            


        五、擴展HA-MYSQL

            經過Keepalived構建高可用的mysql服務;配置mysql互爲主從,而後利用Keepalived監控功能,對掛掉的數據庫服           務動態切換。

 

   六、基於Spring的AbstractRoutingDataSource抽象類實現動態路由數據源(也能夠基於其餘第三方包實現ds的路由)

           
public class MultipleRoutingDataSource extends AbstractRoutingDataSource {
    /**
     * 寫數據庫服務
     */
    private Object writeDataSource;
    /**
     * 讀數據庫服務
     */
    private List<Object> readDataSources;
    private int counter = 0;
    public void setReadDataSources(List<Object> readDataSources) {
        this.readDataSources = readDataSources;
    }
    public void setWriteDataSource(Object writeDataSource) {
        super.setDefaultTargetDataSource(writeDataSource);
        this.writeDataSource = writeDataSource;
    }
    @Override
    protected Object determineCurrentLookupKey() {
        String routing = RoutingDataSourceUtil.getRouting();
        if(DSEnum.READ_ONLY.getCode().equals(routing)) {
            synchronized (this) {
                int index = counter % readDataSources.size();
                counter++;
                return readDataSources.get(index);
            }
        }
        return writeDataSource;
    }
}
相關文章
相關標籤/搜索