實踐教程之如何對 PolarDB-X 進行備份恢復

PolarDB-X 爲了方便用戶體驗,提供了免費的實驗環境,您可以在實驗環境裏體驗 PolarDB-X 的安裝部署和各種內核特性。除了免費的實驗,PolarDB-X 也提供免費的視頻課程,手把手教你玩轉 PolarDB-X 分佈式數據庫。

本期實驗將指導您如何對PolarDB-X進行備份恢復。

本期免費實驗地址

本期教學視頻地址

前置準備

假設已經根據前一講內容完成了PolarDB-X的搭建部署,使用PolarDB-X Operator安裝PolarDB-X,並且可以成功鏈接上PolarDB-X數據庫。

啓動轉賬業務

本步驟將指導您如何使用賬戶轉賬場景模擬業務流量。

1.執行如下命令,創建 transfer.yaml

vim transfer.yaml

2.按i鍵進入編輯模式,將如下代碼複製到文件中,然後按ECS退出編輯模式,輸入:wq後按下Enter鍵保存並退出。

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: transfer-test-polardbx-config
data:
  config.toml: |
    row_count = 100
    initial_balance = 1000
    verbose = true
    enable_cts = false
    for_polarx = true
    [transfer_simple]
    enabled = true
    threads = 1
    [read_latest]
    enabled = false
    threads = 1
---
apiVersion: batch/v1
kind: Job
metadata:
  name: transfer-test-polardbx
spec:
  backoffLimit: 4
  template:
    spec:
      restartPolicy: Never
      volumes:
        - name: config-toml
          configMap:
            name: transfer-test-polardbx-config
            items:
              - key: config.toml
                path: config.toml
      initContainers:
        - name: database-init
          image: mysql:5.7
          env:
            - name: USER
              value: polardbx_root
            - name: PASSWD
              valueFrom:
                secretKeyRef:
                  name: polardb-x
                  key: polardbx_root
          command:
            - mysql
          args:
            - -h$(POLARDB_X_SERVICE_HOST)
            - -P$(POLARDB_X_SERVICE_PORT)
            - -u$(USER)
            - -p$(PASSWD)
            - -e
            - drop database if exists transfer_test; create database transfer_test character set utf8;
        - name: data-init
          image: polardbx/transfer-test:latest
          env:
            - name: USER
              value: polardbx_root
            - name: PASSWD
              valueFrom:
                secretKeyRef:
                  name: polardb-x
                  key: polardbx_root
          volumeMounts:
            - mountPath: /config.toml
              name: config-toml
              subPath: config.toml
              readOnly: true
          command: [ "/transfer" ]
          args:
            - prepare
            - -config=/config.toml
            - -dsn=$(USER):$(PASSWD)@tcp($(POLARDB_X_SERVICE_HOST):$(POLARDB_X_SERVICE_PORT))/transfer_test
      containers:
        - name: test
          image: polardbx/transfer-test
          env:
            - name: USER
              value: polardbx_root
            - name: PASSWD
              valueFrom:
                secretKeyRef:
                  name: polardb-x
                  key: polardbx_root
          volumeMounts:
            - mountPath: /config.toml
              name: config-toml
              subPath: config.toml
              readOnly: true
          command: [ "/transfer" ]
          args:
            - run
            - -config=/config.toml
            - -dsn=$(USER):$(PASSWD)@tcp($(POLARDB_X_SERVICE_HOST):$(POLARDB_X_SERVICE_PORT))/transfer_test
---

3.執行如下命令,開啓轉賬業務流量。

kubectl apply -f transfer.yaml

4.執行如下命令,等待轉賬業務pod變成Running狀態。

kubectl get pods -w

5.按Ctrl+C鍵,退出。

連接PolarDB-X驗證數據

本步驟將指導您如何連接通過K8s部署的PolarDB-X集羣。

1.執行如下命令,查看PolarDB-X集羣登錄密碼。

kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "

返回結果如下,您可以查看到PolarDB-X集羣登錄密碼。

2.執行如下命令,將PolarDB-X集羣端口轉發到3306端口。

說明:使用MySQL Client方式登錄通過k8s部署的PolarDB-X集羣前,您需要進行獲取PolarDB-X集羣登錄密碼和端口轉發。

kubectl port-forward svc/polardb-x 3306

3. 在實驗頁面,單擊右上角的+圖標,創建新的終端二。

4. 在終端二中,執行如下命令,連接PolarDB-X集羣。

說明:

  • 您需要將<PolarDB-X集羣登錄密碼>替換爲實際獲取到的PolarDB-X集羣登錄密碼。
  • 如遇到mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0報錯,請您稍等一分鐘,重新轉發端口並連接PolarDB-X集羣即可。
mysql -h127.0.0.1 -P3306 -upolardbx_root -p<PolarDB-X集羣登錄密碼>

5. 執行如下SQL,驗證數據一致性。

use transfer_test; select sum(balance) from accounts;

6. 輸入exit並回車,退出mysql命令行。

