最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL8配置mysqldump邏輯備份的實(shí)現(xiàn)

 更新時(shí)間:2026年03月03日 09:20:17   作者:leaf9z  
mysqldump是MySQL自帶的邏輯備份工具,通過生成SQL語句實(shí)現(xiàn)跨平臺(tái)/版本的數(shù)據(jù)備份,下面就來介紹一下MySQL8配置mysqldump邏輯備份的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

mysqldump 是 MySQL 自帶的一個(gè)極其常用的邏輯備份工具。它的基本原理是將數(shù)據(jù)庫中的數(shù)據(jù)和結(jié)構(gòu)轉(zhuǎn)換成一系列的 SQL 語句(如 CREATE TABLE、INSERT 等)。

1. 核心特點(diǎn)

  • 邏輯備份:它備份的是 SQL 指令,而不是物理數(shù)據(jù)文件(.ibd)。
  • 跨平臺(tái)/版本:由于是 SQL 文本,你可以把 5.7 版本的備份恢復(fù)到 8.0 版本,或者從 Linux 遷移到 Windows。
  • 簡(jiǎn)單靈活:可以只備份一個(gè)表、一個(gè)庫,或者整個(gè)服務(wù)器。
  • 恢復(fù)成本:對(duì)于小數(shù)據(jù)庫非常方便,但對(duì)于 TB 級(jí)別的大數(shù)據(jù)庫,恢復(fù)速度比物理備份(XtraBackup)慢得多。

2. 主要優(yōu)缺點(diǎn)

維度優(yōu)點(diǎn)缺點(diǎn)
可讀性備份文件是純文本,可以直接用編輯器打開看。文件體積相對(duì)物理備份較大(壓縮前)。
細(xì)粒度能夠很方便地只恢復(fù)某一個(gè)表的數(shù)據(jù)。恢復(fù)時(shí)需要重新構(gòu)建索引,CPU 和 IO 消耗大。
兼容性兼容性極強(qiáng),適合做數(shù)據(jù)庫升級(jí)或遷移。備份大型數(shù)據(jù)庫時(shí),對(duì)生產(chǎn)環(huán)境的壓力持續(xù)時(shí)間長。
鎖表情況配合 --single-transaction 可實(shí)現(xiàn) InnoDB 的無鎖熱備。如果有非 InnoDB 表(如 MyISAM),備份時(shí)會(huì)鎖表。

3. mysqldump 的工作流程

  • 連接查詢:連接到 MySQL 服務(wù)器。
  • 獲取結(jié)構(gòu):查詢表結(jié)構(gòu)(DDL),生成 CREATE TABLE 語句。
  • 讀取數(shù)據(jù):將每一行數(shù)據(jù)讀出來,轉(zhuǎn)換成 INSERT 語句。
  • 生成文件:將這些 SQL 語句寫入到 .sql 文件中。

4. 常見的備份場(chǎng)景

  • 日常小規(guī)模備份:數(shù)據(jù)量在 50G 以下時(shí),mysqldump 是首選。
  • 單表誤刪找回:物理備份只能整庫恢復(fù),而 mysqldump 允許你只把那張誤刪的表導(dǎo)入回去。
  • 環(huán)境遷移:把生產(chǎn)環(huán)境的數(shù)據(jù)抽出一部分導(dǎo)給開發(fā)環(huán)境使用。

5. 執(zhí)行備份

5.1 推薦創(chuàng)建專用備份賬號(hào)

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'StrongPass!';
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT, LOCK TABLES, RELOAD, PROCESS ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;

5.2 準(zhǔn)備環(huán)境(不在備份命令中明文暴露)

[root@localhost ~]# vim /etc/mysql_backup.cnf
[client]
user=root
password=LJFLDskfdjsldkjfl
port=3306                             #根據(jù)自己實(shí)際端口填寫
socket=/var/lib/mysql/mysql.sock      #根據(jù)自己實(shí)際sock填寫

5.3 執(zhí)行備份

[root@localhost ~]# mysqldump --defaults-extra-file=/etc/mysql_backup.cnf \
    --single-transaction \
    --routines \
    --hex-blob \
    --set-gtid-purged=OFF \
    --triggers \
    --events \
    --all-databases \
    --flush-logs \
    --source-data=2 \
   | gzip > "/data/mysql/backup/logical_backup/mysqldump_$(date '+%F_%H-%M-%S').sql.gz"

