您好,登錄后才能下訂單哦!
業(yè)務(wù)不斷地在增長(zhǎng),集群分片中的數(shù)據(jù)也會(huì)隨著時(shí)間的推移而增加,其中有相當(dāng)一部分的數(shù)據(jù)是很少被使用的,例如幾年前的訂單記錄、交易記錄、商品評(píng)論等數(shù)據(jù)。這部分?jǐn)?shù)據(jù)就稱之為冷數(shù)據(jù),與之相反經(jīng)常被使用的數(shù)據(jù)則稱之為熱數(shù)據(jù)。
我們都知道當(dāng)MySQL的單表數(shù)據(jù)量超過兩千萬時(shí),讀寫性能就會(huì)急劇下降。如果其中存儲(chǔ)的大部分都是高價(jià)值的熱數(shù)據(jù)還好說,可以花費(fèi)資金去擴(kuò)展集群分片,因?yàn)檫@些數(shù)據(jù)可以帶來收益。但如果是低價(jià)值的冷數(shù)據(jù),就沒必要去花這個(gè)錢了。
所以我們要將冷數(shù)據(jù)從集群分片中剝離出來,存儲(chǔ)至專門的歸檔數(shù)據(jù)庫中,以騰出存儲(chǔ)空間、減輕集群分片的存儲(chǔ)壓力。讓集群分片盡量只存儲(chǔ)熱數(shù)據(jù),維持一個(gè)較好的讀寫性能,而不必浪費(fèi)存儲(chǔ)空間在冷數(shù)據(jù)上:
在歸檔數(shù)據(jù)庫上不適合使用InnoDB引擎,因?yàn)镮nnoDB的瞬時(shí)寫入性能不高。通常會(huì)采用Percona出品的TokuDB作為歸檔數(shù)據(jù)庫的存儲(chǔ)引擎。因?yàn)樵撘婢哂腥缦绿攸c(diǎn):
上一小節(jié)介紹了冷熱數(shù)據(jù)分離的概念,本小節(jié)我們來搭建一個(gè)用于歸檔冷數(shù)據(jù)的高可用Replication集群。雖然是歸檔庫,但也得讓其具有高可用性,畢竟在實(shí)際的企業(yè)中是不允許數(shù)據(jù)庫出現(xiàn)單點(diǎn)故障的。而且歸檔庫中的數(shù)據(jù)也不是不會(huì)被使用到,只不過是使用幾率不高而已。
本文中的Replication集群架構(gòu)設(shè)計(jì)如下:
所謂Replication集群就是我們常說的主從架構(gòu),在Replication集群中,節(jié)點(diǎn)分為Master和Slave兩種角色。Master主要是提供寫服務(wù),Slave則提供讀服務(wù),并且通常Slave會(huì)被設(shè)置為read_only
。
主從節(jié)點(diǎn)之間的數(shù)據(jù)同步是異步進(jìn)行的,Slave使用一個(gè)線程監(jiān)聽Master節(jié)點(diǎn)的binlog
日志,當(dāng)Master的binlog
日志發(fā)生變化時(shí),該線程就會(huì)讀取Master的binlog
日志內(nèi)容并寫入到本地的relay_log
中。然后mysql進(jìn)程會(huì)定時(shí)讀取relay_log
并將數(shù)據(jù)寫入到本地的binlog
文件,這樣就實(shí)現(xiàn)了主從之間的數(shù)據(jù)同步。如下圖所示:
為了保證Replication集群的高可用,我們需要讓兩個(gè)數(shù)據(jù)庫節(jié)點(diǎn)之間互為主從關(guān)系,實(shí)現(xiàn)雙向的數(shù)據(jù)同步。這樣才能在主節(jié)點(diǎn)掛掉時(shí)進(jìn)行主從切換,否則主節(jié)點(diǎn)在恢復(fù)后不會(huì)向從節(jié)點(diǎn)同步數(shù)據(jù),會(huì)導(dǎo)致節(jié)點(diǎn)之間的數(shù)據(jù)不一致:
接下來開始準(zhǔn)備集群搭建的前置環(huán)境,首先需要?jiǎng)?chuàng)建4臺(tái)虛擬機(jī),其中兩臺(tái)安裝Percona Server做Replication集群,兩臺(tái)安裝Haproxy和Keepalived做負(fù)載均衡和雙機(jī)熱備:
角色 | Host | IP |
---|---|---|
Haproxy+Keepalived | HA-01 | 192.168.190.135 |
Haproxy+Keepalived | HA-02 | 192.168.190.143 |
Percona Server | node-A | 192.168.190.142 |
Percona Server | node-B | 192.168.190.131 |
每臺(tái)虛擬機(jī)的配置如下:
環(huán)境版本說明:
之前說了InnoDB因?yàn)槠涮匦圆贿m合作為歸檔數(shù)據(jù)庫的存儲(chǔ)引擎,而應(yīng)采用TokuDB。TokuDB可以安裝在任意MySQL的衍生版本上,本文采用的是Percona Server這個(gè)MySQL衍生版作為演示。
我這里已經(jīng)事先在192.168.190.142
和192.168.190.131
兩個(gè)虛擬機(jī)上安裝好了Percona Server,如不了解其安裝方式的話,可參考:安裝Percona Server數(shù)據(jù)庫(in CentOS 8)。接下來,我們就開始為Percona Server安裝TokuDB。
首先,在安裝TokuDB前確保系統(tǒng)中已有jemalloc庫,沒有的話可以使用如下命令安裝:
[root@node-A ~]# yum install -y jemalloc
[root@node-A ~]# ls /usr/lib64/ |grep jemalloc # 庫文件所在路徑
libjemalloc.so.1
[root@node-A ~]#
在配置文件中添加jemalloc庫文件所在路徑的配置:
[root@node-A ~]# vim /etc/my.cnf
...
[mysql_safe]
malloc-lib=/usr/lib64/libjemalloc.so.1
完成配置文件的修改后,重啟數(shù)據(jù)庫服務(wù):
[root@node-A ~]# systemctl restart mysqld
為了保證TokuDB的寫入性能,我們需要調(diào)整一下Linux系統(tǒng)的大頁內(nèi)存管理的設(shè)置,命令如下:
# 采用動(dòng)態(tài)分配內(nèi)存而不是預(yù)先分配內(nèi)存
[root@node-A ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 開啟內(nèi)存的碎片整理
[root@node-A ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
通過官方提供的yum
倉庫安裝TokuDB引擎:
[root@node-A ~]# yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
[root@node-A ~]# percona-release setup ps80
[root@node-A ~]# yum install -y percona-server-tokudb.x86_64
接著使用ps-admin
命令將TokuDB引擎安裝到MySQL上:
[root@node-A ~]# ps-admin --enable-tokudb -uroot -p
重啟數(shù)據(jù)庫服務(wù):
[root@node-A ~]# systemctl restart mysqld
數(shù)據(jù)庫重啟完成后,再執(zhí)行一次ps-admin
命令以激活TokuDB引擎:
[root@node-A ~]# ps-admin --enable-tokudb -uroot -p
最后使用show engines;
語句驗(yàn)證一下MySQL上是否已成功安裝了TokuDB引擎:
首先在兩個(gè)節(jié)點(diǎn)上分別創(chuàng)建用于同步的數(shù)據(jù)庫賬戶:
create user 'backup'@'%' identified by 'Abc_123456';
grant super, reload, replication slave on *.* to 'backup'@'%';
flush privileges;
然后修改MySQL配置文件:
[root@node-A ~]# vim /etc/my.cnf
[mysqld]
# 設(shè)置節(jié)點(diǎn)的id
server_id=101
# 開啟binlog
log_bin=mysql_bin
# 開啟relay_log
relay_log=relay_bin
另外一個(gè)節(jié)點(diǎn)也是同樣的配置,只不過server_id
不能是一樣的:
[root@node-B ~]# vim /etc/my.cnf
[mysqld]
server_id=102
log_bin=mysql_bin
relay_log=relay_bin
修改完配置文件后,重啟MySQL服務(wù):
[root@node-A ~]# systemctl restart mysqld
[root@node-B ~]# systemctl restart mysqld
node-B
對(duì)node-A
的主從關(guān)系進(jìn)入node-B
的MySQL命令行終端,分別執(zhí)行如下語句:
mysql> stop slave; -- 停止主從同步
mysql> change master to master_host='192.168.190.142', master_port=3306, master_user='backup', master_password='Abc_123456'; -- 配置Master節(jié)點(diǎn)的連接信息
mysql> start slave; -- 啟動(dòng)主從同步
使用show slave status\G;
語句查看主從同步狀態(tài),Slave_IO_Running
和Slave_SQL_Running
的值均為Yes
才能表示主從同步狀態(tài)是正常的:
node-A
對(duì)node-B
的主從關(guān)系為了實(shí)現(xiàn)雙向同步,node-A
和node-B
需要互為主從關(guān)系,所以還需要配置node-A
對(duì)node-B
的主從關(guān)系。進(jìn)入node-A
的MySQL命令行終端,分別執(zhí)行如下語句,注意這里的master_host
需要為node-B
的ip:
mysql> stop slave; -- 停止主從同步
mysql> change master to master_host='192.168.190.131', master_port=3306, master_user='backup', master_password='Abc_123456'; -- 配置Master節(jié)點(diǎn)的連接信息
mysql> start slave; -- 啟動(dòng)主從同步
同樣配置完成后,使用show slave status\G;
語句查看主從同步狀態(tài),Slave_IO_Running
和Slave_SQL_Running
的值均為Yes
才能表示主從同步狀態(tài)是正常的:
配置好兩個(gè)節(jié)點(diǎn)的主從同步關(guān)系之后,我們就算是完成了Replication集群的搭建。接下來我們?cè)谌我庖粋€(gè)節(jié)點(diǎn)創(chuàng)建一張歸檔表,看看兩個(gè)節(jié)點(diǎn)之間是否能正常同步數(shù)據(jù)。具體的建表SQL如下:
create table t_purchase_201909 (
id int unsigned primary key,
purchase_price decimal(10, 2) not null comment '進(jìn)貨價(jià)格',
purchase_num int unsigned not null comment '進(jìn)貨數(shù)量',
purchase_sum decimal(10, 2) not null comment '進(jìn)貨總價(jià)',
purchase_buyer int unsigned not null comment '采購者',
purchase_date timestamp not null default current_timestamp comment '采購日期',
company_id int unsigned not null comment '進(jìn)貨企業(yè)的id',
goods_id int unsigned not null comment '商品id',
key idx_company_id(company_id),
key idx_goods_id(goods_id)
) engine=TokuDB comment '2019年9月的進(jìn)貨數(shù)據(jù)歸檔表';
我這里是能夠正常進(jìn)行同步的,如圖兩個(gè)節(jié)點(diǎn)都能看到這張表:
到此為止,我們就完成了Replication集群的搭建及測(cè)試。接下來就是得讓Replication集群具有高可用的特性,這就輪到Haproxy上場(chǎng)了。Haproxy是一款提供高可用性、負(fù)載均衡以及基于TCP(第四層)和HTTP(第七層)應(yīng)用的代理軟件。使用Haproxy可以對(duì)MySQL集群進(jìn)行負(fù)載均衡,賦予集群高可用性并發(fā)揮集群的性能。
Haproxy由于是老牌的負(fù)載均衡組件了,所以CentOS的yum
倉庫中自帶有該組件的安裝包,安裝起來就非常簡(jiǎn)單。安裝命令如下:
[root@HA-01 ~]# yum install -y haproxy
安裝完成后,編輯Haproxy的配置文件,添加監(jiān)控界面及需要代理的數(shù)據(jù)庫節(jié)點(diǎn)配置:
[root@HA-01 ~]# vim /etc/haproxy/haproxy.cfg
# 在文件的末尾添加如下配置項(xiàng)
# 監(jiān)控界面配置
listen admin_stats
# 綁定的ip及監(jiān)聽的端口
bind 0.0.0.0:4001
# 訪問協(xié)議
mode http
# URI 相對(duì)地址
stats uri /dbs
# 統(tǒng)計(jì)報(bào)告格式
stats realm Global\ statistics
# 用于登錄監(jiān)控界面的賬戶密碼
stats auth admin:abc123456
# 數(shù)據(jù)庫負(fù)載均衡配置
listen proxy-mysql
# 綁定的ip及監(jiān)聽的端口
bind 0.0.0.0:3306
# 訪問協(xié)議
mode tcp
# 負(fù)載均衡算法
# roundrobin:輪詢
# static-rr:權(quán)重
# leastconn:最少連接
# source:請(qǐng)求源ip
balance roundrobin
# 日志格式
option tcplog
# 需要被負(fù)載均衡的主機(jī)
server node-A 192.168.190.142:3306 check port 3306 weight 1 maxconn 2000
server node-B 192.168.190.131:3306 check port 3306 weight 1 maxconn 2000
# 使用keepalive檢測(cè)死鏈
option tcpka
由于配置了3306
端口用于TCP
轉(zhuǎn)發(fā),以及4001
作為Haproxy監(jiān)控界面的訪問端口,所以在防火墻上需要開放這兩個(gè)端口:
[root@HA-01 ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@HA-01 ~]# firewall-cmd --zone=public --add-port=4001/tcp --permanent
[root@HA-01 ~]# firewall-cmd --reload
完成以上步驟后,啟動(dòng)Haproxy服務(wù):
[root@HA-01 ~]# systemctl start haproxy
然后使用瀏覽器訪問Haproxy的監(jiān)控界面,初次訪問會(huì)要求輸入用戶名密碼,這里的用戶名密碼就是配置文件中所配置的:
登錄成功后,就會(huì)看到如下頁面:
Haproxy的監(jiān)控界面提供的監(jiān)控信息也比較全面,在該界面下,我們可以看到每個(gè)主機(jī)的連接信息及其自身狀態(tài)。當(dāng)主機(jī)無法連接時(shí),Status
一欄會(huì)顯示DOWN
,并且背景色也會(huì)變?yōu)榧t色。正常狀態(tài)下的值則為UP
,背景色為綠色。
另一個(gè)Haproxy節(jié)點(diǎn)也是使用以上的步驟進(jìn)行安裝和配置,這里就不再重復(fù)了。
Haproxy服務(wù)搭建起來后,我們來使用遠(yuǎn)程工具測(cè)試一下能否通過Haproxy正常連接到數(shù)據(jù)庫。如下:
連接成功后,在Haproxy上執(zhí)行一些SQL語句,看看能否正常插入數(shù)據(jù)和查詢數(shù)據(jù):
我們搭建Haproxy是為了讓Replication集群具備高可用的,所以最后測(cè)試一下Replication集群是否已具備有高可用性,首先將其中一個(gè)節(jié)點(diǎn)給停掉:
[root@node-B ~]# systemctl stop mysqld
此時(shí),從Haproxy的監(jiān)控界面中,可以看到node-B
這個(gè)節(jié)點(diǎn)已經(jīng)處于下線狀態(tài)了:
現(xiàn)在集群中還剩一個(gè)節(jié)點(diǎn),然后我們到Haproxy上執(zhí)行一些SQL語句,看看是否還能正常插入數(shù)據(jù)和查詢數(shù)據(jù):
從測(cè)試結(jié)果可以看到,插入和查詢語句依舊是能正常執(zhí)行的。也就是說即便此時(shí)關(guān)掉一個(gè)節(jié)點(diǎn)整個(gè)數(shù)據(jù)庫集群還能夠正常使用,說明現(xiàn)在Replication集群是具有高可用性了。
實(shí)現(xiàn)了Replication集群的高可用之后,我們還得實(shí)現(xiàn)Haproxy的高可用,因?yàn)镠aproxy作為一個(gè)負(fù)責(zé)接收客戶端請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫集群的入口,不可避免的需要具備高可用性。否則Haproxy出現(xiàn)單點(diǎn)故障,就無法訪問被Haproxy代理的所有數(shù)據(jù)庫集群節(jié)點(diǎn)了,這對(duì)整個(gè)系統(tǒng)的影響是十分巨大的。
在同一時(shí)間只需要存在一個(gè)可用的Haproxy,否則客戶端就不知道該連哪個(gè)Haproxy了。這也是為什么要采用Keepalived的虛擬IP的原因,這種機(jī)制能讓多個(gè)節(jié)點(diǎn)互相接替時(shí)依舊使用同一個(gè)IP,客戶端至始至終只需要連接這個(gè)虛擬IP。所以實(shí)現(xiàn)Haproxy的高可用就要輪到Keepalived出場(chǎng)了,在安裝Keepalived之前需要開啟防火墻的VRRP協(xié)議:
[root@HA-01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT
[root@HA-01 ~]# firewall-cmd --reload
然后就可以使用yum
命令安裝Keepalived了:
[root@HA-01 ~]# yum install -y keepalived
安裝完成后,編輯keepalived的配置文件:
[root@HA-01 ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak # 不使用自帶的配置文件
[root@HA-01 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.190.101
}
}
配置說明:
state MASTER
:定義節(jié)點(diǎn)角色為master,當(dāng)角色為master時(shí),該節(jié)點(diǎn)無需爭(zhēng)搶就能獲取到VIP。集群內(nèi)允許有多個(gè)master,當(dāng)存在多個(gè)master時(shí),master之間就需要爭(zhēng)搶VIP。為其他角色時(shí),只有master下線才能獲取到VIPinterface ens32
:定義可用于外部通信的網(wǎng)卡名稱,網(wǎng)卡名稱可以通過ip addr
命令查看virtual_router_id 51
:定義虛擬路由的id,取值在0-255,每個(gè)節(jié)點(diǎn)的值需要唯一,也就是不能配置成一樣的priority 100
:定義權(quán)重,權(quán)重越高就越優(yōu)先獲取到VIPadvert_int 1
:定義檢測(cè)間隔時(shí)間為1秒authentication
:定義心跳檢查時(shí)所使用的認(rèn)證信息
auth_type PASS
:定義認(rèn)證類型為密碼auth_pass 123456
:定義具體的密碼virtual_ipaddress
:定義虛擬IP(VIP),需要為同一網(wǎng)段下的IP,并且每個(gè)節(jié)點(diǎn)需要一致完成以上配置后,啟動(dòng)keepalived服務(wù):
[root@HA-01 ~]# systemctl start keepalived
當(dāng)keepalived服務(wù)啟動(dòng)成功,使用ip addr
命令可以查看到網(wǎng)卡綁定的虛擬IP:
另一個(gè)節(jié)點(diǎn)也是使用以上的步驟進(jìn)行安裝和配置,這里就不再重復(fù)了。不過要注意virtual_router_id
不能配置成一樣的,而virtual_ipaddress
則必須配置成同一個(gè)虛擬ip。
以上我們完成了Keepalived的安裝與配置,最后我們來測(cè)試Keepalived服務(wù)是否正??捎?,以及測(cè)試Haproxy是否已具有高可用性。
首先,在其他節(jié)點(diǎn)上測(cè)試虛擬IP能否正常ping
通,如果不能ping
通就需要檢查配置了。如圖,我這里是能正常ping
通的:
常見的虛擬IP ping不通的情況:
確認(rèn)能夠從外部ping
通Keepalived的虛擬IP后,使用Navicat測(cè)試能否通過虛擬IP連接到數(shù)據(jù)庫:
連接成功后,執(zhí)行一些語句測(cè)試能否正常插入、查詢數(shù)據(jù):
到此就基本沒什么問題了,最后測(cè)試一下Haproxy的高可用性,將其中一個(gè)Haproxy節(jié)點(diǎn)上的Keepalived和Haproxy服務(wù)給關(guān)掉:
[root@HA-01 ~]# systemctl stop keepalived
[root@HA-01 ~]# systemctl stop haproxy
然后再次執(zhí)行執(zhí)行一些語句測(cè)試能否正常插入、查詢數(shù)據(jù),如下能正常執(zhí)行代表Haproxy節(jié)點(diǎn)已具有高可用性:
最后將所有的服務(wù)恢復(fù)成運(yùn)行狀態(tài),驗(yàn)證停止的節(jié)點(diǎn)恢復(fù)之后數(shù)據(jù)是否是一致的。如下,我這里兩個(gè)Replication節(jié)點(diǎn)的數(shù)據(jù)都是一致的:
到此為止,我們就完成了高可用Replication集群的搭建。接下來就是實(shí)踐如何將大量的冷數(shù)據(jù)從PXC集群分片中剝離出來并歸檔到Replication集群中,我這里有兩個(gè)PXC集群分片:
每個(gè)分片里都有一張t_purchase
表,其建表SQL如下。
create table t_purchase (
id int unsigned primary key,
purchase_price decimal(10, 2) not null comment '進(jìn)貨價(jià)格',
purchase_num int unsigned not null comment '進(jìn)貨數(shù)量',
purchase_sum decimal(10, 2) not null comment '進(jìn)貨總價(jià)',
purchase_buyer int unsigned not null comment '采購者',
purchase_date timestamp not null default current_timestamp comment '采購日期',
company_id int unsigned not null comment '進(jìn)貨企業(yè)的id',
goods_id int unsigned not null comment '商品id',
key idx_company_id(company_id),
key idx_goods_id(goods_id)
) comment '進(jìn)貨表';
每個(gè)分片合計(jì)共存儲(chǔ)了100w條進(jìn)貨數(shù)據(jù):
其中有60w條進(jìn)貨數(shù)據(jù)的采購日期都是2019-11-01
之前的:
現(xiàn)在的需求是將2019-11-01
之前的數(shù)據(jù)都剝離出來進(jìn)行歸檔,這要如何實(shí)現(xiàn)呢?自己寫代碼肯定是比較麻煩的,好在Percona工具包里提供了一個(gè)用于歸檔數(shù)據(jù)的工具:pt-archiver
,使用該工具可以很輕松的完成數(shù)據(jù)歸檔,免除了自己寫歸檔程序的麻煩。pt-archiver
主要有兩個(gè)用途:
想要使用pt-archiver
首先得安裝Percona工具包:
[root@node-A ~]# yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
[root@node-A ~]# percona-release enable ps-80 release
[root@node-A ~]# yum install -y percona-toolkit
安裝完成后,驗(yàn)證pt-archiver
命令是否可用:
[root@node-A ~]# pt-archiver --version
pt-archiver 3.1.0
[root@node-A ~]#
接著就可以使用pt-archiver
命令進(jìn)行數(shù)據(jù)的歸檔了,首先需要在Replication集群中創(chuàng)建一張歸檔表,表名以歸檔的數(shù)據(jù)日期為后綴,存儲(chǔ)引擎使用TokuDB。具體的建表SQL如下:
create table t_purchase_201910 (
id int unsigned primary key,
purchase_price decimal(10, 2) not null comment '進(jìn)貨價(jià)格',
purchase_num int unsigned not null comment '進(jìn)貨數(shù)量',
purchase_sum decimal(10, 2) not null comment '進(jìn)貨總價(jià)',
purchase_buyer int unsigned not null comment '采購者',
purchase_date timestamp not null default current_timestamp comment '采購日期',
company_id int unsigned not null comment '進(jìn)貨企業(yè)的id',
goods_id int unsigned not null comment '商品id',
key idx_company_id(company_id),
key idx_goods_id(goods_id)
) engine=TokuDB comment '2019年10月的進(jìn)貨數(shù)據(jù)歸檔表';
然后使用pt-archiver
命令完成數(shù)據(jù)歸檔,如下示例:
[root@node-A ~]# pt-archiver --source h=192.168.190.100,P=3306,u=admin,p=Abc_123456,D=test,t=t_purchase --dest h=192.168.190.101,P=3306,u=archive,p=Abc_123456,D=test,t=t_purchase_201910 --no-check-charset --where 'purchase_date < "2019-11-01 0:0:0"' --progress 50000 --bulk-delete --bulk-insert --limit=100000 --statistics
pt-archiver
命令是使用load data
語句進(jìn)行數(shù)據(jù)導(dǎo)入的,所以要確保MySQL開啟了local_infile
。如果沒有開啟的話歸檔數(shù)據(jù)會(huì)失敗,可以使用set global local_infile = 'ON';
語句來開啟local_infile
。命令參數(shù)說明:
--source
:指定從哪個(gè)數(shù)據(jù)庫讀取數(shù)據(jù)--dest
:指定將數(shù)據(jù)歸檔至哪個(gè)數(shù)據(jù)庫--no-check-charset
:不檢查數(shù)據(jù)的字符集--where
:指定將哪些數(shù)據(jù)進(jìn)行歸檔,在本例中就是將2019-09-11
之前的數(shù)據(jù)進(jìn)行歸檔--progress
:指定當(dāng)歸檔完多少條數(shù)據(jù)時(shí)打印一次狀態(tài)信息--bulk-delete
:指定批量刪除歸檔數(shù)據(jù)。數(shù)據(jù)的刪除有事務(wù)保證,不會(huì)出現(xiàn)未歸檔成功就將數(shù)據(jù)刪除了的情況--bulk-insert
:指定批量寫入歸檔數(shù)據(jù)--limit
:指定每次歸檔多少條數(shù)據(jù)--statistics
:歸檔數(shù)據(jù)完成后打印統(tǒng)計(jì)信息等待大約15分鐘左右數(shù)據(jù)就歸檔完成了,輸出的統(tǒng)計(jì)信息如下:
此時(shí)在Replication集群上可以看到那60w數(shù)據(jù)都已經(jīng)存儲(chǔ)到了歸檔表中:
而原本的PXC集群中就只剩40w數(shù)據(jù)了:
如此一來我們就完成了冷熱數(shù)據(jù)分離,并將大量的冷數(shù)據(jù)存儲(chǔ)至指定的歸檔數(shù)據(jù)庫中。
pt-archiver
可以導(dǎo)出大量數(shù)據(jù)并歸檔存儲(chǔ),且簡(jiǎn)便易行免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。