第二十三天:mysql數據備份及還原

来源:https://www.cnblogs.com/dujy/p/18014349
-Advertisement-
Play Games

Linux 命令基礎 命令基礎格式 command [-options] [parameter] command:命令本身 -options:[可選,非必填]命令的一些選項,可以通過選項控制命令的行為細節 parameter:[可選,非必填]命令的參數,多數用於命令的指向目標等 示例: ls -l ...


一、備份類型

完全備份,部分備份   完全備份:整個數據集   部分備份:只備份數據子集,如部分庫或表 完全備份、增量備份、差異備份   增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據,備份較快,還原複雜   差異備份:僅備份最近一次完全備份以來變化的數據,備份較慢,還原簡單 冷、溫、熱備份   冷備:讀、寫操作均不可進行,資料庫停止服務   溫備:讀操作可執行;但寫操作不可執行   熱備:讀、寫操作均可執行 物理和邏輯備份   物理備份:直接複製數據文件進行備份,與存儲引擎有關,占用較多的空間,速度快   邏輯備份:從資料庫中"導出"數據另存而進行的備份,與存儲引擎無關,占用空間少,速度慢,可能丟失精度 1、備份什麼   數據   二進位日誌、InnoDB的事務日誌   用戶帳號,許可權設置,程式代碼(存儲過程、函數、觸發器、事件調度器)   伺服器的配置文件 2、備份工具 cp, tar等複製歸檔工具:物理備份工具,適用所有存儲引擎;只支持冷備;完全和部分備份 LVM的快照:先加讀鎖,做快照後解鎖,幾乎熱備;藉助文件系統工具進行備份 mysqldump:邏輯備份工具,適用所有存儲引擎,對MyISAM存儲引擎進行溫備;支持完全或部 分備份;對InnoDB存儲引擎支持熱備,結合binlog的增量備份 xtrabackup:由Percona提供支持對InnoDB做熱備(物理備份)的工具,支持完全備份、增量備份 MariaDB Backup: 從MariaDB 10.1.26開始集成,基於Percona XtraBackup 2.3.8實現 mysqlbackup:熱備份, MySQL Enterprise Edition 組件 mysqlhotcopy:PERL 語言實現,幾乎冷備,僅適用於MyISAM存儲引擎,使用LOCK TABLES、 FLUSH TABLES和cp或scp來快速備份資料庫   二、mysqldump 備份工具

1、mysqldump 說明

邏輯備份工具: mysqldump, mydumper, phpMyAdmin Schema和數據存儲在一起、巨大的SQL語句、單個巨大的備份文件 mysqldump是MySQL的客戶端命令,通過mysql協議連接至mysql伺服器進行備份 命令格式:
mysqldump [OPTIONS] database [tables]   #支持指定資料庫和指定多表的備份,但資料庫本身定義不備份
mysqldump [OPTIONS] -B DB1 [DB2 DB3...] #支持指定資料庫備份,包含資料庫本身定義也會備份
mysqldump [OPTIONS] -A [OPTIONS]        #備份所有資料庫,包含資料庫本身定義也會備份

2、mysqldump 常見通用選項:

-u, --user=name     User for login if not current user
-p, --password[=name]  Password to use when connecting to server
-A, --all-databases #備份所有資料庫,含create database
-B, --databases db_name…  #指定備份的資料庫,包括create database語句
-E, --events:#備份相關的所有event scheduler
-R, --routines:#備份所有存儲過程和自定義函數
--triggers:#備份表相關觸發器,預設啟用,用--skip-triggers,不備份觸發器
--default-character-set=utf8 #指定字元集
--master-data[=#]:#註意:MySQL8.0.26版以後,此選項變為--source-data
#此選項須啟用二進位日誌
#1:所備份的數據之前加一條記錄為CHANGE MASTER TO語句,非註釋,不指定#,預設為1,適合於主從復
制多機使用
#2:記錄為被註釋的#CHANGE MASTER TO語句,適合於單機使用,適用於備份還原
#此選項會自動關閉--lock-tables功能,自動打開-x | --lock-all-tables功能(除非開啟--
single-transaction)
-F, --flush-logs #備份前滾動日誌,鎖定表完成後,執行flush logs命令,生成新的二進位日誌文件,配合-A 或 -B 選項時,會導致刷新多次資料庫。建議在同一時刻執行轉儲和日誌刷新,可通過和--
single-transaction或-x,--master-data 一起使用實現,此時只刷新一次二進位日誌
--compact        #去掉註釋,適合調試,節約備份占用的空間,生產不使用
-d, --no-data    #只備份表結構,不備份數據,即只備份create table 
-t, --no-create-info #只備份數據,不備份表結構,即不備份create table 
-n,--no-create-db #不備份create database,可被-A或-B覆蓋
--flush-privileges #備份mysql或相關時需要使用
-f, --force       #忽略SQL錯誤,繼續執行
--hex-blob        #使用十六進位符號轉儲二進位列,當有包括BINARY,VARBINARY,BLOB,BIT的數據類型的列時使用,避免亂碼
-q, --quick     #不緩存查詢,直接輸出,加快備份速度

