MYSQL數(shù)據(jù)庫(kù)集群方案-PXC

一、安裝Percona數(shù)據(jù)庫(kù)

1. 離線安裝Percona

  • 進(jìn)入RPM安裝文件目錄,執(zhí)行下面的腳本

    yum localinstall *.rpm
    
  • 管理MySQL服務(wù)

    systemctl start mysqld
    systemctl stop mysqld
    systemctl restart mysqld
    

2. 在線安裝Percona

  • 使用yum命令安裝

    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
    yum  install  Percona-Server-server-57
    
  • 管理MySQL服務(wù)

    service mysql start
    service mysql stop
    service mysql restart
    

3. 開放防火墻端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

4. 修改MySQL配置文件

vi /etc/my.cnf
[mysqld]
character_set_server = utf8
bind-address = 0.0.0.0
#跳過DNS解析
skip-name-resolve
service mysql restart 

5. 禁止開機(jī)啟動(dòng)MySQL

chkconfig mysqld off

6. 初始化MySQL數(shù)據(jù)庫(kù)

  • 查看MySQL初始密碼

    cat /var/log/mysqld.log | grep "A temporary password"
    
  • 修改MySQL密碼

    mysql_secure_installation
    
  • 創(chuàng)建遠(yuǎn)程管理員賬戶

    mysql -u root -p
    
    CREATE USER 'admin'@'%' IDENTIFIED BY 'Abc_123456';
    GRANT all privileges ON *.* TO 'admin'@'%';
    FLUSH PRIVILEGES;
    

二、創(chuàng)建PXC集群

1. 刪除MariaDB程序包

yum -y remove mari*

2. 開放防火墻端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent

3. 關(guān)閉SELINUX

vi /etc/selinux/config

把SELINUX屬性值設(shè)置成disabled

reboot

4. 離線安裝PXC

  • 進(jìn)入RPM文件目錄,執(zhí)行安裝命令

    yum localinstall *.rpm
    
  • 參考第一章內(nèi)容,修改MySQL配置文件、創(chuàng)建賬戶等操作

5. 創(chuàng)建PXC集群

  • 停止MySQL服務(wù)

  • 修改每個(gè)PXC節(jié)點(diǎn)的/etc/my.cnf文件(在不同節(jié)點(diǎn)上,注意調(diào)整文件內(nèi)容)

    server-id=1  #PXC集群中MySQL實(shí)例的唯一ID,不能重復(fù),必須是數(shù)字
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster  #PXC集群的名稱
    wsrep_cluster_address=gcomm://192.168.99.151,192.168.99.159,192.168.99.215
    wsrep_node_name=pxc1  #當(dāng)前節(jié)點(diǎn)的名稱
    wsrep_node_address=192.168.99.151  #當(dāng)前節(jié)點(diǎn)的IP
    wsrep_sst_method=xtrabackup-v2  #同步方法(mysqldump、rsync、xtrabackup)
    wsrep_sst_auth= admin:Abc_123456  #同步使用的帳戶
    pxc_strict_mode=ENFORCING  #同步嚴(yán)厲模式
    binlog_format=ROW  #基于ROW復(fù)制(安全可靠)
    default_storage_engine=InnoDB  #默認(rèn)引擎
    innodb_autoinc_lock_mode=2  #主鍵自增長(zhǎng)不鎖表
    
  • 主節(jié)點(diǎn)的管理命令(第一個(gè)啟動(dòng)的PXC節(jié)點(diǎn))

    systemctl start mysql@bootstrap.service
    systemctl stop mysql@bootstrap.service
    systemctl restart mysql@bootstrap.service
    
  • 非主節(jié)點(diǎn)的管理命令(非第一個(gè)啟動(dòng)的PXC節(jié)點(diǎn))

    service start mysql
    service stop mysql
    service restart mysql
    
  • 查看PXC集群狀態(tài)信息

    show status like 'wsrep_cluster%' ;
    
  • 按照上述配置方法,創(chuàng)建兩組PXC集群

