1.PXC(Percona XtraDB Cluster)集群基本搭建
特別感謝
常見問題
環境的清理相關命令
本集群通過虛擬機搭建的 自己也嘗試了很多次 如果有些問題無法解決
可以嘗試清理環境 梳理清楚思路 重新搭建
以下是常用命令
#重啟docker服務
systemctl restart docker
#docker 根目錄
docker info | grep "Docker Root Dir"
# 刪除所有dangling數據卷(即無用的Volume,僵屍文件)
docker volume rm $(docker volume ls -qf dangling=true)
# 刪除所有dangling鏡像(即無tag的鏡像)
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
# 刪除所有關閉的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
# 刪除關閉的容器、無用的數據卷和網絡
docker system prune
# 刪除更徹底,可以將沒有容器使用Docker鏡像都刪掉
docker system prune -a
# 查看日志
docker logs -f --tail 50 pxcnode01
集群搭起來后關閉某個節點起不來了 所有節點都關閉了
(1)查找grastate.dat 該文件主要描述GALERA保持的狀態信息
cd / #在根目錄下查找
find -name grastate.dat
(2)如果啟動節點1位主節點 就修改節點1的grastate.dat文件 然后再重新啟動所有子節點
vim /var/lib/docker/volumes/pxc-vm01/_data/grastate.dat
(3)啟動haproxy
docker start hpx01
docker start hpx02
(4)啟動Keepalived
service keepalived start
1.PXC(Percona XtraDB Cluster)集群基本搭建
速度慢 但能保證強一致性 適用於保存價值較高的數據
數據同步是雙向的 在任一節點寫入數據 都會同步到其他所有節點 在任何節點上都能同時讀寫
采用同步復制 向任一節點寫入數據 只有所有節點都同步成功后 才會向客戶端返回成功。事務在所有節點要么同時提交,要么不提交
(1)安裝 docker pull percona/percona-xtradb-cluster
(2)重命名 docker tag percona/percona-xtradb-cluster:latest pxc
(3)刪除源鏡像標簽 docker rmi percona/percona-xtradb-cluster
docker images
1.2創建網段 docker network create --subnet=172.188.0.0/24 hxjf-docker (如果有重復可以刪除 docker network rm 名稱)
查看 docker network inspect hxjf-docker
docker volume create --name pxc-vm01
docker volume create --name pxc-vm02
docker volume create --name pxc-vm03
docker volume create --name pxc-vm04
docker volume create --name pxc-vm05
查看 docker inspect pxc-vm01
# 第一個節點
(1)創建容器
docker run -d -p 3301:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -v pxc-vm01:/var/lib/mysql -v backup:/data --privileged --name=pxcnode01 --net=hxjf-docker --ip 172.188.0.81 pxc
(2)驗證
docker ps -a
docker exec -it pxcnode01 bash
mysql -u root -proot (這里我后來重新docker run MYSQL_ROOT_PASSWORD參數修改123456登錄也不行 只能用root登錄)
#以下二三四五節點 多了個 -e CLUSTER_JOIN=pxcnode01
# 第二個節點
docker run -d -p 3302:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm02:/var/lib/mysql -v backup:/data --privileged --name=pxcnode02 --net=hxjf-docker --ip 172.188.0.82 pxc
# 第三個節點
docker run -d -p 3303:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm03:/var/lib/mysql -v backup:/data --privileged --name=pxcnode03 --net=hxjf-docker --ip 172.188.0.83 pxc
# 第四個節點
docker run -d -p 3304:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm04:/var/lib/mysql -v backup:/data --privileged --name=pxcnode04 --net=hxjf-docker --ip 172.188.0.84 pxc
# 第五個節點
docker run -d -p 3305:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm05:/var/lib/mysql -v backup:/data --privileged --name=pxcnode05 --net=hxjf-docker --ip 172.188.0.85 pxc
# 查看 docker ps -a
2.解決SSL通信問題
2.1.1查看日志
查看日期發現其它pxcnode02 pxcnode03 pxcnode04 pxcnode05沒有起來
docker ps -a
docker logs -f pxcnode03
2.1.2重新配置pxcnode01
(1)刪掉第一個pxcnode01
docker stop pxcnode01
docker rm pxcnode01
docker ps -a