mysqldump的MyISAM存儲引擎相關的備份選項:

MyISAM不支持事務,只能支持溫備;不支持熱備,所以必須先鎖定要備份的庫,而後啟動備份操作
-x,--lock-all-tables #加全局讀鎖,鎖定所有庫的所有表,同時加--single-transaction或--lock-tables選項會關閉此選項功能,註意:數據量大時,可能會導致長時間無法併發訪問資料庫
-l,--lock-tables #對於需要備份的每個資料庫,在啟動備份之前分別鎖定其所有表,預設為on,--skip-lock-tables選項可禁用,對備份MyISAM的多個庫,可能會造成數據不一致
#註:以上選項對InnoDB表一樣生效,實現溫備,但不推薦使用
mysqldump的InnoDB存儲引擎相關的備份選項: InnoDB 存儲引擎支持事務,可以利用事務的相應的隔離級別,實現熱備,也可以實現溫備但不建議用
--single-transaction
#此選項Innodb中推薦使用,不適用MyISAM,此選項會開始備份前,先執行START TRANSACTION指令開啟事務
#此選項通過在單個事務中轉儲所有表來創建一致的快照。 僅適用於存儲在支持多版本控制的存儲引擎中的表(目前只有InnoDB可以); 轉儲不保證與其他存儲引擎保持一致。 在進行單事務轉儲時,要確保有效的轉儲
文件(正確的表內容和二進位日誌位置),沒有其他連接應該使用以下語句:ALTER TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE,此選項和--lock-tables(此選項隱含提交掛起的事務)選
項是相互排斥,備份大型表時,建議將--single-transaction選項和--quick結合一起使用

3、生產環境實戰備份策略

InnoDB建議備份策略
mysqldump -uroot -p123456 -A -F -E -R --triggers --single-transaction --masterdata=2 --flush-privileges --default-character-set=utf8 --hex-blob
>${BACKUP}/fullbak_${BACKUP_TIME}.sql
#新版8.0.26以上
mysqldump -uroot -p123456 -A -F -E -R --triggers --single-transaction --sourcedata=2 --flush-privileges --default-character-set=utf8 --hex-blob
>${BACKUP}/fullbak_${BACKUP_TIME}.sq

4、特定資料庫的備份腳本

[root@centos8 ~]#cat mysql_backup.sh 
#!/bin/bash
TIME=`date +%F_%H-%M-%S`
DIR=/backup
DB=hellodb
PASS=magedu
[ -d $DIR ] || mkdir $DIR
mysqldump -uroot -p "$PASS" -F -E -R --triggers  --single-transaction --masterdata=2 --default-character-set=utf8 -q  -B $DB | gzip > 
${DIR}/${DB}_${TIME}.sql.gz

5、分庫備份並壓縮

 6、分庫備份的實戰腳本

[root@centos8 ~]#cat backup_db.sh 
#!/bin/bash
TIME=`date +%F_%H-%M-%S`
DIR=/backup
PASS=magedu
[ -d "$DIR" ] || mkdir $DIR
for DB in `mysql -uroot -p "$PASS" -e 'show databases' | grep -Ewv 
"^Database|.*schema$"`;do
 mysqldump -F --single-transaction --master-data=2 --default-characterset=utf8 -q -B $DB | gzip >  ${DIR}/${DB}_${TIME}.sql.gz
done

7、利用二進位日誌,還原資料庫最新狀態

