Linux中的mysql邏輯備份與恢復

一、安裝mysql社區服務

二、數據庫的介紹

三、備份類型和備份工具


一、安裝mysql社區服務

這是小編自己寫的,沒有安裝的去看看

Linux換源以及yum安裝nginx和mysql-CSDN博客

二、數據庫的介紹

2.1?數據庫的組成

數據庫是一堆物理文件的集合,主要包括:

  1. 數據文件 /var/lib/mysql

  2. 配置文件 => /etc/my.cnf

  3. 日志文件(主要是二進制日志文件)

2.2?存儲引擎層

簡單來說,就是數據的存儲方式。在MySQL中,我們可以使用show engines查看當前數據庫版本支持哪些引擎。

常見的數據存儲引擎:InnoDB、MyISAM、NDB等。

MyISAM與InnoDB引擎的區別

  1. MyISAM引擎:

    • 擅長數據的查詢,支持全文索引。

  2. InnoDB引擎:

    • 支持事務處理、行級鎖、支持外鍵。==5.7也是支持全文索引==

2.3?存儲層(數據文件與日志文件 - InnoDB)

存儲引擎的數據文件存儲方式

首先創建一個數據庫:

create database lsh DEFAULT CHARSET=utf8;

MyISAM引擎的文件存儲

mysql> USE lsh;
mysql> CREATE TABLE tb_user(id INT, name CHAR(1)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

InnoDB引擎的文件存儲

mysql> USE lsh;
mysql> CREATE TABLE tb_user(id INT, name CHAR(1)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.4?日志文件

日志類型寫入日志的信息
錯誤日志 (error log)啟動、運行或停止 mysqld 時遇到的問題
通用查詢日志 (general log)服務器收到的所有客戶端連接和語句
二進制日志 (binary log)數據更改語句 (更新、刪除、更改表結構)
慢查詢日志 (slow query log)執行時間超過特定閾值的查詢語句
DDL日志 (元數據日志)由DDL語句執行的元數據操作
二進制日志

作用:

二進制日志記錄數據庫的所有更改操作(DDL/DML/DCL),不包含select或者show這類語句。

場景:

  1. 用于主從復制:在主從復制中,master主服務器將二進制日志中的更改操作發送給slave從服務器,從服務器執行這些更改操作是的和主服務器的更改相同。

  2. 用于數據的恢復:用于數據的恢復操作。

默認binlog日志是關閉的,可以通過修改配置文件完成開啟,如下:

# vim /etc/my.cnf[mysqld]
log-bin=/usr/local/mysql/data/binlog
server-id=1

當我們更改了my.cnf配置文件,一定要記得重啟MySQL服務器。service命令

systemctl restart mysqld

二進制日志比較特殊,需要使用 mysqlbinlog 工具查看,如 mysqlbinlog 二進制日志文件。

mysqlbinlog 【文件名】

三、備份類型和備份工具

3.1 備份和冗余的區別

  • 備份:能夠防止由于機械故障以及人為誤操作帶來的數據丟失,例如將數據庫文件保存在了其它地方。

  • 冗余:數據有多份冗余,但不等于備份,只能防止機械故障帶來的數據丟失,例如主備模式、數據庫集群。

3.2 備份類型

邏輯備份(mysqldump)

  • 備份的是建表、建庫、插入等操作所執行SQL語句(DDL,DML,DCL)。

  • 適用于中小型數據庫,效率相對較低一般。在數據庫正常提供服務的前提下進行,如:mysqldump、mydumper等。

  • 備份實質:就是把要備份的數據導出成.sql或.txt文件

物理備份(tar、cp、xtrabackup)

  • 直接復制數據庫文件

  • 適用于大型數據庫環境,不受存儲引擎的限制,但不能恢復到不同的MySQL版本。

  • 一般是在數據庫徹底關閉或者不能完成正常提供服務的前提下進行的備份;

  • 如:tar、cp、xtrabackup(數據庫可以正常提供服務lvm,snapshot、rsync等)

  • 備份的實質:對數據文件+配置文件+日志文件進行拷貝操作

在線熱備(數據冗余、AB復制、主從復制)

  • MySQL的replication架構,如M-S|M-S-S|M-M-S等

  • 實時在線備份

3.3 備份工具

社區版安裝包中的備份工具

mysqldump(邏輯備份,只能全量備份)

1)企業版和社區版都包含

2)本質上使用SQL語句描述數據庫及數據并導出

