MySQL-備份與還原

来源:https://www.cnblogs.com/xsuid/archive/2018/08/03/9416593.html
-Advertisement-
Play Games

前言 對於我們運維來說,在mysql資料庫領域,別的不說,最起碼要會兩大技能! 第一大技能:備份與還原 第二大技能:主從非同步 關於這兩大技能我們先來說說第一個 備份與還原 備份:我們按時定點來備份數據,當下數據最值錢,所以我們要確保數據的安全。 平常我們都是7天一大備,三天兩頭一小備,也就是說,一周 ...


 

前言

對於我們運維來說,在mysql資料庫領域,別的不說,最起碼要會兩大技能!

第一大技能:備份與還原

第二大技能:主從非同步

關於這兩大技能我們先來說說第一個

備份與還原

備份:我們按時定點來備份數據,當下數據最值錢,所以我們要確保數據的安全。

平常我們都是7天一大備,三天兩頭一小備,也就是說,一周來一個完全備份,1、2、天來一個增量或差異備份。

確保那天伺服器宕機或誤操作,能恢復過來。

還原:當伺服器負重過量會導致宕機,或有時候我們誤操作,刪除了某張重要的數據表等等,這時候就要用到我們之前備份的數據來恢復。

簡單說下備份的類型,

冷備:讀寫操作均不可進行

溫備:讀操作可執行;但寫操作不可執行

熱備:讀寫操作均可執行

MyISAM:溫備,不支持熱備
InnoDB: 都支持

簡單說下常用的備份工具,

LVM的快照:先加鎖,做快照後解鎖,幾乎熱備;藉助文件系統工具進行備份

mysqldump:邏輯備份工具,適用所有存儲引擎,溫備;支持完全或部分備份;對InnoDB存儲引擎支持熱備,結合binlog的增量備份

xtrabackup:由Percona提供支持對InnoDB做熱備(物理備份)的工具,支持完全備份、增量備份

備註:以上除了xtrabackup,都是基於完整備份包以及二進位日誌來恢複數據庫的,二進位日誌記錄了增刪改語句的操作指令,拿過來重放,

建議:建議二進位日誌和數據文件分開存放 --

1、關閉網路鏈接,只監聽本地埠訪問,(在備份還原的時候用)

skip-networking=1

2、禁止主機名解析,ip地址訪問的時候,禁止反向解析(建議加上)

skip_name_resolve = on

3、每個表單獨使用一個表空間存儲表的數據和索引(建議加上)

innodb_file_per_table = on

4、開啟並指定二進位文件存放位置

log_bin=/...

。。。

準備

1、準備兩台主機,我用.17充當mysql主伺服器,.57來還原用。

2、17主mysql資料庫有以下幾個表

image

3、目錄

/data/mysq/:下存放資料庫數據

/app/logs/:下存放二進位日誌

。。。

實戰

備份階段

1、完全備份

mysqldump -pcentos -A -F --master-data=2 --single-transaction |gzip > /data/all-`date +%F`.sql.gz

備註:

-A:備份全部資料庫

-F:切換二進位日誌

--master-data=2:記錄了基於二進位那個位置備份的,這個點之後是新數據,備份結束點,主從改為1

--single-transaction:保證數據的一致性

2、解壓並查看

gzip -d all-2018-08-03.sql.gz
less all-2018-08-03.sql

image

備註:記住這個文件以及數字,一會還原的時候要用

3、修改students表(新數據和日誌)

1)沒修改前

image

2)加記錄

insert students (name,age)values('gaoda1hao',20);

image

3)查看現在的二進位變化

image

4)假設現在這台mysql伺服器宕機崩潰了,下麵開始還原

。。。

還原階段

上面規劃的是用57這台主機來還原,首先這台主機必須是乾凈的mysql資料庫

1、scp傳送

1)傳送完全備份文件到目標主機

scp all-2018-08-03.sql 192.168.43.57:

2)傳送上面圖中00005文件以及之後的二進位文件到目標主機

scp mysql-bin.000005 192.168.43.57:

2、57主機來還原

註意:還原的時候要禁止除了你之外的所有用戶的訪問。

停止mysql服務,在my.cnf配置文件中可以加上上面說到一項

1)開啟服務前提下並完全備份數據包

mysql < all-2018-08-03.sql

備註:現在只還原到了,備份時的狀態,下麵再次還原備份後到宕機這段時候發生的操作

2)導入二進位日誌

mysqlbinlog  --start-position=385 /root/mysql-bin.000005 > /app/binlog.sql

備註:把00005中從385開始的指令語句導入到一個文件中

mysql < /app/binlog.sql

備註:導入二進位記錄的指令

。。。

驗證

1、看表存在不

image

2、看表數據正不正確

image

OK 還原成功

 

下麵再來演示一個案例-誤刪除表的恢復

比如我們在某天的12點中做了完全備份,在下一次做完全備份中間有一天執行了刪除某張表,刪除後等了幾個小時才發現表刪除了,

在這種場景下,來恢複數據,下麵來模擬下。

模擬順序:完全備份--用戶對錶的數據修改--刪除某張表--未發現用戶繼續對其他表操作--當訪問被刪除的表時發現--

準備工作和上面一樣,下麵進入正題

前幾步和前面一樣

1、完全備份

mysqldump -pcentos -A -F --master-data=2 --single-transaction |gzip > /data/all-`date +%F`.sql.gz

2、模擬誤刪除表前的修改

insert students (name,age)values('gaoda1hao',20);

。。。

備註:這期間加了好多數據,可能二進位文件已經滿了,進行了切換

3、模擬二進位文件的切換

flush logs;
#

接著增加幾條記錄

insert students (name,age)values('gaoda2hao',22);

4、模擬誤刪除數據表

drop table students;

備註:刪除後還麽有發現,接著增加其他表的數據

insert teachers (name,age)values('gaoda3',30);

5、發現問題並及時禁止用戶寫許可權(只能讀)

flush tables with read lock;

備註:現在只能root用戶可以讀寫其他用戶是不能修改數據的

image

。。。

6、乾凈系統還原

1)停止服務

systemctl stop mairadb


2)刪除所有mysql資料庫數據

rm -rf /var/lib/mysql/

3)確保用戶不能訪問伺服器 配置文件加上

skip-networking

4)啟動服務

 

7、還原完全備份

1)解壓完全備份包

gzip -d all-2018-08-03.sql.gz

2)查看解壓的文件確定位置

less all-2018-08-03.sql

image

3)把完整備份傳送到57目標主機還原

mysql <all-2018-08-03.sql

8、還原增量備份

1)合併00004以及之後的二進位日誌文件

mysqlbinlog  --start-position=385 mysql-bin.000004 > /data/binlogs.sql
mysqlbinlog   mysql-bin.000005 >> /data/binlogs.sql
mysqlbinlog   mysql-bin.000006 >> /data/binlogs.sql

2)從合併的二進位日誌文件中找到誤操作的指令刪除或註釋

image

3)scp傳送到57目標主機還原

mysql <binlogs.sql

。。。

驗證

1、刪除的表看看有了沒

image

2、在表刪除後其他的表改的記錄還在不

image

OK

還原成功

歡迎補充--


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

-Advertisement-
Play Games
更多相關文章
  • ubuntu16.04上利用Nginx代理uwsgi處理Flask web應用 1、環境要求 ubuntu16.04 阿裡雲的伺服器 Nginx python2 uwsgi 2、簡單介紹Nginx nginx是一個高性能的http和反向代理的伺服器,Nginx采采用的epoll的機制,而沒有使用se ...
  • 區分類和對象: 類是創建對象的模板。 類和對象: ...
  • 題目來源於牛客網 一、選擇題 Go語言自帶垃圾回收機制。 如果是值傳遞的話子函數對map修改不會影響父函數中的map,如果是地址傳遞則會影響。 go語言編譯器會自動在以標識符、數字字面量、字母字面量、字元串字面量、特定的關鍵字(break、continue、fallthrough和return)、增 ...
  • 今天我們來講講自定義組件和它的構造函數。 在前面的文章里我們已經接觸了好幾個自定組件,這次的示例是一個自定義對話框,他有一個about按鈕,點擊按鈕可以顯示出Qt的信息或者用戶輸入的信息。這是效果圖: 下麵我們就來重點講解自定義組件和它的構造函數吧。 構造函數的聲明 先上代碼: type MyDia ...
  • java中List集合的元素是按照添加順序排序的,我們在實際開發過程中,可能會遇到需要對其內容進行排序的場景,接下來對我遇到的場景所採用的解決方式做個總結。 一、業務場景 管理後臺商戶名稱下拉列表,需平臺商戶名稱按照首字母A-Z順序進行排序展示。 二、解決思路 由於頁面展示的數據為後臺查詢所得的Li ...
  • 基本數據類型 | 類型 | 關鍵字 | 描述 | 所占位元組數 | 最大值 | 最小值 | | | | | | | | | 布爾型 | bool | 存儲值 true 或 false | bool | 1 | 0 | | 字元型 | char | 通常是一個八位位元組(一個字元)。這是一個整數類型 | ...
  • selenium 是一個用於Web應用程式測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 環境配置: 1、Windows系統 ...
  • Linux網上下載軟體一般只會有.sh結尾執行程式。並不會像商店下載一樣自動創建桌面圖標。此時需要自行進行編輯。 以IDEA為例 我將idea放入了/opt/IDEA下 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...