6. PXC節(jié)點(diǎn)啟動(dòng)與關(guān)閉

  • 如果最后關(guān)閉的PXC節(jié)點(diǎn)是安全退出的,那么下次啟動(dòng)要最先啟動(dòng)這個(gè)節(jié)點(diǎn),而且要以主節(jié)點(diǎn)啟動(dòng)
  • 如果最后關(guān)閉的PXC節(jié)點(diǎn)不是安全退出的,那么要先修改/var/lib/mysql/grastate.dat 文件,把其中的safe_to_bootstrap屬性值設(shè)置為1,再安裝主節(jié)點(diǎn)啟動(dòng)

三、安裝MyCat

1. JDK安裝與配置

  • 安裝JDK

    #搜索JDK版本
    yum search jdk 
    #安裝JDK1.8開發(fā)版
    yum install java-1.8.0-openjdk-devel.x86_64
    
  • 配置環(huán)境變量

    #查看JDK安裝路徑
    ls -lrt /etc/alternatives/java
    vi /etc/profile
    #在文件結(jié)尾加上JDK路徑,例如export  JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/
    source  /etc/profile 
    

2. 創(chuàng)建數(shù)據(jù)表

  • 在兩組PXC集群中分別創(chuàng)建t_user數(shù)據(jù)表

    CREATE TABLE t_user(
      id INT UNSIGNED PRIMARY KEY,
        username VARCHAR(200) NOT NULL,
        password VARCHAR(2000) NOT NULL,
        tel CHAR(11) NOT NULL,
        locked TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
        INDEX idx_username(username) USING BTREE,
        UNIQUE INDEX unq_username(username) USING BTREE
    );
    