docker restart pxcnode01
(5)重啟剩余節點
docker rm pxcnode02
docker rm pxcnode03
docker rm pxcnode04
docker rm pxcnode05
docker ps -a
#pxcnode02
docker run -d -p 3302:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm02:/var/lib/mysql -v backup:/data -v conf02:/etc/mysql --privileged --name=pxcnode02 --net=hxjf-docker --ip 172.188.0.82 pxc
#pxcnode03
docker run -d -p 3303:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm03:/var/lib/mysql -v backup:/data -v conf03:/etc/mysql --privileged --name=pxcnode03 --net=hxjf-docker --ip 172.188.0.83 pxc
#pxcnode04
docker run -d -p 3304:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm04:/var/lib/mysql -v backup:/data -v conf04:/etc/mysql --privileged --name=pxcnode04 --net=hxjf-docker --ip 172.188.0.84 pxc
#pxcnode05
docker run -d -p 3305:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=PXC-CLUSTER -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=pxcnode01 -v pxc-vm05:/var/lib/mysql -v backup:/data -v conf05:/etc/mysql --privileged --name=pxcnode05 --net=hxjf-docker --ip 172.188.0.85 pxc
#查看容器 docker ps -a 還是失敗
(6)配置從節點

(7)重啟從節點
docker start pxcnode02
docker start pxcnode03
docker start pxcnode04
docker start pxcnode05
(8)查看節點
啟動正常 docker ps -aq
(1)修改配置文件
5個節點都需要操作 首先需要保證目前5個節點已經運行起來 然后修改節點的配置文件
在 [sst] 節點下增加配置
(2)生成CA密鑰 服務證書 客戶端證書
mkdir -p /etc/mysql/certs #創建目錄 如果有不需要創建
cd /etc/mysql/certs #到此目錄下生成相關文件
以下紅色標識的命令需要輸入Common Name 且輸入名稱不能相同 否咋證書不可使用
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem (輸入common1)
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem (輸入common2)
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem(輸入common3)
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

[root@localhost certs]# openssl genrsa 2048 > ca-key.pem Generating RSA private key, 2048 bit long modulus ............+++ ..............................................................+++ e is 65537 (0x10001) [root@localhost certs]# openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:como^H^C [root@localhost certs]# openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:common1 Email Address []: [root@localhost certs]# openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem Generating a 2048 bit RSA private key .......................................................+++ ...............................................................................................+++ writing new private key to 'server-key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:common2 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@localhost certs]# openssl rsa -in server-key.pem -out server-key.pem writing RSA key [root@localhost certs]# openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem Signature ok subject=/C=XX/L=Default City/O=Default Company Ltd/CN=common2 Getting CA Private Key [root@localhost certs]# openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem Generating a 2048 bit RSA private key .............................................+++ ..........+++ writing new private key to 'client-key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:common3 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@localhost certs]# [root@localhost certs]# openssl rsa -in client-key.pem -out client-key.pem writing RSA key [root@localhost certs]# openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem Signature ok subject=/C=XX/L=Default City/O=Default Company Ltd/CN=common3 Getting CA Private Key [root@localhost certs]# [root@localhost certs]# openssl verify -CAfile ca.pem server-cert.pem client-cert.pem server-cert.pem: OK client-cert.pem: OK
(3)將證書拷貝到容器目錄下
查看node.cnf權限
cd /var/lib/docker/volumes/conf01/_data/
ll -allh
修改certs文件夾權限 否則pxc將沒有權限讀取
cd /etc/mysql
chown -R 1001:1001 ./certs
ll -allh
查看證書是否成功拷貝到容器內

(4)重啟容器
關閉5個節點