#二進位日誌獨立存放
[mysqld]
log-bin=/data/mysql/mysql-bin 
#完全備份,並記錄備份的二進位位置
mysqldump  -uroot -pmagedu -A -F --default-character-set=utf8  --singletransaction --master-data=2 | gzip > /backup/all_`date +%F`.sql.gz
#修改資料庫
insert students (name,age,gender)value('mage',20,'M');
insert students (name,age,gender)value('wang',22,'M');
#損壞資料庫
rm -rf /var/lib/mysql/*
#還原
cd /backup
gzip -d all_2019-11-25.sql.gz
#CentOS 8 需要事先生成資料庫相關文件,CentOS7 不需要執行此步
mysql_install_db  --user=mysql

8、mysqldump 和二進位日誌結合實現差異(增量)備份 

[root@centos8 ~]#mysqldump -uroot -p -A -F --single-transaction --master-data=2 
|gzip > /backup/all-`date +%F`.sql.gz
#觀察上面備份文件中記錄的二進位文件和位置,定期將其之後生成的所有二進位日誌進行複製備份
[root@centos8 ~]#cp /var/lib/mysql/mariadb-bin.000003 /backup #假設mariadbbin.000003是後續生成的二進位日誌
[root@centos8 ~]#mysqlbinlog backup/mariadb-bin.000003 > /backup/inc.sql

 

 

三、xtrabackup 備份工具

1、xtrabackup 工具介紹

Percona 公司 官網:www.percona.com     percona-server     InnoDB --> XtraDB Xtrabackup備份工具   percona提供的mysql資料庫備份工具,惟一開源的能夠對innodb和xtradb資料庫進行熱備的工具   手冊:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html   下載: https://www.percona.com/downloads/  xtrabackup 特點:   備份還原過程快速、可靠   備份過程不會打斷正在執行的事務   能夠基於壓縮等功能節約磁碟空間和流量   自動實現備份檢驗   開源,免費 xtrabackup工具文件組成   Xtrabackup2.2 版之前包括4個可執行文件:     innobackupex: Perl 腳本     xtrabackup: C/C++,編譯的二進位程式     xbcrypt: 加解密     xbstream: 支持併發寫的流文件格式  說明: xtrabackup 是用來備份 InnoDB 表的,不能備份非 InnoDB 表,和 MySQL Server 沒有交互innobackupex 腳本用來備份非 InnoDB 表,同時會調用 xtrabackup 命令來備份 InnoDB 表,還會和MySQL Server 發送命令進行交互,如加全局讀鎖(FTWRL)、獲取位點(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一層封裝實現的 備份過程:

 

備份生成的相關文件 使用innobackupex備份時,其會調用xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和資料庫配置信息相關的文件。這些文件會被保存至一個以時間命名的目錄中,在備份時,innobackupex還會在備份目錄中創建如下文件: xtrabackup_info:文本文件,innobackupex工具執行時的相關信息,包括版本,備份選項,備份時長,備份LSN(log sequence number日誌序列號),BINLOG的位置 xtrabackup_checkpoints:文本文件,備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN範圍信息,每個InnoDB頁(通常為16k大小)都會包含一個日誌序列號LSN。 LSN是整個資料庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的xtrabackup_binlog_info:文本文件,MySQL伺服器當前正在使用的二進位日誌文件及至備份這一刻為止二進位日誌事件的位置,可利用實現基於binlog的恢復 backup-my.cnf:文本文件,備份命令用到的配置選項信息 xtrabackup_logfile:備份生成的二進位日誌文件   2、xtrabackup 安裝 在EPEL源中 
yum install percona-xtrabackup

3、xtrabackup 用法

xtrabackup工具備份和還原,需要三步實現 1. 備份:對資料庫做完全或增量備份 2. 預準備: 還原前,先對備份的數據,整理至一個臨時目錄 3. 還原:將整理好的數據,複製回資料庫目錄中  xtrabackup 選項參考: https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html 備份: 
innobackupex [option] BACKUP-ROOT-DIR

 Prepare預準備:

innobackupex --apply-log [option] BACKUP-DIR
選項說明: 
--apply-log:#一般情況下,在備份完成後,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚
未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。此選項作
用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態
--use-memory:#和--apply-log選項一起使用,當prepare 備份時,做crash recovery分配的記憶體
大小,單位位元組,也可1MB,1M,1G,1GB等,推薦1G
--export:#表示開啟可導出單獨的表之後再導入其他Mysql中
--redo-only:#此選項在prepare base full backup,往其中合併增量備份時候使用,但不包括對最
後一個增量備份的合併
還原: 
innobackupex --copy-back [選項] BACKUP-DIR
innobackupex --move-back [選項] [--defaults-group=GROUP-NAME] BACKUP-DIR
選項說明: 

 還原註意事項:

1. datadir 目錄必須為空。除非指定innobackupex --force-non-empty-directorires選項指定,否則--copy-back選項不會覆蓋 2. 在restore之前,必須shutdown MySQL實例,不能將一個運行中的實例restore到datadir目錄中 3. 由於文件屬性會被保留,大部分情況下需要在啟動實例之前將文件的屬主改為mysql,這些文件將屬於創建備份的用戶, 執行chown -R mysql:mysql /data/mysql,以上需要在用戶調用innobackupex之前完成 

4、利用 xtrabackup 實現完全備份及還原

 5、利用xtrabackup8.0 完全,增量備份及還原MySQL8.0

 

 

 6、xtrabackup單表導出和導入

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述:C#軟體開發中,License扮演著確保軟體合法使用的重要角色。採用RSA非對稱加密方案,服務端生成帶簽名的License,客戶端驗證其有效性,從而實現對軟體的授權與安全保障。 License應用場景: License(許可證)在C#軟體開發中被廣泛應用,以確保軟體在合法授權的環境中運行。常見 ...
  • 概述:MVVM是一種在WPF開發中廣泛應用的設計模式,通過將應用程式分為模型、視圖、和視圖模型,實現瞭解耦、提高可維護性的目標。典型應用示例展示瞭如何通過XAML、ViewModel和數據綁定創建清晰、可測試的用戶界面。 什麼是MVVM? MVVM(Model-View-ViewModel)是一種用 ...
  • 在軟體開發中,應用程式的自動更新功能是一個重要的特性,它能讓用戶在不手動干預的情況下獲取最新的軟體版本。這不僅提高了用戶體驗,還有助於開發者及時修複潛在的問題、增加新功能,並確保軟體的安全性和穩定性。 對於.NET開發者來說,實現自動更新功能並不總是那麼簡單。幸運的是,有一個名為AutoUpdate ...
  • 隨著現代軟體對性能和響應速度的要求越來越高,非同步編程已經成為許多開發者必須掌握的技能。C# 提供了多種實現非同步編程的方式,每種方式都有其特定的適用場景和優缺點。本文將詳細介紹 C# 中實現非同步編程的常用方式,幫助讀者更好地理解並選擇合適的非同步編程方法。 一、Task 和 Task C# 5.0 引入 ...
  • 0.前言 哥們馬上就要被裁了,總得整理一下技術方面的積累,準備開始下一輪的面試和找工作之旅了。。。。 1.概述 通用串列匯流排(USB)是主機和外圍設備之間的一種連接。 從拓撲上來看,是一顆由幾個點對點的連接構建而成的樹。這些連接是連接設備和集線器(hub)的四線電纜(底線、電源線和兩根信號線)。US ...
  • 大家好,我是知微! 雖然現在網上的技術文章非常多,但缺點是知識點太零散。 書籍是經過精心整理和編排的,仍舊是非常優秀的學習資料。下麵一起來看看本文推薦的10本書吧! 《啊哈C語言》 這本書物融合了生動活潑的漫畫、風趣幽默的文字,以淺顯易懂的方式探討編程思維。 特別適合想要掌握C語言基礎的初學者小伙伴 ...
  • 一、準備“武器” 本文是通過虛擬機搭建 OOS 測試環境的,4567是3的前提,武器提取 le73 1、VMWare Workstation 17 Player 2、Windows Server 2016 鏡像(需要 Office Online Server 2017 年 4 月或更高版本) 3、O ...
  • 新版的 Windows 經常會自動檢查更新,然後在某個夜深人靜的晚上幫你自動更新。 對於自動更新,一般的解決方案是直接禁用 Windows 更新服務。這種方式雖然關閉了自動更新,但會影響手動更新。Windows 的設置中可以設置暫停自動更新,但是最長只能設置暫停一周。下麵介紹一種延長暫停自動更新時間 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...