備份PolarDB-X

本步驟介紹如何爲一個PolarDB-X創建備份集。

1.回到終端一,按CTRL+C停止port-forward命令。

2.配置備份集存儲方式。

說明:PolarDB-X 目前支持將備份集保存到 OSS、SFTP兩種方式。本實驗中,我們將備份集通過SFTP備份到實驗機器的指定目錄。

2.1 執行如下命令,創建備份集存儲的配置文件backup-storage-patch.yaml.

vim backup-storage-patch.yaml

2.2 按i鍵進入編輯模式,將如下代碼複製到文件中,並修改其中的host字段爲實驗創建資源的私網ip(如何獲取參考下圖) ,然後按ECS退出編輯模式,輸入:wq後按下Enter鍵保存並退出。

data:
  config.yaml: |-
    sinks:
    - name: default
      type: sftp
      host: {修改爲實驗機器的ip}
      port: 22
      user: galaxykube
      password: Polardbx123
      rootPath: /home/galaxykube/backup/

2.3 執行如下命令,修改備份集存儲配置。

kubectl -n polardbx-operator-system patch configmap polardbx-hpfs-config --patch-file backup-storage-patch.yaml

2.4 執行如下命令重啓hpfs 組件,讓備份集存儲配置生效。

kubectl -n polardbx-operator-system rollout restart daemonsets polardbx-hpfs

3.爲 PolarDB-X 集羣進行備份。

3.1 執行如下命令,創建polardb-x-backup.yaml。

vim polardb-x-backup.yaml

3.2 按i鍵進入編輯模式,將如下代碼複製到文件中,然後按ECS退出編輯模式,輸入:wq後按下Enter鍵保存並退出。

apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXBackup                
metadata:
  name: polardb-x-backup            
spec:
  cluster:
    name: polardb-x          
  retentionTime: 240h               
  storageProvider:                  
    storageName: SFTP               
    sink: default

3.3 執行如下命令創建PolarDBXBackup對象,並對PolarDB-X集羣進行備份。

kubectl apply -f polardb-x-backup.yaml

3.4 執行如下命令觀察備份狀態,等到Phase 變爲finished,即表示備份完成。

kubectl get pxb -w

3.5按Ctrl+C鍵,退出。

恢復PolarDB-X

本步驟介紹如何從備份集恢復出一個PolarDB-X集羣。

1.執行如下命令,停止業務流量並刪除當前PolarDB-X集羣。

kubectl delete job --all 
kubectl delete pxc --all

2.執行如下命令,創建polardbx-restore.yaml。

vim polardbx-restore.yaml

3.按i鍵進入編輯模式,將如下代碼複製到文件中,然後按ECS退出編輯模式,輸入:wq後按下Enter鍵保存並退出。

apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: polardb-x-restore
spec:
  topology:
    nodes:
      cn:
        replicas: 1
        template:
          resources:
            limits:
              cpu: "2"
              memory: 4Gi
            requests:
              cpu: 100m
              memory: 1Gi
      dn:
        template:
          resources:
            limits:
              cpu: "1"
              memory: 2Gi
            requests:
              cpu: 100m
              memory: 1Gi
  restore:
    backupset: polardb-x-backup

4.執行如下命令,開始恢復PolarDB-X。

kubectl apply -f polardbx-restore.yaml

5. 執行如下命令,查看PolarDB-X集羣創建狀態。

kubectl get polardbxCluster polardb-x-restore -o wide -w

返回結果如下,請您耐心等待七分鐘左右,當PHASE顯示爲Running時,表示PolarDB-X集羣已經恢復完成。

PolarDB-X集羣已經恢復完成後,按Ctrl+C鍵,退出查看PolarDB-X集羣創建狀態。

6. 連接PolarDB-X集羣,驗證數據。

6.1 執行如下命令,查看PolarDB-X集羣登錄密碼。

kubectl get secret polardb-x-restore -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "

返回結果如下,您可以查看到PolarDB-X集羣登錄密碼。

6.2 執行如下命令,將PolarDB-X集羣端口轉發到3306端口。

說明:使用MySQL Client方式登錄通過k8s部署的PolarDB-X集羣前,您需要進行獲取PolarDB-X集羣登錄密碼和端口轉發。

kubectl port-forward svc/polardb-x-restore 3306

6.3 在實驗頁面,單擊右上角的+圖標,創建新的終端三。

6.4 在終端三種,執行如下命令,連接PolarDB-X集羣。

說明:

  • 您需要將<PolarDB-X集羣登錄密碼>替換爲實際獲取到的PolarDB-X集羣登錄密碼。
  • 如遇到mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0報錯,請您稍等一分鐘,重新轉發端口並連接PolarDB-X集羣即可。
mysql -h127.0.0.1 -P3306 -upolardbx_root -p<PolarDB-X集羣登錄密碼>

6.5 執行如下SQL 驗證數據,確認所有賬戶的餘額總和仍是1000。

use transfer_test; select sum(balance) from accounts;

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章