★CentOS:MySQL數據備份

一、cp?命令備份

特點:

  • 優點:備份恢復數據快:直接復制文件,無需進行數據轉換和復雜的處理,因此備份恢復速度非常快
  • 缺點:需要停止數據庫服務,靈活性差,占用空間大,可移植性差

使用:

停止數據庫

創建備份目錄:mkdir -p /usr/local/bin/mysql/data_backup_a

備份:

????????cp -a /usr/local/bin/mysql/data/* /usr/local/bin/mysql/data_backup_a/

恢復:

? ? ? ? 先備份:mv /usr/local/bin/mysql/data/ /usr/local/bin/mysql/data_backup_1

? ? ? ? 再恢復:cp -a /usr/local/bin/mysql/data_backup_a/* /usr/local/bin/mysql/data/

注:保證所有目錄都存在(不存在就創建 mkdir -p )

二、mysqldump全量備份

特點:

優點:備份文件是 SQL 語句,可以直接查看和編輯。支持熱備份,可以對正在運行的數據庫進行備份,而無需停止服務。跨平臺,易恢復,可壓縮

缺點:備份速度較慢:對于大型數據庫,備份過程可能需要較長時間;恢復速度較慢:恢復時需要逐條執行 SQL 語句,速度可能比直接復制文件慢;數據一致性問題: 如果在備份過程中有數據寫入,可能導致備份數據不一致。未壓縮的 SQL 文件可能占用較多存儲空間。備份期間可能影響性能。

使用:

注:可以備份所有庫、單個庫、某張表、壓縮,太多了這里以單個庫為例(如果是docker,為容器中目錄)

備份:

mysqldump -u root -p?--single-transaction --flush-logs --source-data=2 --set-gtid-purged=OFF xiaodu > /usr/local/bin/mysql/backup/database_name_A.sql

參數說明:

  • --source-data=2:在備份文件中記錄二進制日志(binlog)的位置信息。這個參數在主從復制環境中非常有用,因為它允許從庫在恢復備份后,從主庫的正確位置開始復制

  • --set-gtid-purged=OFF:GTID(Global Transaction Identifiers)是 MySQL 中用于標識事務的全局唯一標識符。主從復制

  • --single-transaction確保備份時不會阻塞事務;

  • --flush-logs會刷新binlog,生成新的binlog文件,方便后續的增量備份;

定期刷新binlog文件,生成新的binlog文件:mysqladmin flush-logs -u root -p

新的

恢復:

mysql -u root -p xiaodu_A?< /usr/local/bin/mysql/backup/database_name_A.sql

????????

三、mysqlbinlog增量備份

注:mysqlbinlog工具是個問題,Alpine Linux系統沒有mysqlbinlog工具,但是可以使用debian版本的MySQL鏡像文件

MySQL 的二進制日志工具,主要用于解析和處理 MySQL 的二進制日志文件(binlog)。雖然它本身不是直接用于備份的工具,但可以通過結合二進制日志實現增量備份和恢復。

特點:

優點:增量備份: 可以實現基于時間點的增量備份,僅備份自上次備份以來的更改。 節省存儲空間,因為不需要每次都備份整個數據庫。數據完整性: 二進制日志記錄了所有數據更改操作,可以確保數據的完整性和一致性。恢復靈活性: 可以恢復到任意時間點,支持細粒度的恢復操作。支持主從復制: 二進制日志是主從復制的基礎,使用 mysqlbinlog 可以更好地管理復制過程中的數據同步。

缺點:復雜性較高: 需要對二進制日志有較深入的了解,操作相對復雜。依賴二進制日志: 必須啟用二進制日志,并且需要正確配置日志文件的存儲和管理。 備份速度較慢: 二進制日志文件可能較大,解析和備份過程可能需要較長時間。 恢復速度較慢: 恢復時需要逐條應用日志中的更改,速度可能比直接復制文件慢。 對磁盤 I/O 影響大: 在解析和應用日志文件時,可能會對磁盤 I/O 產生較大壓力

使用:(mysqldump+mysqlbinlog)

Spring Boot 應用數據庫用戶,權限越小越安全。用 root 就像把銀行金庫鑰匙交給前臺。

-- 創建用戶
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';

-- 授予所需權限(示例:只對某個庫有讀寫權限)
GRANT SELECT, INSERT, UPDATE, DELETE ON your_app_db.* TO 'app_user'@'%';

-- 刷新權限
FLUSH PRIVILEGES;

mysqlbinlog目錄:/

操作:

場景:8點全量備份,9點修改A表數據,10點修改B表數據,11點整誤刪B表,12:30分才發現;該如何還原數據呢

前提是:你現在手里有一個事故前全量備份過的sql文件

第一步?備份:立即停止寫入 & 保存現場(最好是k)

docker exec my-mysql-8 mysql -uroot -proot -e "SET GLOBAL read_only = 1;FLUSH TABLES WITH READ LOCK;"
# 2) 立即全量拷走當前數據和 binlog
docker exec mysql-8 cp -a /var/lib/mysql /backup/mysql_$(date +%Y%m%d_%H%M)

查看read_only?是否為1

SHOW GLOBAL VARIABLES LIKE 'read_only';
SELECT @@GLOBAL.read_only;

第二步:MySQL binlog 事件的可讀文本轉儲(也就是將mysql-bin.000004變為讀得懂的事件文本)

找到誤刪事件在 binlog 里的“坐標”

mysqlbinlog --base64-output=decode-rows -v --start-datetime="2025-08-17 10:00:00" --stop-datetime="2025-08-17 10:25:00" /var/lib/mysql/mysql-bin.000004 > /usr/local/bin/mysql/backup/around02.sql

生成“跳過誤刪”的兩段 binlog

# 誤刪之前
mysqlbinlog --start-position=197 --stop-position=3956 --database=xiaodu --base64-output=decode-rows /var/lib/mysql/mysql-bin.000004 | grep -v -E '(^USE `alipay_config`|^DROP TABLE `alipay_config`)' > /usr/local/bin/mysql/backup/part1_before_drop.sql

# 誤刪之后

mysqlbinlog --start-position=4098 --stop-datetime="2025-8-17 10:45:00" --database=xiaodu --base64-output=decode-rows /var/lib/mysql/mysql-bin.000004 | grep -v -E '(^USE `alipay_config`|^DROP TABLE `alipay_config`)' > /usr/local/bin/mysql/backup/part2_after_drop.sql

注意:-E '(^USE `xiaodu`|^DROP TABLE `xiaodu`)' 這個正則排除掉刪除表或者庫的語句,需自行修改;將這段執行的SQL語句是為了不讓刪除語句再次執行(適當選擇是否執行)

# 然后使用 binlog2sql 將事件轉為可執行的SQL語句

首先宿主機上安裝?binlog2sql 工具

也可以下好了再放進來:git clone https://github.com/danfengcao/binlog2sql.git
pip install -r binlog2sql/requirements.txt

可能還需要另外升級:

  • 卸載:pip3 uninstall PyMySQL -y
  • 安裝:pip3 install PyMySQL==0.9.3
  • 安裝:pip3 install --upgrade mysql-replication
  • 安裝:pip3 install --upgrade cryptography
  • 驗證安裝:python3 -c "from pymysqlreplication import BinLogStreamReader; print('OK')"

最后執行:python3 /usr/local/bin/mysql/binlog2sql/binlog2sql/binlog2sql.py -h127.0.0.1 -P13306 -uroot -p'root' -d xiaodu -t sys_dict --start-file='mysql-bin.000004' --start-pos=197 --stop-pos=3956 > /usr/local/bin/mysql/backup/restore_sys_dict.sql

# 還原:

mysql -h127.0.0.1 -P13306 -uroot -p'root' < /usr/local/bin/mysql/backup/restore_sys_dict.sql

mysql -u root -p xiaodu < /usr/local/bin/mysql/backup/restore_sys_dict.sql

mysql -h127.0.0.1 -P13306 -uroot -p'root' xiaodu -v -v -v < /usr/local/bin/mysql/backup/restore_sys_dict.sql 2>&1 | tee /usr/local/bin/mysql/backup/restore.log

  • -v -v -v:讓 MySQL 把每一條語句都回顯出來。

  • 2>&1:把錯誤信息也合并到標準輸出。

  • tee restore.log:同時在屏幕和日志文件里保留一份。


復制bin文件:mysqlbinlog /var/lib/mysql/mysql-bin.000001 > /usr/local/bin/mysql/backup/mysql-bin.000001.sql

# 新建一個mysql容器,以免誤刪或者對現場數據的再次污染(過程略過)

# 選1、恢復:重放原始 binlog(最簡單,會把所有事件重放)

mysqlbinlog --start-position=197 --stop-position=3956 /var/lib/mysql/mysql-bin.000004 | mysql -u root -p xiaodu

  • 優點:一條命令搞定。

  • 缺點:會把 197–3956 之間 所有庫、所有表 的操作都重放,不會只針對 xiaodu

# 選2、恢復:執行全量還原

mysql -u root -p xiaodu_A?< /usr/local/bin/mysql/backup/database_name_A.sql

# 恢復:節點恢復

mysql -u root -p xiaodu < /usr/local/bin/mysql/backup/part1_before_drop.sql

mysqlbinlog --start-position=4691 --stop-position=1825 /var/lib/mysql/mysql-bin.000005 | mysql -u root -p

mysqlbinlog --start-position=214 /path/to/mysql-bin.000008 | mysql -u root -p
mysqlbinlog /path/to/mysql-bin.000009 | mysql -u root -p
mysqlbinlog /path/to/mysql-bin.000010 | mysql -u root -p
mysqlbinlog /path/to/mysql-bin.000011 | mysql -u root -p

按時間回復:

mysqlbinlog --stop-datetime="2025-08-16 12:00:00" /var/lib/mysql/mysql-bin.000004 | mysql -u root -p

  • mysqldump:用于全量備份,生成完整的數據庫備份文件。

  • mysqlbinlog:用于增量備份,記錄自上次全量備份以來的更改,支持基于時間點的恢復。

從 MySQL 8.4 開始,SHOW MASTER STATUS 已被棄用,取而代之的是 SHOW BINARY LOG STATUS。(MySQL中執行)

# MySQL 8.0 及以下版本:
SHOW MASTER STATUS;
# MySQL 8.4 及以上版本:
SHOW BINARY LOG STATUS;
SHOW BINARY LOGS;

四、Xtrabackup

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93393.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93393.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python代碼規范與靜態檢查(ruff/black/mypy + pyproject.toml + Makefile)自動化工具鏈介紹

文章目錄**1. 核心工具的作用****(1) black&#xff1a;代碼格式化工具****(2) ruff&#xff1a;代碼質量檢查工具****(3) mypy&#xff1a;靜態類型檢查工具****2. pyproject.toml&#xff1a;統一配置中心****示例配置**&#xff08;pyproject.toml&#xff09;&#xff1a;*…

軟件需求管理過程詳解

需求管理過程需求管理是軟件工程和系統開發中的核心過程&#xff0c;它確保項目始終圍繞正確、穩定且可追溯的需求進行。在復雜系統開發中&#xff0c;需求往往動態變化&#xff0c;需求管理通過系統化的方法控制變更、維護版本、建立追溯關系&#xff0c;從而降低項目風險、保…

MySQL性能優化實戰指南:從入門到精通的完整優化體系

MySQL性能優化實戰指南&#xff1a;從入門到精通的完整優化體系&#x1f680; 前言&#xff1a;在當今數據驅動的時代&#xff0c;MySQL作為世界上最流行的開源關系型數據庫&#xff0c;其性能優化能力直接決定了應用系統的響應速度和用戶體驗。本文將從多個維度深入探討MySQL優…

KingbaseES主備讀寫分離集群安裝教程

首先我們先要找數據庫集群安裝軟件和腳本。這里我事先安裝一臺單機。 [rootlocalhost zip]# mkdir -p /home/kingbase/software [rootlocalhost zip]# scp -r * /home/kingbase/software/ #安裝軟件和腳本在單機版本的/opt/Kingbase/ES/V9/ClientTools/guitools/DeployTools/z…

electron程序適配loongArch64

一、原始項目 1.原始程序適配arm&#xff0c;x86國產linux設備;新增需求適配loongArch64麒麟v10sp1。 2.原始devDependencies "devDependencies": {"electron": "^17.2.0","electron-builder": "^23.0.3",}二、可能遇到的問…

窗口系統(windowing system)的架構思考

我想做一個通用窗口系統&#xff0c;窗口、控件等&#xff0c;一切都抽象成樹形結構的層疊矩形塊&#xff0c;可支持半透明、模糊等混合選項&#xff0c;那么每個窗口是不是需要一塊存儲區&#xff1f;我之前的代碼為了計算模糊&#xff0c;還不止一塊&#xff0c;要三塊。那么…

極簡工具箱:安卓工具箱合集

軟件介紹 極簡工具箱是一個安卓工具箱合集軟件&#xff1b;軟件支持安卓。 它支持將近 400 個實用功能&#xff0c;支持將近 40 款單機游戲&#xff0c;提供 140 多個實用網站導航&#xff0c;包括電子書導航、學習導航、設計導航、產品經理導航、大數據導航、文檔格式轉換、…

TOGAF八步一法筆記2

業務需求和驗收標準一旦方向確定&#xff0c;接下來的關鍵就是&#xff1a;創建業務需求、明確驗收標準當“預備階段”完成&#xff0c;能力愿景和范圍被管理層確認后&#xff0c;我們正式進入能力建設的“實施軌道”。而這個軌道的起點&#xff0c;是兩個核心動作&#xff1a;…

各種讀取csv文件的工具性能比較

在翻閱calamine作者的quick-csv存儲庫時無意中看到有個10年前的csv讀取比賽, 把比賽選手源程序下載下來測試看到底有多快。 git clone https://bitbucket.org/ewanhiggs/csv-game.git這些源程序只有比賽程序本身&#xff0c;依賴的文件有的在主頁&#xff0c;有的在makefile中…

HTML <iframe> 標簽 如何把html寫入iframe標簽

標簽 如何把html寫入iframe標簽 使用srcdoc屬性 HTML iframe 標簽 參考 定義和用法 <iframe> 標簽定義行內框架&#xff08;內聯框架&#xff09;。 行內框架用于在當前 HTML 文檔中嵌入另一個文檔。

Java Spark例子程序

目錄spark基礎&rdddocsRDDspark架構Spark 對比 hadoop MapReducespark maven依賴Spark的checkpointtransformations、shuffle、actionsreduceByKey的用法groupByKey的用法count / count distinct例子&#xff1a;單詞計數例子&#xff1a;一批人員年齡數據求平均(rdd)例子&…

《代碼重生:楊蓉與62.webp》

《代碼重生&#xff1a;楊蓉與62.webp》2045年&#xff0c;星耀城。雨絲斜織在量子玻璃幕墻上&#xff0c;霓虹倒影如液態代碼流淌。楊蓉坐在“時光回溯實驗室”的終端前&#xff0c;面前懸浮著一行行泛黃的日志——那是從2018年GitHub快照中提取的原始構建記錄。她指尖輕點&am…

軟考 系統架構設計師系列知識點之雜項集萃(123)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(122) 第227題 某公司欲開發一種工業機器人,用來進行汽車零件的裝配。公司的架構師經過分析與討論,給出了該機器人控制軟件的兩種候選架構方案:閉環控制和分層結構。以下對于這兩者候選框架的選擇路由,錯誤的是(…

Sonatype Nexus Repository Manager docker版本安裝

docker 網址 https://hub.docker.com/r/sonatype/nexus3 拉取鏡像 docker pull sonatype/nexus3創建docker docker run -d -p 8081:8081 --name nexus --restart always sonatype/nexus3查看密碼 docker exec nexus cat /nexus-data/admin.password導出docker image 鏡像 …

Java Stream API:讓業務數據處理更優雅

在 Java 業務開發中&#xff0c;我們經常需要對集合數據進行**篩選&#xff08;filter&#xff09;、轉換&#xff08;map&#xff09;、聚合&#xff08;collect&#xff09;**等操作。比如從一批結果中過濾出符合條件的記錄&#xff0c;就像這樣&#xff1a; 假數據&#xf…

Win11和Win10共享打印機提示709用添加Windows憑據來解決的小方法

我們在使用共享打印機打印文件時或者添加共享打印機的時候&#xff0c;遇到了系統提示錯誤709的問題&#xff0c;導致打印失敗、共享失敗&#xff0c;如果你現在正好也遇到了這一問題&#xff0c;那么不妨來看看下面吳師傅使用過的這個方法&#xff0c;希望可以能夠幫助大家有效…

【嵌入式STM32】I2C總結

I2C誕生于上世紀80年代初&#xff0c;由飛利浦&#xff08;現在的恩智浦NXP&#xff09;為解決微控制器與外圍芯片之間繁瑣的連接問題而設計。 僅僅兩根線——SCL&#xff08;時鐘線&#xff09;和SDA&#xff08;數據線&#xff09;&#xff0c;就能實現多設備間的雙向通信。 …

WPF 監控CPU、內存性能

本段代碼是一個封裝的用戶控件<UserControl x:Class"YF_Frame.PerformanceMonitor"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.…

Rust學習筆記(四)|結構體與枚舉(面向對象、模式匹配)

本篇文章包含的內容1 結構體1.1 定義和初始化結構體1.2 Tuple Struct1.3 結構體方法&#xff08;Rust 面向對象&#xff09;1.4 關聯函數2 枚舉2.1 定義和使用枚舉2.2 將數據附加到枚舉的變體中2.3 Option 枚舉2.4 模式匹配2.4.1 match語句2.4.2 if let語句1 結構體 1.1 定義和…

C++——分布式

文章目錄一、什么是分布式&#xff1f;核心特點為什么需要分布式&#xff1f;分布式 vs 集中式常見分布式場景挑戰與難點二、 簡述下CAP理論2.1 簡述2.2 詳細三、 簡述下分布式中的2PC2.1 詳細3.2 簡述三 、簡述下Raft協議3.1 詳細3.2 簡述四 grpc框架4.1 RPC&#xff08;Remot…