3. MyCat安裝與配置

  1. 下載MyCat

    http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

  2. 上傳MyCat壓縮包到虛擬機(jī)

  3. 安裝unzip程序包,解壓縮MyCat

    yum install unzip
    unzip MyCAT壓縮包名稱
    
  4. 開放防火墻8066和9066端口,關(guān)閉SELINUX

  5. 修改MyCat的bin目錄中所有.sh文件的權(quán)限

    chmod -R 777 ./*.sh
    
  6. MyCat啟動(dòng)與關(guān)閉

    #cd MyCat的bin目錄
    ./startup_nowrap.sh #啟動(dòng)MyCat
    ps -aux #查看系統(tǒng)進(jìn)程
    kill -9 MyCat進(jìn)程編號(hào)
    
  7. 修改server.xml文件,設(shè)置MyCat帳戶和虛擬邏輯庫(kù)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mycat:server SYSTEM "server.dtd">
    <mycat:server xmlns:mycat="http://io.mycat/">
         <system>
             <property name="nonePasswordLogin">0</property>
             <property name="useHandshakeV10">1</property>
             <property name="useSqlStat">0</property>
             <property name="useGlobleTableCheck">0</property>
             <property name="sequnceHandlerType">2</property>
             <property name="subqueryRelationshipCheck">false</property>
             <property name="processorBufferPoolType">0</property>
             <property name="handleDistributedTransactions">0</property>
             <property name="useOffHeapForMerge">1</property>
             <property name="memoryPageSize">64k</property>
             <property name="spillsFileBufferSize">1k</property>
             <property name="useStreamOutput">0</property>
             <property name="systemReserveMemorySize">384m</property>
             <property name="useZKSwitch">false</property>
         </system>
        <!--這里是設(shè)置的admin用戶和虛擬邏輯庫(kù)-->
         <user name="admin" defaultAccount="true">
             <property name="password">Abc_123456</property>
             <property name="schemas">test</property>
         </user>
    </mycat:server>
    
  1. 修改schema.xml文件,設(shè)置數(shù)據(jù)庫(kù)連接和虛擬數(shù)據(jù)表

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
         <!--配置數(shù)據(jù)表-->
         <schema name="test" checkSQLschema="false" sqlMaxLimit="100">
             <table name="t_user" dataNode="dn1,dn2" rule="mod-long" />
         </schema>
         <!--配置分片關(guān)系-->
         <dataNode name="dn1" dataHost="cluster1" database="test" />
         <dataNode name="dn2" dataHost="cluster2" database="test" />
         <!--配置連接信息-->
         <dataHost name="cluster1" maxCon="1000" minCon="10" balance="2" 
                    writeType="1" dbType="mysql" dbDriver="native" switchType="1"  
                    slaveThreshold="100">
             <heartbeat>select user()</heartbeat>
             <writeHost host="W1" url="192.168.99.151:3306" user="admin" 
                         password="Abc_123456">
                 <readHost host="W1R1" url="192.168.99.159:3306" user="admin" 
                            password="Abc_123456" />
                 <readHost host="W1R2" url="192.168.99.215:3306" user="admin" 
                            password="Abc_123456" />
             </writeHost>
             <writeHost host="W2" url="192.168.99.159:3306" user="admin" 
                         password="Abc_123456">
                 <readHost host="W2R1" url="192.168.99.151:3306" user="admin" 
                            password="Abc_123456" />
                 <readHost host="W2R2" url="192.168.99.215:3306" user="admin" 
                            password="Abc_123456" />
             </writeHost>
         </dataHost>
         <dataHost name="cluster2" maxCon="1000" minCon="10" balance="2" 
                    writeType="1" dbType="mysql" dbDriver="native" switchType="1"  
                    slaveThreshold="100">
             <heartbeat>select user()</heartbeat>
             <writeHost host="W1" url="192.168.99.121:3306" user="admin"
                        password="Abc_123456">
                 <readHost host="W1R1" url="192.168.99.122:3306" user="admin" 
                            password="Abc_123456" />
                 <readHost host="W1R2" url="192.168.99.123:3306" user="admin" 
                            password="Abc_123456" />
             </writeHost>
             <writeHost host="W2" url="192.168.99.122:3306" user="admin"
                        password="Abc_123456">
                 <readHost host="W2R1" url="192.168.99.121:3306" user="admin" 
                            password="Abc_123456" />
                 <readHost host="W2R2" url="192.168.99.123:3306" user="admin" 
                            password="Abc_123456" />
             </writeHost>
         </dataHost>
    </mycat:schema>
    
  2. 修改rule.xml文件,把mod-long的count值修改成2

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
     <property name="count">2</property>
    </function>
    
  3. 重啟MyCat

  4. 向t_user表寫入數(shù)據(jù),感受數(shù)據(jù)的切分

    USE test;
    #第一條記錄被切分到第二個(gè)分片
    INSERT INTO t_user(id,username,password,tel,locked) VALUES(1,"A",HEX(AES_ENCRYPT('123456','HelloWorld')));
    #第二條記錄被切分到第一個(gè)分片
    INSERT INTO t_user(id,username,password,tel,locked) VALUES(2,"B",HEX(AES_ENCRYPT('123456','HelloWorld')));
    

4. 配置父子表

  1. 在conf目錄下創(chuàng)建customer-hash-int文件,內(nèi)容如下:

    101=0
    102=0
    103=0
    104=1
    105=1
    106=1
    
  2. 在rule.xml文件中加入自定義<function>和<tableRule>

    <function name="customer-hash-int"
         class="io.mycat.route.function.PartitionByFileMap">
     <property name="mapFile">customer-hash-int.txt</property>
    </function>
    
    <tableRule name="sharding-customer">
     <rule>
         <columns>sharding_id</columns>
         <algorithm>customer-hash-int</algorithm>
     </rule>
    </tableRule>
    
  3. 修改schema.xml文件,添加父子表定義

    <table name="t_customer" dataNode="dn1,dn2" rule="sharding-customer">
     <childTable name="t_orders" primaryKey="ID" joinKey="customer_id"   
                    parentKey="id"/>
    </table>
    
  4. 在MyCat上執(zhí)行如下SQL:

    USE test;
    CREATE TABLE t_customer(
     id INT UNSIGNED PRIMARY KEY,
        username VARCHAR(200) NOT NULL,
        sharding_id INT NOT NULL
    );
    CREATE TABLE t_orders(
     id INT UNSIGNED PRIMARY KEY,
        customer_id INT NOT NULL,
        datetime TIMESTAMP DEFAULT CURRENT_TIMSTAMP
    );
    
  5. 向t_customer表和t_orders表寫入數(shù)據(jù),查看字表數(shù)據(jù)跟隨父表切分到同一個(gè)分片

5. 創(chuàng)建雙機(jī)熱備的MyCat集群

  1. 用兩個(gè)虛擬機(jī)實(shí)例,各自部署MyCat

  2. 用一個(gè)虛擬機(jī)實(shí)例部署Haproxy

    • 安裝Haproxy

      yum install -y haproxy
      
    • 編輯配置文件

      vi /etc/haproxy/haproxy.cfg
      
      global
          log         127.0.0.1 local2
          chroot      /var/lib/haproxy
          pidfile     /var/run/haproxy.pid
          maxconn     4000
          user        haproxy
          group       haproxy
          daemon
          # turn on stats unix socket
          stats socket /var/lib/haproxy/stats
      
      defaults
          mode                    http
          log                     global
          option                  httplog
          option                  dontlognull
          option http-server-close
          option forwardfor       except 127.0.0.0/8
          option                  redispatch
          retries                 3
          timeout http-request    10s
          timeout queue           1m
          timeout connect         10s
          timeout client          1m
          timeout server          1m
          timeout http-keep-alive 10s
          timeout check           10s
          maxconn                 3000
      
      listen   admin_stats  
          bind    0.0.0.0:4001
          mode  http
          stats uri       /dbs
          stats realm  Global\ statistics
          stats auth    admin:abc123456
      listen   proxy-mysql
          bind    0.0.0.0:3306  
          mode  tcp 
          balance  roundrobin
          option  tcplog       #日志格式
          server   mycat_1  192.168.99.131:3306  check  port  8066  maxconn  2000  
          server   mycat_2  192.168.99.132:3306  check  port  8066  maxconn  2000  
          option  tcpka        #使用keepalive檢測(cè)死鏈
      
    • 啟動(dòng)Haproxy

      service haproxy start
      
    • 訪問Haproxy監(jiān)控畫面

      http://192.168.99.131:4001/dbs

  3. 用另外一個(gè)虛擬機(jī)同樣按照上述操作安裝Haproxy

  4. 在某個(gè)Haproxy虛擬機(jī)實(shí)例上部署Keepalived

    • 開啟防火墻的VRRP協(xié)議

      #開啟VRRP
      firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol  vrrp -j ACCEPT
      #應(yīng)用設(shè)置
      firewall-cmd --reload
      
    • 安裝Keepalived

      yum install -y keepalived
      
    • 編輯配置文件

      vim /etc/keepalived/keepalived.conf
      
      vrrp_instance  VI_1 {
          state  MASTER
          interface  ens33
          virtual_router_id  51
          priority  100
          advert_int  1
          authentication {
              auth_type  PASS
              auth_pass  123456
          }
          virtual_ipaddress {
              192.168.99.133
          }
      }
      
    • 啟動(dòng)Keepalived

      service keepalived start
      
    • ping 192.168.99.133

  5. 在另外一個(gè)Haproxy虛擬機(jī)上,按照上述方法部署Keepalived

  6. 使用MySQL客戶端連接192.168.99.133,執(zhí)行增刪改查數(shù)據(jù)

四、Sysbench基準(zhǔn)測(cè)試

1. 安裝Sysbench

  • 在線安裝

    curl -s https://packagecloud.io/install/
    repositories/akopytov/sysbench/script.rpm.sh | sudo bash 
    
    yum -y install sysbench
    
  • 本地安裝

2. 執(zhí)行測(cè)試

  • 準(zhǔn)備測(cè)試庫(kù)

    sysbench  /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.99.131 --mysql-port=3306 --mysql-user=admin --mysql-password=Abc_123456 --oltp-tables-count=10 --oltp-table-size=100000 prepare
    
  • 執(zhí)行測(cè)試

    sysbench  /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.99.131 --mysql-port=3306 --mysql-user=admin --mysql-password=Abc_123456 --oltp-test-mode=complex --threads=10 --time=300 --report-interval=10 run >> /home/mysysbench.log
    
  • 清理數(shù)據(jù)

    sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.99.131 --mysql-port=3306 --mysql-user=admin --mysql-password=Abc_123456 --oltp-tables-count=10 cleanup
    

五、tpcc-mysql 壓力測(cè)試

1. 準(zhǔn)備工作

  • 修改my.cnf配置文件

    vi /etc/my.cnf
    

    pxc_strict_mode=DISABLED

  • 修改某個(gè)Haproxy的配置文件

    server   mysql_1  192.168.99.151:3306  check  port  3306  weight  1  maxconn  2000
    server   mysql_2  192.168.99.159:3306  check  port  3306  weight  1  maxconn  2000
    server   mysql_3  192.168.99.215:3306  check  port  3306  weight  1  maxconn  2000
    
  • 重新啟動(dòng)Haproxy

  • 安裝依賴程序包

    yum install -y gcc
    yum install -y mysql-devel
    

2. 安裝tpcc-mysql

  • 下載壓縮包

    https://codeload.github.com/Percona-Lab/tpcc-mysql/zip/master

  • 執(zhí)行安裝

    #cd tpcc的src目錄
    make
    
  • 執(zhí)行create_table.sqladd_fkey_idx.sql兩個(gè)文件

  • 執(zhí)行數(shù)據(jù)初始化

    ./tpcc_load -h 192.168.99.131 -d tpcc -u admin -p Abc_123456 -w
    
  • 執(zhí)行壓力測(cè)試

    ./tpcc_start -h 192.168.99.131 -d tpcc -u admin -p Abc_123456 -w 1 -c 5 -r 300 -l 600 ->tpcc-output-log
    

六、導(dǎo)入數(shù)據(jù)

1. 生成1000萬(wàn)條數(shù)據(jù)

import java.io.FileWriter
import java.io.BufferedWriter

class Test {
    def static void main(String[] args) {
        var writer=new FileWriter("D:/data.txt")
        var buff=new BufferedWriter(writer)
        for(i:1..10000000){
            buff.write(i+",測(cè)試數(shù)據(jù)\n")
        }
        buff.close
        writer.close
    }
}

2. 執(zhí)行文件切分

  • 上傳data.txt文件到linux

  • 執(zhí)行文件切分

    split -l 1000000 -d data.txt
    

3. 準(zhǔn)備數(shù)據(jù)庫(kù)

  • 每個(gè)PXC分片只開啟一個(gè)節(jié)點(diǎn)

  • 修改PXC節(jié)點(diǎn)文件,然后重啟PXC服務(wù)

    innodb_flush_log_at_trx_commit = 0
    innodb_flush_method = O_DIRECT
    innodb_buffer_pool_size = 200M
    
  • 創(chuàng)建t_test數(shù)據(jù)表

    CREATE TABLE t_test(
      id INT UNSIGNED PRIMARY KEY,
        name VARCHAR(200) NOT NULL
    );
    
  • 配置MyCat

    <table name="t_test" dataNode="dn1,dn2" rule="mod-long" />
    
    <dataHost name="cluster1" maxCon="1000" minCon="10" balance="0" writeType="1" 
              dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
      <heartbeat>select user()</heartbeat>
      <writeHost host="W1" url="192.168.99.151:3306" user="admin" 
                   password="Abc_123456"/>
    </dataHost>
    <dataHost name="cluster2" maxCon="1000" minCon="10" balance="0" writeType="1" 
              dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
      <heartbeat>select user()</heartbeat>
      <writeHost host="W1" url="192.168.99.121:3306" user="admin" 
                   password="Abc_123456"/>
    </dataHost>
    

4. 執(zhí)行Java程序,多線程導(dǎo)入數(shù)據(jù)

import org.eclipse.xtend.lib.annotations.Accessors
import java.io.File
import java.sql.DriverManager

class Task implements Runnable{
    @Accessors
    File file;
    
    override run() {
        var url="jdbc:mysql://192.168.99.131:8066/test"
        var username="admin"
        var password="Abc_123456"
        var con=DriverManager.getConnection(url,username,password)
        var sql='''
            load data local intfile '/home/data/?file.name?' ignore into table t_test 
            character set 'utf8' 
            fields terminated by ',' optionally enclosed by '\"' 
            lines terminated by '\n' (id,name);
        '''
        var pst=con.prepareStatement(sql);
        pst.execute
        con.close
        LoadData.updateNum();
    }
}
import com.mysql.jdbc.Driver
import java.sql.DriverManager
import java.util.concurrent.LinkedBlockingQueue
import java.util.concurrent.ThreadPoolExecutor
import java.util.concurrent.TimeUnit
import java.io.File

class LoadData {
    var static int num=0;
    var static int end=0;
    var static pool=new ThreadPoolExecutor(1,5,60,TimeUnit.SECONDS,new LinkedBlockingQueue(200))
    def static void main(String[] args) {
        DriverManager.registerDriver(new Driver)
        var folder=new File("/home/data")
        var files=folder.listFiles
        end=files.length //線程池結(jié)束條件
        files.forEach[one|
            var task=new Task();
            task.file=one;
            pool.execute(task)
        ]
    }
    synchronized def static updateNum(){
        num++;
        if(num==end){
            pool.shutdown();
            println("執(zhí)行結(jié)束")
        }
    }
}

七、大數(shù)據(jù)歸檔

1. 安裝TokuDB

  • 安裝jemlloc

    yum install -y jemalloc 
    
  • 編輯配置文件

    vi /etc/my.cnf
    
    ……
    [mysqld_safe]
    malloc-lib=/usr/lib64/libjemalloc.so.1
    ……
    
  • 重啟MySQL

  • 開啟Linux大頁(yè)內(nèi)存

    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    
  • 安裝TokuDB

    yum install -y Percona-Server-tokudb-57.x86_64
    ps-admin --enable -uroot -p
    service mysql restart
    ps-admin --enable -uroot -p
    
  • 查看安裝結(jié)果

    show engines ;
    

2. 配置Replication集群

  • 在兩個(gè)TokuDB數(shù)據(jù)庫(kù)上創(chuàng)建用戶

    CREATE USER 'backup'@'%' IDENTIFIED BY 'Abc_123456' ;
    
    GRANT super, reload, replication slave ON *.* TO 'backup'@'%' ;
    
    FLUSH  PRIVILEGES ;
    
  • 修改兩個(gè)TokuDB的配置文件,如下:

    [mysqld]
    server_id = 101
    log_bin = mysql_bin
    relay_log = relay_bin
    ……
    
    [mysqld]
    server_id = 102
    log_bin = mysql_bin
    relay_log = relay_bin
    
  • 重新啟動(dòng)兩個(gè)TokuDB節(jié)點(diǎn)

  • 分別在兩個(gè)TokuDB上執(zhí)行下面4句SQL

    #關(guān)閉同步服務(wù)
    stop slave;
    #設(shè)置同步的Master節(jié)點(diǎn)
    change master to master_host="192.168.99.155",master_port=3306,master_user="backup",
    master_password="Abc_123456";
    #啟動(dòng)同步服務(wù)
    start slave;
    #查看同步狀態(tài)
    show slave status;
    
    #關(guān)閉同步服務(wù)
    stop slave;
    #設(shè)置同步的Master節(jié)點(diǎn)
    change master to master_host="192.168.99.102",master_port=3306,master_user="backup",
    master_password="Abc_123456";
    #啟動(dòng)同步服務(wù)
    start slave;
    #查看同步狀態(tài)
    show slave status;
    

3. 創(chuàng)建歸檔表

CREATE TABLE t_purchase (
    id INT UNSIGNED PRIMARY KEY,
    purchase_price DECIMAL(10,2) NOT NULL,
    purchase_num INT UNSIGNED NOT NULL,
    purchase_sum DECIMAL (10,2) NOT NULL,
    purchase_buyer INT UNSIGNED NOT NULL,
    purchase_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    company_id INT UNSIGNED NOT NULL,
    goods_id INT UNSIGNED NOT NULL,
    KEY idx_company_id(company_id),
    KEY idx_goods_id(goods_id)
)engine=TokuDB;

4. 配置Haproxy+Keepalived雙機(jī)熱備

  • 在兩個(gè)節(jié)點(diǎn)上安裝Haproxy

    yum install -y haproxy
    
  • 修改配置文件

    vi /etc/haproxy/haproxy.cfg
    
    global
        log         127.0.0.1 local2
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000
        user        haproxy
        group       haproxy
        daemon
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
    
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    
    listen   admin_stats  
        bind    0.0.0.0:4001
        mode  http
        stats uri       /dbs
        stats realm  Global\ statistics
        stats auth    admin:abc123456
    listen   proxy-mysql
        bind    0.0.0.0:4002  
        mode  tcp 
        balance  roundrobin
        option  tcplog       #日志格式
        server   backup_1  192.168.99.102:3306  check  port  3306  maxconn  2000  
        server   backup_2  192.168.99.155:3306  check  port  3306  maxconn  2000  
        option  tcpka        #使用keepalive檢測(cè)死鏈
    
  • 重啟Haproxy

  • 開啟防火墻的VRRP協(xié)議

    firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT
    
    firewall-cmd --reload
    
  • 在兩個(gè)節(jié)點(diǎn)上安裝Keepalived

    yum install -y keepalived
    
  • 編輯Keepalived配置文件

    vim /etc/keepalived/keepalived.conf
    
    vrrp_instance  VI_1 {
        state  MASTER
        interface  ens33
        virtual_router_id  51
        priority  100
        advert_int  1
        authentication {
            auth_type  PASS
            auth_pass  123456
        }
        virtual_ipaddress {
            192.168.99.211
        }
    }
    
  • 重啟Keepalived

5. 準(zhǔn)備歸檔數(shù)據(jù)

  • 在兩個(gè)PXC分片上創(chuàng)建進(jìn)貨表

    CREATE TABLE t_purchase (
      id INT UNSIGNED PRIMARY KEY,
      purchase_price DECIMAL(10,2) NOT NULL,
      purchase_num INT UNSIGNED NOT NULL,
      purchase_sum DECIMAL (10,2) NOT NULL,
      purchase_buyer INT UNSIGNED NOT NULL,
      purchase_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      company_id INT UNSIGNED NOT NULL,
      goods_id INT UNSIGNED NOT NULL,
      KEY idx_company_id(company_id),
      KEY idx_goods_id(goods_id)
    )
    
  • 配置MyCat的schema.xml文件,并重啟MyCat

    <table name="t_purchase" dataNode="dn1,dn2" rule="mod-long" />
    

6. 執(zhí)行數(shù)據(jù)歸檔

  • 安裝pt-archiver

    yum install percona-toolkit
    pt-archiver --version
    pt-archiver --help
    
  • 執(zhí)行數(shù)據(jù)歸檔

    pt-archiver --source h=192.168.99.102,P=8066,u=admin,p=Abc_123456,D=test,t=t_purchase --dest h=192.168.99.102,P=3306,u=admin,p=Abc_123456,D=test,t=t_purchase --no-check-charset --where 'purchase_date<"2018-09"' --progress 5000 --bulk-delete --bulk-insert --limit=10000 --statistics
    

本篇文章由一文多發(fā)平臺(tái)ArtiPub自動(dòng)發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容