最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Docker版Percona Xtrabackup備份恢復(fù)MySQL8.0.x方式

 更新時間:2026年02月11日 09:55:02   作者:小時候的陽光  
本文詳細(xì)介紹了如何在Linux系統(tǒng)Docker環(huán)境中使用Docker版PerconaXtrabackup進(jìn)行MySQL數(shù)據(jù)庫的全量備份、全量壓縮備份和增量備份,并提供了詳細(xì)的命令操作步驟

記錄一下常用的Docker版Percona Xtrabackup備份恢復(fù)命令

場景說明

  • Linux系統(tǒng)
  • Docker環(huán)境
  • 要備份的目標(biāo)數(shù)據(jù)庫 MySQL 8.0.x (x的值一般 22 ~ 44)
  • 使用Percona Xtrabackup的docker鏡像版本是 8.0.35-34.1,該版本可以最高至8.0.44
  • 要備份的目標(biāo)數(shù)據(jù)庫和Percona Xtrabackup的容器在同一個物理服務(wù)器上

為什么要使用docker版本的Xtrabackup ? 注意是考慮Linux版本不一樣對應(yīng)的Xtrabackup程序版本也不一樣,為了操作運維一致性/便捷性因此選用Docker版本的Xtrabackup。

先決條件

需要在目標(biāo)數(shù)據(jù)庫(準(zhǔn)備要被備份的數(shù)據(jù)庫)創(chuàng)建用于備份數(shù)據(jù)讀取的賬號 xtrabackup

 CREATE USER 'xtrabackup'@'%' IDENTIFIED WITH mysql_native_password BY 'yourbackpassword';
 
 GRANT SELECT, RELOAD, PROCESS, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `xtrabackup`@`%`;

 GRANT BACKUP_ADMIN ON *.* TO `xtrabackup`@`%`;
 
 FLUSH PRIVILEGES;

一、全量備份與恢復(fù)

只全量備份,適合業(yè)務(wù)量比較小的業(yè)務(wù)場景

1.1 創(chuàng)建一個全量備份并且立刻 prepare

prepare目的是使備份可用于恢復(fù)

docker run --name pxb -u root --rm \
  --volumes-from mysql8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --backup \
      --datadir=/var/lib/mysql/ \
      --target-dir=/backup/full_backup \
	  --host=172.17.0.1 \
	  --port=3309 \
      --user=xtrabackup \
      --password=yourbackpassword;
    
    xtrabackup --prepare \
      --target-dir=/backup/full_backup
  "

要點說明:

  • –volumes-from mysql8: 將名為 mysql8 的容器的所有卷掛載到當(dāng)前容器中。這意味著 pxb 容器可以訪問 mysql8 容器的數(shù)據(jù)目錄
  • -v /data/apps/xtrabackup/backup:/backup: 將宿主機(運行 Docker 的機器)上的 /data/apps/xtrabackup/backup 目錄掛載到容器內(nèi)的 /backup 目錄。這是備份文件將存儲的位置。
  • –datadir=/var/lib/mysql/: 指定目標(biāo) MySQL 數(shù)據(jù)目錄在容器內(nèi)的路徑。
  • –target-dir=/backup/full_backup: 指定備份文件將存儲在容器內(nèi)的 /backup/full_backup 目錄
  • xtrabackup --prepare …: 這是在備份完成后執(zhí)行準(zhǔn)備操作的命令
  • –host post user password 是要被備份的目標(biāo)數(shù)據(jù)庫的信息

執(zhí)行完成后在 /data/apps/xtrabackup/backup/full_backup 查詢?nèi)缦聜浞菪畔ⅲ?/p>