6. 編寫備份腳本

[root@localhost ~]#vim  mysqldump_backup.sh 
#!/bin/bash
#
# ==============================================================================
# MySQL 邏輯備份腳本(基于 mysqldump)
# 適用于 MySQL 8.0,支持定時(shí)任務(wù)
# 作者:Noleaf
# 日期:2025-12-31
# ==============================================================================

set -euo pipefail

#=============================變量定義==========================================

# 時(shí)間戳
Timestamp=$(date '+%F_%H-%M-%S')

# 備份根目錄
BACKUP_BASE=/data/mysql8/backup/mysqldump_backup

# 備份文件名稱
BACKUP_NAME="mysqldump_${Timestamp}.sql.gz"

# 日志目錄及文件
LOG_DIR=${BACKUP_BASE}/logs
LOG_FILE=${LOG_DIR}/mysqldump_${Timestamp}.log

# 保留天數(shù)
KEEP_DAYS=30

# MySQL 配置文件(包含用戶名和密碼)
MYSQL_CNF=/etc/mysql_backup.cnf

#=============================創(chuàng)建目錄==========================================

mkdir -p "$BACKUP_BASE" "$LOG_DIR"

echo "========================== mysqldump備份開始于 [$Timestamp] ===================" | tee -a "$LOG_FILE"

#=============================執(zhí)行備份==========================================
#注意mysqldump路徑
if /usr/local/mysql-8.0.44/bin/mysqldump --defaults-extra-file=${MYSQL_CNF} \
    --single-transaction \
    --routines \
    --hex-blob \
    --set-gtid-purged=OFF \
    --triggers \
    --events \
    --all-databases \
    --flush-logs \
    --source-data=2 \
    | gzip > "${BACKUP_BASE}/${BACKUP_NAME}"; then
    echo "Success: mysqldump備份成功!文件: ${BACKUP_BASE}/${BACKUP_NAME}" | tee -a "$LOG_FILE"
else
    echo "ERROR: mysqldump備份失??!請(qǐng)檢查日志 ${LOG_FILE}" | tee -a "$LOG_FILE"
    exit 1
fi

#=============================清理舊備份==========================================

echo "正在清理 $KEEP_DAYS 天之前的舊備份..." | tee -a "$LOG_FILE"
find "${BACKUP_BASE}" -maxdepth 1 -type f -name "mysqldump_*.sql.gz" -mtime +${KEEP_DAYS} -exec rm -f {} \;
find "${LOG_DIR}" -maxdepth 1 -type f -name "mysqldump_*.log" -mtime +${KEEP_DAYS} -exec rm -f {} \;

#=============================統(tǒng)計(jì)數(shù)據(jù)簡(jiǎn)報(bào)========================================

BACKUP_SIZE=$(du -sh "${BACKUP_BASE}/${BACKUP_NAME}" | cut -f1)
echo "本次mysqldump備份大?。?{BACKUP_SIZE}" | tee -a "$LOG_FILE"

echo "=================== mysqldump備份完成于 [$(date '+%F %H:%M:%S')] ===================" | tee -a "$LOG_FILE"

7. MySQL8/GTID 恢復(fù)備份流程

7.1 準(zhǔn)備環(huán)境

  • 確認(rèn)目標(biāo)庫為 MySQL 8.0,并啟用了 GTID 模式 (gtid_mode=ONenforce_gtid_consistency=ON)。
  • 確認(rèn)目標(biāo)庫已初始化,并有足夠磁盤空間。
  • 建議在恢復(fù)前關(guān)閉業(yè)務(wù)連接,避免寫入沖突。

7.2 解壓備份文件

如果備份文件是 .sql.gz 壓縮格式,先解壓:

[root@localhost ~]# gunzip /data/mysql8/backup/mysqldump_backup/mysqldump_2026-01-05_14-30-00.sql.gz

得到解壓備份文件:

mysqldump_2026-01-05_14-30-00.sql

7.3 執(zhí)行恢復(fù)命令

直接導(dǎo)入 SQL 文件:

[root@localhost ~]# mysql --defaults-extra-file=/etc/mysqldump8_backup.cnf < mysqldump_2026-01-05_14-30-00.sql

如果是壓縮文件,用管道方式:

[root@localhost ~]# gunzip < mysqldump_2026-01-05_14-30-00.sql.gz | mysql --defaults-extra-file=/etc/mysqldump8_backup.cnf

7.4 恢復(fù)過程中的注意事項(xiàng)

  • GTID 設(shè)置

    • 如果備份文件包含:

      SET @@GLOBAL.gtid_purged='uuid:transaction_id,...';

      在恢復(fù)時(shí)可能報(bào)錯(cuò)。

    • 建議在備份時(shí)使用 --set-gtid-purged=OFF,恢復(fù)后再根據(jù)需要手動(dòng)設(shè)置。

    • 如果必須導(dǎo)入 GTID 集合,需先確認(rèn)目標(biāo)庫為空庫,并執(zhí)行:

      SET GLOBAL gtid_purged='uuid:transaction_id,...';
  • 外鍵檢查 mysqldump 會(huì)自動(dòng)關(guān)閉/開啟 FOREIGN_KEY_CHECKS,避免因表順序?qū)е峦怄I錯(cuò)誤。

  • 唯一性檢查 大庫恢復(fù)時(shí)可臨時(shí)關(guān)閉:

    SET UNIQUE_CHECKS=0;
    SET FOREIGN_KEY_CHECKS=0;

    導(dǎo)入完成后再開啟。

  • 嚴(yán)格模式 MySQL 8 默認(rèn)開啟嚴(yán)格模式,對(duì)非法日期(如 0000-00-00)、超長字符串會(huì)報(bào)錯(cuò)?;謴?fù)前可調(diào)整:

    SET sql_mode='NO_ENGINE_SUBSTITUTION';
  • 對(duì)象屬性 MySQL 8 對(duì) DEFINER 用戶 要求更嚴(yán)格,如果備份文件中定義的用戶不存在,恢復(fù)后對(duì)象可能無法運(yùn)行。需提前創(chuàng)建:

    CREATE USER 'definer_user'@'%' IDENTIFIED BY 'password';

7.5 驗(yàn)證恢復(fù)結(jié)果

  • 檢查庫和表數(shù)量

    SHOW DATABASES;
    SHOW TABLES FROM dbname;
  • 檢查數(shù)據(jù)量

    SELECT COUNT(*) FROM dbname.tablename;
  • 檢查對(duì)象完整性

    SHOW PROCEDURE STATUS;
    SHOW TRIGGERS;
    SHOW EVENTS;
  • 檢查 GTID 集合

    SHOW VARIABLES LIKE 'gtid_executed';

7.6 恢復(fù)后的收尾工作

  • 確認(rèn) DEFINER 用戶 存在,避免存儲(chǔ)過程/觸發(fā)器報(bào)錯(cuò)。

  • 如果是主從環(huán)境,執(zhí)行:

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000123', MASTER_LOG_POS=456789, MASTER_AUTO_POSITION=1;
    START SLAVE;

    在 GTID 模式下,推薦使用 MASTER_AUTO_POSITION=1,自動(dòng)對(duì)齊 GTID。

  • 檢查日志,確認(rèn)沒有報(bào)錯(cuò)或警告。

? 總結(jié)

MySQL 8 恢復(fù)流程的關(guān)鍵點(diǎn):

  • 解壓備份文件
  • 導(dǎo)入 SQL 文件
  • 處理 GTID 設(shè)置gtid_purged
  • 注意嚴(yán)格模式與對(duì)象屬性
  • 驗(yàn)證恢復(fù)結(jié)果(庫、表、對(duì)象、GTID 集合)
  • 收尾工作(用戶權(quán)限、主從復(fù)制、日志檢查)

到此這篇關(guān)于MySQL8配置mysqldump邏輯備份的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL8 mysqldump邏輯備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL8.0的工具日志配置管理方式

    MySQL8.0的工具日志配置管理方式

    MySQL日志分類包括錯(cuò)誤日志(記錄錯(cuò)誤信息)、普通日志(全量操作記錄)、二進(jìn)制日志(用于數(shù)據(jù)恢復(fù)、主從復(fù)制和審計(jì),默認(rèn)8.0開啟)、慢日志(記錄性能低的SQL),配置需在my.cnf中設(shè)置,重啟生效,建議分離存儲(chǔ)日錄與數(shù)據(jù)
    2025-07-07
  • 以Centos為例講解MySQL在Linux中的部署

    以Centos為例講解MySQL在Linux中的部署

    這篇文章主要介紹了以Centos為例講解MySQL在Linux中的部署,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • MySQL創(chuàng)建、修改和刪除表操作指南

    MySQL創(chuàng)建、修改和刪除表操作指南

    MySQL是最常用的數(shù)據(jù)庫,在數(shù)據(jù)庫操作中,基本都是增刪改查操作,簡(jiǎn)稱CRUD,下面這篇文章主要給大家介紹了關(guān)于MySQL創(chuàng)建、修改和刪除表的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • MySQL使用外鍵實(shí)現(xiàn)級(jí)聯(lián)刪除與更新的方法

    MySQL使用外鍵實(shí)現(xiàn)級(jí)聯(lián)刪除與更新的方法

    這篇文章主要介紹了MySQL使用外鍵實(shí)現(xiàn)級(jí)聯(lián)刪除與更新的方法,詳細(xì)分析了mysql數(shù)據(jù)庫與表的創(chuàng)建、數(shù)據(jù)插入、查詢以及外鏈的使用與級(jí)聯(lián)操作相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • IDEA連接不上MySQL端口號(hào)占用的解決

    IDEA連接不上MySQL端口號(hào)占用的解決

    這篇文章主要介紹了IDEA連接不上MySQL端口號(hào)占用的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MySQL中如何優(yōu)化order by語句

    MySQL中如何優(yōu)化order by語句

    本文主要介紹了MySQL中如何優(yōu)化order by語句,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 刪除MySQL重復(fù)數(shù)據(jù)的方法

    刪除MySQL重復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了刪除MySQL重復(fù)數(shù)據(jù)的方法,通過建立中間表實(shí)現(xiàn)針對(duì)冗余數(shù)據(jù)的刪除功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 兩種mysql對(duì)自增id重新從1排序的方法

    兩種mysql對(duì)自增id重新從1排序的方法

    本文介紹了兩種mysql對(duì)自增id重新從1排序的方法,簡(jiǎn)少了對(duì)于某個(gè)項(xiàng)目初始化數(shù)據(jù)的工作量,感興趣的朋友可以參考下
    2015-07-07
  • MySQL的存儲(chǔ)函數(shù)與存儲(chǔ)過程相關(guān)概念與具體實(shí)例詳解

    MySQL的存儲(chǔ)函數(shù)與存儲(chǔ)過程相關(guān)概念與具體實(shí)例詳解

    MySQL存儲(chǔ)函數(shù)(自定義函數(shù)),函數(shù)一般用于計(jì)算和返回一個(gè)值,可以將經(jīng)常需要使用的計(jì)算或功能寫成一個(gè)函數(shù),存儲(chǔ)函數(shù)和存儲(chǔ)過程一樣,都是在數(shù)據(jù)庫中定義一些SQL語句的集合
    2023-03-03
  • mysql如何簡(jiǎn)單定位慢查詢并分析SQL執(zhí)行效率

    mysql如何簡(jiǎn)單定位慢查詢并分析SQL執(zhí)行效率

    這篇文章主要介紹了mysql如何簡(jiǎn)單定位慢查詢并分析SQL執(zhí)行效率,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評(píng)論

阳朔县| 新兴县| 凤冈县| 丰台区| 南木林县| 高平市| 富锦市| 安阳市| 通化市| 平阳县| 甘肃省| 龙游县| 温宿县| 竹山县| 东兰县| 蓬莱市| 瓮安县| 喀喇沁旗| 福州市| 定结县| 屏边| 阜南县| 东源县| 兴海县| 隆昌县| 南木林县| 忻城县| 鄂伦春自治旗| 哈巴河县| 武冈市| 聂荣县| 上饶县| 河西区| 本溪| 区。| 理塘县| 上林县| 仁化县| 富源县| 阿坝县| 佳木斯市|