啟動集群
進入pxcnode01
docker exec -it pxcnode01 /bin/bash
mysql -uroot -proot
創建數據庫 hxkf
create database hxjf;
show databases;
向數據庫hxjf新增一個表 並插入一條數據
use hxjg;
create table user_info (id int,name varchar(20) , age int );
ALTER TABLE `hxjf`.`user_info` CHANGE COLUMN `id` `id` INT NOT NULL ,ADD PRIMARY KEY (`id`);
insert into user_info (id,name,age) values(1,'',20);
進入pxcnode02 查看數據是否同步過來
docker exec -it pxcnode02 /bin/bash
mysql -uroot -p root
show databases;
#數據庫已經同步過來了
mysql> use hxjf;
mysql> show tables;
mysql> select * from user_info;
#表和數據也已經同步過來了
3.安裝Haproxy 實現高可用
3.1遇到的問題 (這只是問題 並是不安裝過程 只是記錄 安裝從3.2開始)
如果在haproxy的配飾文件指定工作目錄,docker就運行不起來
docker查看日志錯誤如下
網上說只要創建對應的目錄即可,但是我查了很多資料都沒有成功
於是我就只能注釋配置文件 haproxy就可以運行了 暫時不知道為什么 如果有知道的感謝指出
3.2.1查詢鏡像
docker search haproxy
3.2.2拉取鏡像
docker pull haproxy
3.2.3查詢本地鏡像
docker images
3.2.4修改配置文件
vim /home/nscoffee/docker/haproxy/haproxy.cfg

1 global 2 #工作目錄 3 chroot /usr/local/etc/haproxy 4 #日志文件,使用rsyslog服務中local5日志設備(/var/log/local5),等級info 5 log 127.0.0.1 local5 info 6 #守護進程運行 7 daemon 8 defaults 9 log global 10 mode http 11 #日志格式 12 option httplog 13 #日志中不記錄負載均衡的心跳檢測記錄 14 option dontlognull 15 #連接超時(毫秒) 16 timeout connect 5000 17 #客戶端超時(毫秒) 18 timeout client 50000 19 #服務器超時(毫秒) 20 timeout server 50000 21 #監控界面 22 listen admin_stats 23 #監控界面的訪問的IP和端口 24 bind 0.0.0.0:8888 25 #訪問協議 26 mode http 27 #URI相對地址 28 stats uri /dbs 29 #統計報告格式 30 stats realm Global\ statistics 31 #登陸帳戶信息 32 stats auth admin:admin 33 #數據庫負載均衡 34 listen proxy-mysql 35 #訪問的IP和端口 36 bind 0.0.0.0:3306 37 #網絡協議 38 mode tcp 39 #負載均衡算法(輪詢算法) 40 #輪詢算法:roundrobin 41 #權重算法:static-rr 42 #最少連接算法:leastconn 43 #請求源IP算法:source 44 balance roundrobin 45 #日志格式 46 option tcplog 47 48 option mysql-check user root 49 server MySQL_1 172.188.0.81:3306 check weight 1 maxconn 2000 50 server MySQL_2 172.188.0.82:3306 check weight 1 maxconn 2000 51 server MySQL_3 172.188.0.83:3306 check weight 1 maxconn 2000 52 server MySQL_4 172.188.0.84:3306 check weight 1 maxconn 2000 53 server MySQL_5 172.188.0.85:3306 check weight 1 maxconn 2000 54 #使用keepalive檢測死鏈 55 option tcpka
3.2.5運行容器
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/nscoffee/docker/haproxy:/usr/local/etc/haproxy --name hpx01 --privileged --net=hxjf-docker --ip 172.188.0.8 haproxy
docker ps -a
3.3.1查看hpx01日志 集群沒有啟動
docker logs hpx01
3.3.2啟動集群(如果集群沒有down掉 就不用重新集群)
修改配置文件為1
vim /var/lib/docker/volumes/pxc-vm01/_data/grastate.dat
docker start pxcnode01
docker start pxcnode02
docker start pxcnode03
docker start pxcnode04
docker start pxcnode05
docker ps -a
3.4.1登錄mysql
docker exec -it pxcnode01 /bin/bash
mysql -u root -proot
3.4.2修改配置文件
vim /home/nscoffee/docker/haproxy/haproxy.cfg
3.4.3進入haproxy登錄界面
http://192.168.188.180:4001/dbs
docker exec -it pxcnode01 /bin/bash
mysql -uroot -h192.168.188.180 -P4002 -proot
3.6.1 查看所有容器
docker ps -a
3.6.2關閉pxcnode4
docker stop pxcnode4
3.6.3 使用haproxy的登錄mysql
docker exec -it pxcnode01 /bin/bash
mysql -uroot -h192.168.188.180 -P4002 -proot
use hxjf;
select * from user_info;
4.利用Keepalived實現雙機熱備
目前haproxy為單點服務,如果haproxy宕機,造成整個集群不可用,所以需要對haproxy節點進行集群部署
提高haproxy節點的高可用
核心原理
(1)keepalived: vrrp協議的軟件實現,原生設計目的為了高可用ipvs服務
基於vrrp協議實現同一個ip地址在多台機器間的流轉
為獲得ip地址(vip)的機器生成ipvs規則(預先在配置文件中配置好)
為ipvs集群中的各節點做健康檢查
為什么要采用雙機熱備
單節點Haproxy不具備高可用,必須要有冗余設計
雙機就是兩個請求處理程序,比如兩個haproxy,當一個掛掉的時候,另外 一個可以頂上。熱備我理解就是keepalive。在haproxy 容器中安裝keepalive。
利用Keepalived實現雙機熱備
在Docker中啟動兩個Haproxy容器,每個容器中還需要安裝Keepalived程序(以下簡稱KA)
兩個KA會爭搶虛擬IP,一個搶到后,另一個沒搶到就會等待,搶到的作為主服務器,沒搶到的作為備用服務器
兩個KA之間會進行心跳檢測,如果備用服務器沒有受到主服務器的心跳響應,說明主服務器發生故障,那么備用服務器就可以爭搶虛擬IP,繼續工作
我們向虛擬IP發送數據庫請求,一個Haproxy掛掉,可以有另一個接替工作
4.1.1使用root權限登錄hpx01
docker exec -u 0 -it hpx01 /bin/bash
apt-get update
apt-get install keepalived
4.1.2在容器中安裝vim
apt-get install vim
apt-get update
apt-get install vim
找到安裝vim配置文件
vim /usr/share/vim/vim81/defaults.vim
找到並修改
set mouse-=a
4.1.3修改配置文件
vim /etc/keepalived/keepalived.conf