drwxr-xr-x 7 root root       4096 12月  1 16:04  ./
drwxr-xr-x 7 root root       4096 12月  1 17:43  ../
drwxr-x--- 2 root root      12288 12月  1 16:04 'api@002drcms@002dfactory@002dprod'/
drwxr-x--- 2 root root       4096 12月  1 16:04 'api@002drcms@002dheadoffice@002dprod'/
-rw-r--r-- 1 root root        448 12月  1 16:04  backup-my.cnf
-rw-r--r-- 1 root root       7051 12月  1 16:04  ib_buffer_pool
-rw-r--r-- 1 root root 1073741824 12月  1 16:04  ibdata1
drwxr-x--- 2 root root       4096 12月  1 16:04  mysql/
-rw-r--r-- 1 root root        196 12月  1 16:04  mysql-bin.000782
-rw-r--r-- 1 root root         19 12月  1 16:04  mysql-bin.index
-rw-r--r-- 1 root root   33554432 12月  1 16:04  mysql.ibd
drwxr-x--- 2 root root       4096 12月  1 16:04  performance_schema/
drwxr-x--- 2 root root       4096 12月  1 16:04  sys/
-rw-r--r-- 1 root root   37748736 12月  1 16:04  undo_001
-rw-r--r-- 1 root root  117440512 12月  1 16:04  undo_002
-rw-r--r-- 1 root root         70 12月  1 16:04  xtrabackup_binlog_info
-rw-r----- 1 root root        146 12月  1 15:06  xtrabackup_checkpoints
-rw-r--r-- 1 root root        654 12月  1 16:04  xtrabackup_info
-rw-r--r-- 1 root root     128512 12月  1 16:04  xtrabackup_logfile
-rw-r--r-- 1 root root         39 12月  1 16:04  xtrabackup_tablespaces

1.2 使用全量備份恢復(fù)操作

假設(shè)之前你已經(jīng)做完了上面的備份操作,現(xiàn)在開始恢復(fù)操作,就在原來的物理服務(wù)器上!

  • 【步驟1】

創(chuàng)建一個新的mysql容器恢復(fù)到一個新創(chuàng)建的目錄下,假設(shè)準(zhǔn)備要做恢復(fù)容器的MySQL目錄地址如下:

/data/apps/xtrabackup/mysqlrecover/conf/my.cnf
/data/apps/xtrabackup/mysqlrecover/files
/data/apps/xtrabackup/mysqlrecover/data
 docker run -u root \
  --cap-add=SYS_NICE \
  --network=host \
  --restart=always \
  --name mysqlrecover8 \
  -v /data/apps/xtrabackup/mysqlrecover/conf/my.cnf:/etc/mysql/my.cnf \
  -v /data/apps/xtrabackup/mysqlrecover/files:/var/lib/mysql-files \
  -v /data/apps/xtrabackup/mysqlrecover/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=yourbackpassword \
  -d mysql:8.0.22

記得將原來的my.cnf 復(fù)制到 /data/apps/xtrabackup/mysqlrecover/conf/my.cnf 記得端口修改 如果不修改端口則需要確認(rèn)原來MySQL服務(wù)已經(jīng)停止!

這里不建議在原來的目標(biāo)數(shù)據(jù)庫目錄下操作,以便分析數(shù)據(jù)庫損壞的原因。

  • 【步驟2】 暫停 mysqlrecover8
docker stop  mysqlrecover8
  • 【步驟3】 清空 mysqlrecover8 數(shù)據(jù)目錄
