首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Mydumper 安裝與使用教學:MySQL 高效能多線程備份工具

     編輯:更多程式設計知識

什麼是 Mydumper?

Mydumper 是針對 MySQL 與 Drizzle 設計的高效能多線程備份與還原工具,由 MySQL、Facebook、SkySQL 等公司開發者維護。相較官方 mysqldump,Mydumper 支援平行匯出、壓縮、斷點續傳等特性,大幅縮短大型資料庫備份時間。

1. 安裝步驟 (CentOS/RHEL)

# 安裝相依套件
yum install glib2-devel mysql-devel zlib-devel pcre-devel

# 下載原始碼
wget https://launchpad.net/mydumper/0.5/0.5.1/+download/mydumper-0.5.1.tar.gz
tar zxvf mydumper-0.5.1.tar.gz -C ../software/
cd ../software/mydumper-0.5.1

# 編譯安裝
cmake .
make
make install

2. 建立測試資料庫

mysql -u root -p
CREATE DATABASE test;
CREATE TABLE test.t1 (a INT);

3. 常用參數速查表

mydumper (備份)

參數說明
-B, --database指定要備份的資料庫
-T, --tables-list指定資料表,逗號分隔
-o, --outputdir輸出目錄
-t, --threads執行緒數 (預設 4)
-c, --compress壓縮輸出檔案
-r, --rows嘗試將大表依列數切分
-k, --no-locks不加鎖 (警告:可能造成不一致)
-b, --binlogs匯出 binlog
-D, --daemon守護進程模式
-v, --verbose輸出等級 0=silent 1=error 2=warn 3=info

myloader (還原)

參數說明
-d, --directory備份目錄
-t, --threads執行緒數 (預設 4)
-o, --overwrite-tables表存在則覆蓋
-e, --enable-binlog啟用二進制日誌還原
-q, --queries-per-transaction每交易查詢數 (預設 1000)

4. 輸出檔案結構

  • metadata:備份起訖時間、binlog 位置。
  • table data:每張表一個資料檔。
  • table schemas:建表 SQL (.sql)。
  • binary logs:啟用 --binlogs 時產生,置於 binlog_snapshot/。
  • daemon mode:包含 0、1、binlogs、binlog_snapshot、last_dump 目錄,支援輪替備份。

5. 實戰備份指令

time mydumper -B test -o /tmp/test2.bak -r 5000 -t 8 -c

6. 自動化備份 Shell 腳本

#!/bin/bash
# ocpyang@126.com
# 讀取 database.txt 列出的資料庫進行備份,若為空則全備

mydumper=/usr/local/bin/mydumper
dir_backup=/backup
mysql_host=localhost
mysql_port=3306
mysql_user=root
mysql_pass=123456
now_date=$(date +%Y%m%d%H%M)

[ ! -d "$dir_backup" ] && mkdir -p "$dir_backup"

filepath=$(cd "$(dirname "$0")"; pwd)
[ ! -s "${filepath}/database.txt" ] && {
    echo "將在當前目錄下新建 database.txt"
    echo "#Each line is a valid database name" > "${filepath}/database.txt"
    chmod 700 "${filepath}/database.txt"
}

# 移除註解行
awk 'NR>=2 {print $1}' "${filepath}/database.txt" > "${filepath}/tmpdatabases.txt"

if [ -s "${filepath}/tmpdatabases.txt" ]; then
    started_time=$(date +%s)
    echo "備份開始..."
    # 這裡可迴圈讀取 tmpdatabases.txt 每行呼叫 mydumper
    # 範例略
fi

7. 還原範例

myloader -d /tmp/test2.bak -t 8 -o -B test -u root -p 123456

總結

Mydumper 以多線程、分塊匯出、壓縮等特性,成為大型 MySQL 環境備份的首選工具。搭配 Shell 腳本與 crontab 即可建立自動化、可監控的備份體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved