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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...