docker run \
  --volumes-from mysqlrecover8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --rm \
  --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    rm -rf /var/lib/mysql/*
  "

這里一定要使用上面的刪除方式,確保容器內(nèi)mysql數(shù)據(jù)目錄是/var/lib/mysql/

  • 【步驟4】 Restore backup
docker run \
  --volumes-from mysqlrecover8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --rm \
  --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --copy-back \
      --datadir=/var/lib/mysql/ \
      --target-dir=/backup/full_backup
  "

**要點說明:**切記不要使用copy命令復(fù)制備份文件,一定使用 xtrabackup --copy-back命令。

  • 【步驟5】 Change the owner of the files in mysqlrecover8 from root to mysql
docker run \
  --volumes-from mysqlrecover8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --rm \
  --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    chown -R mysql:mysql /var/lib/mysql/
  "
  • 【步驟6】 重新啟動 mysqlrecover8
docker start  mysqlrecover8

然后客戶端連接測試一下,到此全量備份和恢復(fù)測試完畢!

二、全量壓縮備份與恢復(fù)

這種方式同前面的操作,只不過暫時不要prepare。

【步驟1】 創(chuàng)建一個全量備份并且壓縮

docker run --name pxb -u root --rm \
  --volumes-from mysql8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --backup --compress --compress-threads=4 \
      --datadir=/var/lib/mysql/ \
      --target-dir=/backup/full_backup \
	  --host=172.17.0.1 \
	  --port=3309 \
      --user=xtrabackup \
      --password=yourbackpassword
  "

【步驟2】 解壓縮全量備份 + 清理壓縮的文件

docker run --name pxb -u root --rm \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --parallel=4 --remove-original --decompress \
      --target-dir=/backup/full_backup
  "

【步驟3】 prepare,使備份可用于恢復(fù)

docker run --name pxb -u root --rm \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --prepare \
      --target-dir=/backup/full_backup
  "

【步驟4】恢復(fù)操作

參考上面 1.2 使用全量備份恢復(fù)操作 章節(jié)

三、增量備份與恢復(fù)

一次全量備份多次增量備份,可以1小時一次增量也可以一天一次備份,每隔7天重新進(jìn)行全量備份。

假設(shè)用于存儲全量和增量的文件目錄如下:

/data/apps/xtrabackup/backup/full_backup
/data/apps/xtrabackup/backup/inc1
/data/apps/xtrabackup/backup/inc2
/data/apps/xtrabackup/backup/inc3
  • 【步驟1】 創(chuàng)建一個全量備份
docker run --name pxb1 -u root --rm \
  --volumes-from mysql8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --backup \
      --datadir=/var/lib/mysql/ \
      --target-dir=/backup/full_backup \
	  --host=172.17.0.1 \
	  --port=3309 \
      --user=xtrabackup \
      --password=yourbackpassword
  "

**要點說明:**切記不要附帶 xtrabackup --prepare命令,因為后面要基于這個全量備份做增量備份!

  • 【步驟2】 創(chuàng)建第一個增量備份
docker run --name pxb2 -u root --rm \
  --volumes-from mysql8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --backup \
      --datadir=/var/lib/mysql/ \
	  --target-dir=/backup/inc1 \
      --incremental-basedir=/backup/full_backup \
	  --host=172.17.0.1 \
	  --port=3309 \
      --user=xtrabackup \
      --password=yourbackpassword
  "

注意查看 --target-dir 和 --incremental-basedir 參數(shù)!

  • 【步驟2】 創(chuàng)建第二個增量備份
docker run --name pxb2 -u root --rm \
  --volumes-from mysql8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --backup \
      --datadir=/var/lib/mysql/ \
	  --target-dir=/backup/inc2 \
      --incremental-basedir=/backup/inc1 \
	  --host=172.17.0.1 \
	  --port=3309 \
      --user=xtrabackup \
      --password=yourbackpassword
  "

注意查看 --target-dir 和 --incremental-basedir 參數(shù)!

  • 【步驟3】 創(chuàng)建第三個增量備份
docker run --name pxb3 -u root --rm \
  --volumes-from mysql8 \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --backup \
      --datadir=/var/lib/mysql/ \
	  --target-dir=/backup/inc3 \
      --incremental-basedir=/backup/inc2 \
	  --host=172.17.0.1 \
	  --port=3309 \
      --user=xtrabackup \
      --password=yourbackpassword
  "

注意查看 --target-dir 和 --incremental-basedir 參數(shù)!

  • 【步驟4】 prepare全量備份
 docker run --name pxb4 -u root --rm \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --prepare --apply-log-only \
      --target-dir=/backup/full_backup
  "

注意查看 --target-dir 和 是否攜帶 --apply-log-only 參數(shù)!

  • 【步驟5】 prepare 增量inc1
docker run --name pxb5 -u root --rm \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --prepare --apply-log-only \
	  --target-dir=/backup/full_backup \
      --incremental-basedir=/backup/inc1
  "

注意查看 --target-dir 和 --incremental-basedir 和 是否攜帶 --apply-log-only 參數(shù)!

  • 【步驟6】 prepare 增量inc2
docker run --name pxb6 -u root --rm \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --prepare --apply-log-only \
	  --target-dir=/backup/full_backup \
      --incremental-basedir=/backup/inc2
  "

注意查看 --target-dir 和 --incremental-basedir 和 是否攜帶 --apply-log-only 參數(shù)!

  • 【步驟7】 prepare 增量最后一個inc3
docker run --name pxb7 -u root --rm \
  -v /data/apps/xtrabackup/backup:/backup \
  -it --user root \
  percona/percona-xtrabackup:8.0.35-34.1 \
  /bin/bash -c "
    xtrabackup --prepare \
	  --target-dir=/backup/full_backup \
      --incremental-basedir=/backup/inc3
  "

注意查看 --target-dir 和 --incremental-basedir 和 是否攜帶 --apply-log-only 參數(shù)!,最后一次不要–apply-log-only參數(shù)!

–apply-log-only 應(yīng)該在合并增量備份時使用,除了最后一個增量備份。這就是為什么前一行(指合并最后一個增量備份之前的操作)不包含 --apply-log-only 選項。即使在最后一步使用了 --apply-log-only,備份仍然會保持一致性,但在那種情況下,服務(wù)器將執(zhí)行回滾階段。

簡單來說:

(1)在合并除了最后一個增量備份時,你需要使用 --apply-log-only 選項。

(2)合并最后一個增量備份時,不要使用 --apply-log-only。

(3)如果你在合并最后一個增量備份時也使用了 --apply-log-only,備份仍然是有效的,但數(shù)據(jù)庫在恢復(fù)時會執(zhí)行一個額外的回滾操作。

  • 【步驟8】恢復(fù)操作

參考上面 1.2 使用全量備份恢復(fù)操作 章節(jié)

參考官方文檔:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker網(wǎng)絡(luò)代理設(shè)置詳解

    Docker網(wǎng)絡(luò)代理設(shè)置詳解

    在一些實驗室環(huán)境,服務(wù)器沒有直接連接外網(wǎng)的權(quán)限,需要通過網(wǎng)絡(luò)代理。本篇文章主要介紹了Docker網(wǎng)絡(luò)代理設(shè)置詳解,有興趣的可以了解一下。
    2017-02-02
  • docker搭建CMS點播系統(tǒng)帶播放器功能

    docker搭建CMS點播系統(tǒng)帶播放器功能

    熟悉docker的童鞋都知道,安裝是非常的便利的,也可以在線體驗的,今天通過本文給大家介紹docker搭建CMS點播系統(tǒng)帶播放器功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Docker容器應(yīng)用日志查看方法

    Docker容器應(yīng)用日志查看方法

    今天小編就為大家分享一篇關(guān)于Docker容器應(yīng)用日志查看方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • docker容器直接退出如何進(jìn)入容器調(diào)試模式

    docker容器直接退出如何進(jìn)入容器調(diào)試模式

    這篇文章主要介紹了docker容器直接退出,如何進(jìn)入容器調(diào)試,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • docker網(wǎng)絡(luò),docker-compose?network問題

    docker網(wǎng)絡(luò),docker-compose?network問題

    這篇文章主要介紹了docker網(wǎng)絡(luò),docker-compose?network問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker 默認(rèn)bridge網(wǎng)絡(luò)中配置DNS的方法

    Docker 默認(rèn)bridge網(wǎng)絡(luò)中配置DNS的方法

    這篇文章主要介紹了Docker 默認(rèn)bridge網(wǎng)絡(luò)中配置DNS的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • docker通過sbom獲取組件版本和漏洞編號的方法

    docker通過sbom獲取組件版本和漏洞編號的方法

    本文主要介紹了docker通過sbom獲取組件版本和漏洞編號的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • docker無法通過宿主機IP訪問容器內(nèi)服務(wù)的問題解決

    docker無法通過宿主機IP訪問容器內(nèi)服務(wù)的問題解決

    在宿主機上宿主機IP無法訪問容器內(nèi)的7861端口服務(wù),但通過localhost可以訪問,下面就來詳細(xì)的介紹一下該問題的解決,具有一定的參考價值,感興趣的可以了解一下
    2026-04-04
  • docker?compose運行微服務(wù)項目的方法

    docker?compose運行微服務(wù)項目的方法

    這篇文章主要介紹了docker?compose運行微服務(wù)項目?,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Docker 鏡像分層機制的深度實踐?

    Docker 鏡像分層機制的深度實踐?

    本文主要介紹了Docker 鏡像分層機制的深度實踐?,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05

最新評論

灌阳县| 明溪县| 三河市| 凤庆县| 陵川县| 全椒县| 高台县| 馆陶县| 眉山市| 牙克石市| 兰州市| 三门峡市| 塔城市| 宁河县| 古交市| 明溪县| 平舆县| 鹰潭市| 加查县| 赤峰市| 芷江| 阳泉市| 安阳县| 杂多县| 阿城市| 随州市| 西乌珠穆沁旗| 临泉县| 稷山县| 陇南市| 苍山县| 通化县| 萨迦县| 如皋市| 亚东县| 富锦市| 兴仁县| 阜南县| 西安市| 鹤山市| 大理市|