3)在MYISAM引|擎上鎖表,Innodb引擎上鎖行

4)數據量很大時不推薦使用

mysql hotcopy(物理備份工具)

1)企業版和社區版都包含

2)perl寫的一個腳本,本質上是使用鎖表語句后再拷貝數據

3)只支持MYISAM數據引擎

企業版安裝包中的備份工具

mysqlbackup

1)在線備份

2)增量備份

3)部分備份

4)在某個特定時間的一致性狀態的備份

第三方備份工具

XtraBackup

Xtrabackup是一個對InnoDB做數據備份的工具,支持寺在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDBHotbackup的一個很好的替代品。

Xtrabackup有兩個主要的工具:xtrabackup、innobackupex

xtrabackup只能備份InnoDB和XtraDB3兩種數據表,不能備份myisam類型的表。

innobackupex是將Xtrabackup進行封裝的per腳本,所以能同時備份處理innodb和myisam的存儲引擎,但在處理myisam時需要加一個讀鎖。

3.3 mysqldump工具(邏輯備份工具)

本質:導出的是sql語句文件

優點:無論是什么存儲引擎,都可以用mysqldump備成sql語句

缺點:速度較慢,導入時可能會出現格式不兼容的突發狀況

無法直接做增量備提供三種級別的備份,表級,庫級和全庫級

mysqldump基本語法

表級別備份
mysqldump [OPTIONS] database [tables] > b.sql
庫級別備份
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
全庫級別備份
mysqldump [OPTIONS] --all-databases [OPTIONS]

準備一些要備份的數據:

-- 創建數據庫
mysql> CREATE DATABASE db_it DEFAULT CHARSET=utf8;-- 使用數據庫
mysql> USE db_it;-- 創建表
CREATE TABLE tb_student (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(20),age TINYINT UNSIGNED DEFAULT 0,gender ENUM('male', 'female'),subject ENUM('ui', 'java', 'yunwei', 'python'),PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入數據
INSERT INTO tb_student VALUES (NULL, '劉備', 33, 'male', 'java'),(NULL, '關羽', 32, 'male', 'yunwei'),(NULL, '張飛', 30, 'male', 'python'),(NULL, '貂蟬', 18, 'female', 'ui'),(NULL, '大喬', 18, 'female', 'ui');

mysqldump表級備份與還原

備份

案例:把db_it數據庫中的tb_student數據表進行備份

# mkdir /bak
# mysqldump -uroot -p db_it tb_student > /bak/tb_student.sql

還原

-- 還原之前先把表刪了
drop table tb_studnet;# mysql -u root -pmysql> use db_it
mysql> source /bak/tb_student.sql

mysqldump庫級備份與還原

備份

案例:把db_it數據庫進行備份

# mysqldump -uroot -p --databases db_it > /bak/db_it.sql

還原

drop database db_it;# mysql -uroot -pmysql> source /bak/db_it.sql

mysqldump全庫級備份

在MySQL中,如果想使用mysqldump進行全庫級備份,必須開啟二進制日志!!!

開啟二進制日志

vim /etc/my.cnfserver-id=1
log-bin=/mysql_3306/data/binlog

# mysqldump -uroot -p --all-databases --master-data --single-transaction > /bak/all.sql
選項描述說明
--flush-logs, -F開始備份前刷新日志(二進制日志)binlog.000001 => binlog.000002
--flush-privileges備份包含mysql數據庫時刷新授權表 => 刷新用戶和授權信息
--lock-all-tables, -xMyISAM一致性,服務可用性(針對所有庫所有表)
--lock-tables, -l備份前鎖表(針對要備份的庫)
--single-transaction適用InnoDB引擎,保證一致性,服務可用性
--master-data=2表示將二進制日志位置和文件名寫入到備份文件并在dump文件中注釋掉這一行
--master-data=1表示將二進制日志位置和文件名寫入到備份文件,在dump文件中不注釋這一行

3.4 實現增量備份(重要)

增量備份的核心思路

增量備份的關鍵:

  1. 要有全量備份作為基礎

  2. 繼續增刪改數據

  3. 再次需要備份時,不需要進行全量備份,只需要備份binlog日志文件即可(因為binlog日志記錄了增刪改操作的所有SQL語句)

增量備份實驗步驟

第一步:先準備數據
-- 創建數據庫
CREATE DATABASE db_it DEFAULT CHARSET=utf8;-- 使用數據庫
USE db_it;-- 創建表
CREATE TABLE tb_student (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(20),age TINYINT UNSIGNED DEFAULT 0,gender ENUM('male', 'female'),subject ENUM('ui', 'java', 'yunwei', 'python'),PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 插入數據
INSERT INTO tb_student VALUES (NULL, '劉備', 33, 'male', 'java'),(NULL, '關羽', 32, 'male', 'yunwei'),(NULL, '張飛', 30, 'male', 'python'),(NULL, '貂蟬', 18, 'female', 'ui'),(NULL, '大喬', 18, 'female', 'ui');
第二步:開啟二進制日志,重啟服務,然后進行全庫備份
# 編輯 MySQL 配置文件
vim /etc/my.cnf# 添加以下配置
[mysqld]
server-id=10
log-bin=/mysql_3306/data/binlog# 重啟 MySQL 服務
systemctl restart mysqld# 清理臨時備份文件
rm -rf /tmp/sqlbak/*# 備份所有數據庫
mysqldump \
--single-transaction \
--flush-logs \
--master-data=2 \
--all-databases \
> /bak/a.sql \
-p
第三步:繼續對數據庫進行增刪改操作
-- 插入新記錄
INSERT INTO tb_student VALUES (NULL, '小喬', 16, 'female', 'ui');
-- 刪除記錄
DELETE FROM tb_student WHERE id = 3;
第四步:突然發生了硬件故障,數據庫丟失了
# 模擬故障情況,刪除數據庫
mysql -e "DROP DATABASE db_it;" -p
# 輸入密碼: 123
第五步:動員運維工程師開始進行數據恢復,馬上把最新的二進制文件進行備份
# 復制二進制日志文件到備份目錄
cp /usr/local/mysql/data/binlog.000003 /bak
第六步:先進行全庫恢復
# 恢復全量備份
mysql < /tmp/sqlbak/all.sql -p
# 輸入密碼: 123

第七步:通過binlog增量備份還原數據到100%

學會讀二進制日志文件,必須通過專業的工具

# 使用 mysqlbinlog 解析二進制日志文件,定位關鍵操作
/mysqlbinlog /bak/binlog.000003
# 重點關注事故臨界點(如 DROP DATABASE)# 確認日志中操作位置的起始和結束偏移量
# 使用指定位置范圍恢復數據
mysqlbinlog --start-position=201 --stop-position=629 /bak/binlog.000003 | mysql -uroot -p

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

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

相關文章

鴻蒙UI開發——組件的自適應拉伸

1、概 述 針對常見的開發場景&#xff0c;ArkUI開發框架提供了非常多的自適應布局能力&#xff0c;這些布局可以獨立使用&#xff0c;也可多種布局疊加使用。本文針對ArkUI提供的拉伸能力做簡單討論。 拉伸能力是指容器組件尺寸發生變化時&#xff0c;增加或減小的空間全部分…

K 值選對,準確率翻倍:KNN 算法調參的黃金法則

目錄 一、背景介紹 二、KNN 算法原理 2.1 核心思想 2.2 距離度量方法 2.3 算法流程 2.4算法結構&#xff1a; 三、KNN 算法代碼實現 3.1 基于 Scikit-learn 的簡單實現 3.2 手動實現 KNN&#xff08;自定義代碼&#xff09; 四、K 值選擇與可視化分析 4.1 K 值對分類…

Azure DevOps Server 2022.2 補丁(Patch 5)

微軟Azure DevOps Server的產品組在4月8日發布了2022.2 的第5個補丁。下載路徑為&#xff1a;https://aka.ms/devops2022.2patch5 這個補丁的主要功能是修改了代理(Agent)二進制安裝文件的下載路徑&#xff1b;之前&#xff0c;微軟使用這個CND(域名為vstsagentpackage.azuree…

PHP7+MySQL5.6 查立得輕量級公交查詢系統

# PHP7MySQL5.6 查立得輕量級公交查詢系統 ## 系統簡介 本系統是一個基于PHP7和MySQL5.6的輕量級公交查詢系統(40KB級)&#xff0c;支持線路查詢、站點查詢和換乘查詢功能。系統采用原生PHPMySQL開發&#xff0c;無需第三方框架&#xff0c;適合手機端訪問。 首發版本&#x…

Vue-Cropper:全面掌握圖片裁剪組件

Vue-Cropper 完全學習指南&#xff1a;Vue圖片裁剪組件 &#x1f3af; 什么是 Vue-Cropper&#xff1f; Vue-Cropper 是一個簡單易用的Vue圖片裁剪組件&#xff0c;支持Vue2和Vue3。它提供了豐富的配置選項和回調方法&#xff0c;可以滿足各種圖片裁剪需求。 &#x1f31f; …

[Go] Option選項設計模式 — — 編程方式基礎入門

[Go] Option選項設計模式 — — 編程方式基礎入門 全部代碼地址&#xff0c;歡迎?? Github&#xff1a;https://github.com/ziyifast/ziyifast-code_instruction/tree/main/go-demo/go-option 1 介紹 在 Go 開發中&#xff0c;我們經常遇到需要處理多參數配置的場景。傳統方…

【Unity開發】控制手機移動端的震動

&#x1f43e; 個人主頁 &#x1f43e; 阿松愛睡覺&#xff0c;橫豎醒不來 &#x1f3c5;你可以不屠龍&#xff0c;但不能不磨劍&#x1f5e1; 目錄 一、前言二、Unity的Handheld.Vibrate()三、調用Android原生代碼四、NiceVibrations插件五、DeviceVibration插件六、控制游戲手…

Linux 軟件安裝方式全解(適用于 CentOS/RHEL 系統)

&#x1f427; Linux 軟件安裝方式全解&#xff08;適用于 CentOS/RHEL 系統&#xff09; 在 Linux 系統中&#xff0c;軟件安裝方式豐富多樣&#xff0c;常見于以下幾種方式&#xff1a; 安裝方式命令/工具說明軟件包管理器&#xff08;推薦&#xff09;yum, dnf, apt, zypp…

前端面試題-HTML篇

1. 請談談你對 Web 標準以及 W3C 的理解和認識。 我對 Web 標準 的理解是,它就像是互聯網世界的“交通規則”,由 W3C(World Wide Web Consortium,萬維網聯盟) 這樣一個國際性組織制定。這些規則規范了我們在編寫 HTML、CSS 和 JavaScript 時應該遵循的語法和行為,比如要…

ERROR: column cl.udt_name does not exist LINE 1 navicat打開金倉表報錯

描述&#xff1a; ERROR: column cl.udt_name does not exist LINE 1: …a.columns cl LEFT JOlN pg type ty ON ty.typname cl.udt nam. navicat連上金倉數據庫之后&#xff0c;想打開一張表看看&#xff0c;每張表都報這個錯&#xff0c;打不開 解決方案&#xff1a; 網上…

2025年- H61-Lc169--74.搜索二維矩陣(二分查找)--Java版

1.題目描述 2.思路 方法一&#xff1a; 定義其實坐標&#xff0c;右上角的元素&#xff08;0&#xff0c;n-1&#xff09;。進入while循環&#xff08;注意邊界條件&#xff0c;行數小于m&#xff0c;列數要&#xff1e;0&#xff09;從右上角開始開始向左遍歷&#xff08;比當…

Jupyter MCP服務器部署實戰:AI模型與Python環境無縫集成教程

Jupyter MCP 服務器是基于模型上下文協議&#xff08;Model Context Protocol, MCP&#xff09;的 Jupyter 環境擴展組件&#xff0c;它能夠實現大型語言模型與實時編碼會話的無縫集成。該服務器通過標準化的協議接口&#xff0c;使 AI 模型能夠安全地訪問和操作 Jupyter 的核心…

MySQL下載安裝配置環境變量

MySQL下載安裝配置環境變量 文章目錄 MySQL下載安裝配置環境變量一、安裝MySQL1.1 下載1.2 安裝 二、查看MySQL服務是否啟動三、配置環境變量四、驗證 一、安裝MySQL 1.1 下載 官網社區版&#xff08;免費版&#xff09;&#xff1a;https://dev.mysql.com/downloads/mysql/ …

WSL 安裝 Debian 12 后,Linux 如何安裝 curl , quickjs ?

在 WSL 的 Debian 12 系統中安裝 curl 非常簡單&#xff0c;你可以直接使用 APT 包管理器從官方倉庫安裝。以下是詳細步驟&#xff1a; 1. 更新軟件包索引 首先確保系統的包索引是最新的&#xff1a; sudo apt update2. 安裝 curl 執行以下命令安裝 curl&#xff1a; sudo…

Linux入門(十四)rpmyum

RPM 是RedHat PackManager的縮寫 rpm是用于互聯網下載包的打包及安裝工具 rpm查詢 查詢已安裝的rpm列表 rpm -qa查看系統是否安裝了psmisc rpm -qa | grep psmisc rpm -q psmisc查詢軟件包信息 rpm -qi psmisc查詢軟件包中的文件 rpm -ql psmisc根據文件全路徑 查詢文件所…

[git]忽略.gitignore文件

git rm --cached .gitignore 是一個 Git 命令,主要用于 從版本控制中移除已追蹤的 .gitignore 文件,但保留該文件在本地工作目錄中。以下是詳細解析: 一、命令拆解與核心作用 語法解析 git rm:Git 的刪除命令,用于從版本庫(Repository)中移除文件。--cached:關鍵參數…

Hive SQL 中 BY 系列關鍵字全解析:從排序、分發到分組的核心用法

一、排序與分發相關 BY 關鍵字 1. ORDER BY&#xff1a;全局統一排序 作用&#xff1a;對查詢結果進行全局排序&#xff0c;確保最終結果集完全有序&#xff08;僅允許單個 Reducer 處理數據&#xff09;。 語法&#xff1a; SELECT * FROM table_name ORDER BY column1 [A…

網絡爬蟲 - App爬蟲及代理的使用(十一)

App爬蟲及代理的使用 一、App抓包1. App爬蟲原理2. reqable的安裝與配置1. reqable安裝教程2. reqable的配置3. 模擬器的安裝與配置1. 夜神模擬器的安裝2. 夜神模擬器的配置4. 內聯調試及注意事項1. 軟件啟動順序2. 開啟抓包功能3. reqable面板功能4. 夜神模擬器設置項5. 注意事…

【25.06】FISCOBCOS使用caliper自定義測試 通過webase 單機四節點 helloworld等進行測試

前置條件 安裝一個Ubuntu20+的鏡像 基礎環境安裝 Git cURL vim jq sudo apt install -y git curl vim jq Docker和Docker-compose 這個命令會自動安裝docker sudo apt install docker-compose sudo chmod +x /usr/bin/docker-compose docker versiondocker-compose vers…

【基礎】Unity中Camera組件知識點

一、投影模式 (Projection) 1. 透視模式 (Perspective) 原理&#xff1a;模擬人眼&#xff0c;近大遠小&#xff08;錐形體視錐&#xff09; 核心參數&#xff1a; Field of View (FOV)&#xff1a;垂直視場角 典型值&#xff1a;第一人稱 60-90&#xff0c;駕駛艙 30-45 特…