1 vrrp_instance VI_1 { 2 state MASTER # Keepalived的身份(MASTER主服務要搶占IP,BACKUP備服務器不會搶占IP)。 3 interface eth0 # docker網卡設備,虛擬IP所在 4 virtual_router_id 51 # 虛擬路由標識,MASTER和BACKUP的虛擬路由標識必須一致。從0~255 5 priority 100 # MASTER權重要高於BACKUP數字越大優先級越高 6 advert_int 1 # MASTER和BACKUP節點同步檢查的時間間隔,單位為秒,主備之間必須一致 7 authentication { # 主從服務器驗證方式。主備必須使用相同的密碼才能正常通信 8 auth_type PASS 9 auth_pass 123456 10 } 11 virtual_ipaddress { # 虛擬IP。可以設置多個虛擬IP地址,每行一個 12 172.188.0.201 13 } 14 }
4.1.4啟動Keepalived
service keepalived start
4.1.5宿主機ping虛擬ip 172.188.0.201
4.2.1創建並運行容器
docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/nscoffee/docker/haproxy:/usr/local/etc/haproxy --name hpx02 --privileged --net=hxjf-docker --ip 172.188.0.9 haproxy
docker exec -u 0 -it hpx02 /bin/bash
4.2.2 配置文件(如果需要安裝配置vim見4.1.2)

1 vrrp_instance VI_1 { 2 state MASTER # Keepalived的身份(MASTER主服務要搶占IP,BACKUP備服務器不會搶占IP)。 3 interface eth0 # docker網卡設備,虛擬IP所在 4 virtual_router_id 51 # 虛擬路由標識,MASTER和BACKUP的虛擬路由標識必須一致。從0~255 5 priority 100 # MASTER權重要高於BACKUP數字越大優先級越高 6 advert_int 1 # MASTER和BACKUP節點同步檢查的時間間隔,單位為秒,主備之間必須一致 7 authentication { # 主從服務器驗證方式。主備必須使用相同的密碼才能正常通信 8 auth_type PASS 9 auth_pass 123456 10 } 11 virtual_ipaddress { # 虛擬IP。可以設置多個虛擬IP地址,每行一個 12 172.188.0.201 13 } 14 }
4.2.3啟動
service keepalived start
4.3.1查看當前局域網IP分配情況
yum install nmap -y
nmap -sP 192.168.1.0/24
4.3.2安裝keepalived
vim /etc/keepalived/keepalived.conf
(如果嫌配置不好找 可以把之前的刪掉 我這里刪掉了重新配置的 看個人rm /etc/keepalived/keepalived.conf)

1 vrrp_instance VI_1 { 2 state MASTER 3 #這里是宿主機的網卡,可以通過ip a查看當前自己電腦上用的網卡名是哪個 4 interface ens33 5 virtual_router_id 100 6 priority 100 7 advert_int 1 8 authentication { 9 auth_type PASS 10 auth_pass 1111 11 } 12 virtual_ipaddress { 13 #這里是指定的一個宿主機上的虛擬ip,一定要和宿主機網卡在同一個網段, 14 #我的宿主機網卡ip是192.168.188.180,所以指定虛擬ip是160 15 192.168.188.160 16 } 17 } 18 19 #接受監聽數據來源的端口,網頁入口使用 20 virtual_server 192.168.188.160 8888 { 21 delay_loop 3 22 lb_algo rr 23 lb_kind NAT 24 persistence_timeout 50 25 protocol TCP 26 #把接受到的數據轉發給docker服務的網段及端口,由於是發給docker服務,所以和docker服務數據要一致 27 real_server 172.188.0.201 8888 { 28 weight 1 29 } 30 } 31 32 #接受數據庫數據端口,宿主機數據庫端口是3306,所以這里也要和宿主機數據接受端口一致 33 virtual_server 192.168.188.160 3306 { 34 delay_loop 3 35 lb_algo rr 36 lb_kind NAT 37 persistence_timeout 50 38 protocol TCP 39 #同理轉發數據庫給服務的端口和ip要求和docker服務中的數據一致 40 real_server 172.188.0.201 3306 { 41 weight 1 42 } 43 }
4.3.3啟動Keepalived
service keepalived start
#service keepalived status
#service keepalived stop
4.3.4暫停PXC集群的方法
vi /etc/sysctl.conf
#文件中添加net.ipv4.ip_forword=1這個配置
systemctl restart network
查看用戶名密碼 登錄監控界面
vim /home/nscoffee/docker/haproxy/haproxy.cfg
192.168.188.160:8888/dbs
並且建庫都可同步
通過haproxy可以建立連接
直接連數據庫的端口號
5.數據備份
冷備份是關閉數據庫時候的備份方式,通常做法是拷貝數據文件
是簡單安全的一種備份方式,不能在數據庫運行時備份。
大型網站無法做到關閉業務備份數據,所以冷備份不是最佳選擇
熱備份是在系統運行狀態下備份數據
MySQL常見的熱備份有LVM和XtraBackup兩種方案
5.2.1LVM:linux的分區備份命令,可以備份任何數據庫;但是會對數據庫加鎖,只能讀取;而且命令復雜
5.2.2XtraBackup不需要鎖表,而且免費
XtraBackup是一款基於InnoDB的在線熱備工具,具有開源免費,支持在線熱備,占用磁盤空間小,能夠非常快速地備份與恢復mysql數據庫
備份過程中不鎖表,快速可靠
備份過程中不會打斷正在執行地事務
備份數據經過壓縮,占用磁盤空間小
全量備份:備份全部數據。備份過程時間長,占用空間大。第一次備份要使用全量備份
增量備份: 只備份變化的那部分數據。備份的時間短,占用空間小。第二次以后使用增量備份
docker exec -u 0 -it pxcnode01 /bin/bash
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable-only tools release
percona-release enable-only tools
(主要看pxc的mysql版本 我這里mysql版本是8.0 所以安裝8.0版本的percona-xtrabackup)
yum install -y percona-xtrabackup-80/yum install -y percona-xtrabackup-24
mkdir -p /data/backup/full
xtrabackup --backup -uroot -proot --target-dir=/data/backup/full
特別感謝
https://www.cnblogs.com/wanglei957/p/11819547.html
https://note.youdao.com/ynoteshare1/index.html?id=20f25c8660ff66ba598217c21093dfe2&type=note