MariaDBをmariabackupでホットバックアップする手順|フルバックアップ・増分バックアップ・リストアの実務

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtipsデーターベース管理 > MariaDBをmariabackupでホットバックアップする手順|フルバックアップ・増分バックアップ・リストアの実務
「mysqldumpでバックアップを取っているが、大きなテーブルでロックがかかってアプリの応答が止まる」「ダンプの完了まで3時間かかってバックアップウィンドウがなくなってきた」——そんな状況に直面したとき、MariaDB公式の物理バックアップツール「mariabackup」が選択肢になります。

mysqldumpは論理バックアップ(SQL形式の書き出し)なのでどこへでも持ち運べますが、大規模テーブルではロック待ちや転送速度がネックです。mariabackupはデータファイルをそのままコピーする物理バックアップであり、InnoDBをサービス無停止(ホットバックアップ)で取得できます。

この記事では、Rocky Linux 9 / RHEL 9 + MariaDB 10.11環境を前提に、mariabackupのインストールからフルバックアップ・増分バックアップ・リストアまでの実際の手順を解説します。

この記事のポイント

・mariabackupはInnoDBをロックなしでホットバックアップできるMariaDB公式ツール
・mariadb-backupパッケージをdnfで導入し、専用バックアップユーザーで実行する
・リストアは--prepare(前処理)→ --copy-back(データ戻し)の2ステップで完結する
・増分バックアップを組み合わせると毎日の差分だけ保存でき、バックアップ容量を削減できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

mysqldumpとmariabackupの違い

まず2つのツールの性質の違いを整理します。どちらを使うかはデータ規模と運用要件によって変わります。
項目 mysqldump mariabackup
バックアップ方式 論理バックアップ(SQL形式) 物理バックアップ(データファイルコピー)
InnoDB のロック ロックなし(--single-transaction) ロックなし(ホットバックアップ)
MyISAM のロック FLUSH TABLES WITH READ LOCK が発生 MyISAM は短時間ロックあり
速度(GB単位の大規模DB) 遅い(SQLの生成がボトルネック) 速い(ファイルコピーと同等)
リストア速度 遅い(SQLを流し込む) 速い(ファイルを配置するだけ)
ポータビリティ 高い(異なるバージョン間でも使える) 低い(同一メジャーバージョン間のみ)
増分バックアップ できない(binlogと組み合わせが必要) できる(--incremental-basedir)
向いているシーン 小~中規模DB、環境をまたぐ移行 大規模DB、短時間RTO(目標復旧時間)が必要な本番
InnoDB中心の現代的な構成では、データ量が増えるほどmariabackupのアドバンテージが大きくなります。とはいえ、mysqldumpのSQLファイルは「別バージョンのMariaDBやMySQLへの移行」に使えるため、両者を組み合わせた運用が現実的です。

mariabackupのインストールとバージョン確認

mariabackupは mariadb-backup パッケージに含まれています。MariaDB本体とは別パッケージなので、明示的にインストールする必要があります。

# mariadb-backup パッケージをインストール sudo dnf install -y mariadb-backup # バージョンを確認する mariabackup --version

実際の出力例です。

mariabackup based on MariaDB server 10.11.6-MariaDB

mariabackupはMariaDBのバージョンに対応したものを使う必要があります。パッケージ管理で導入すれば、MariaDB本体と一致したバージョンが自動で入ります。

バックアップ専用ユーザーの作成

rootで直接バックアップを実行することも可能ですが、本番環境では最小権限の専用ユーザーを作成するのが安全です。mariabackupに必要な権限は以下の4つです。

RELOAD:FLUSH TABLESを実行するために必要
LOCK TABLES:MyISAMテーブルの一貫性を保つために必要
PROCESS:スレッド情報の取得に必要
REPLICATION CLIENT:バイナリログの位置情報取得に必要

専用ユーザーを作成するSQLです。

-- MariaDB に root でログイン sudo mariadb -u root -- バックアップ専用ユーザーを作成する CREATE USER 'mariabackup'@'localhost' IDENTIFIED BY 'StrongPass!2026'; -- 必要な権限を付与する GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'mariabackup'@'localhost'; FLUSH PRIVILEGES; -- 付与された権限を確認する SHOW GRANTS FOR 'mariabackup'@'localhost';

+----------------------------------------------------------------------+ | Grants for mariabackup@localhost | +----------------------------------------------------------------------+ | GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO | | `mariabackup`@`localhost` IDENTIFIED BY PASSWORD '***' | +----------------------------------------------------------------------+

フルバックアップの取得手順

フルバックアップはすべてのデータをまるごとコピーします。増分バックアップの「基点」にもなるため、定期的に取得します。

1. バックアップコマンドを実行する

バックアップの保存先ディレクトリを先に作成してから実行します。

# バックアップ保存先ディレクトリを作成する sudo mkdir -p /backup/mariadb/full # フルバックアップを取得する(--target-dir に保存先を指定) sudo mariabackup --backup \ --target-dir=/backup/mariadb/full \ --user=mariabackup \ --password=StrongPass!2026

実行すると以下のようなログが流れます。末尾に completed OK! が表示されればバックアップ成功です。

[00] 2026-08-22 14:05:31 Connecting to MySQL server host: localhost, user: mariabackup, password: set [00] 2026-08-22 14:05:31 Using server version 10.11.6-MariaDB [00] 2026-08-22 14:05:31 mariabackup: Starting backup! [00] 2026-08-22 14:05:31 Backup created in directory '/backup/mariadb/full/' [00] 2026-08-22 14:05:32 Copying ./ibdata1 [00] 2026-08-22 14:05:33 Copying ./ib_logfile0 [01] 2026-08-22 14:05:33 Copying ./sampledb/orders.ibd [01] 2026-08-22 14:05:37 Copying ./sampledb/products.ibd [00] 2026-08-22 14:05:42 Executed FLUSH NO_WRITE_TO_BINLOG TABLES [00] 2026-08-22 14:05:42 Backup successfully locked. [00] 2026-08-22 14:05:43 Backup lock released [00] 2026-08-22 14:05:43 completed OK!

2. バックアップの内容を確認する

バックアップが完了したら、保存先ディレクトリにファイルが作成されていることを確認します。

ls -lh /backup/mariadb/full/

total 196M drwxr-x--- 2 root root 4096 Aug 22 14:05 sampledb -rw-r----- 1 root root 427 Aug 22 14:05 backup-my.cnf -rw-r----- 1 root root 26M Aug 22 14:05 ibdata1 -rw-r----- 1 root root 5.0M Aug 22 14:05 ib_logfile0 -rw-r----- 1 root root 164 Aug 22 14:05 xtrabackup_info -rw-r----- 1 root root 23 Aug 22 14:05 xtrabackup_checkpoints

xtrabackup_checkpoints にはLSN(Log Sequence Number)が記録されており、増分バックアップの起点として使われます。

mariabackupのような物理バックアップ設計・レプリケーション構成・障害時のリストア手順は、実機を動かしながら身につけるのが最短です。20年以上の現場経験を持つエンジニアが2日間で本番運用の「型」を直接指導します。

フルバックアップからのリストア手順

リストアは「--prepare(前処理)→ --copy-back(データ配置)」の2ステップです。バックアップ直後のファイルはコミット済み・未コミットのトランザクションが混在しているため、そのままでは使えません。--prepareで整合性を取ってから配置します。

1. バックアップを準備する(--prepare)

# バックアップに--prepareを実行して整合性をとる sudo mariabackup --prepare --target-dir=/backup/mariadb/full

[00] 2026-08-22 15:30:11 Starting InnoDB instance for recovery. [00] 2026-08-22 15:30:12 InnoDB: Buffer pool(s) load completed at 150820 15:30:12 ... [00] 2026-08-22 15:30:14 completed OK!

2. MariaDBを停止してデータを戻す

--copy-backを実行する前に、MariaDBサービスを停止してデータディレクトリを空にする必要があります。

# MariaDB を停止する sudo systemctl stop mariadb # 既存の datadir を退避する(念のため削除ではなくリネーム) sudo mv /var/lib/mysql /var/lib/mysql.bak # 空の datadir を作成する sudo mkdir /var/lib/mysql # バックアップからデータを戻す sudo mariabackup --copy-back --target-dir=/backup/mariadb/full

3. 所有者を修正して起動を確認する

--copy-backで配置したファイルは root 所有になります。MariaDBはmysqlユーザーで動くため、所有者を直す必要があります。

# datadir の所有者を mysql:mysql に修正する sudo chown -R mysql:mysql /var/lib/mysql # MariaDB を起動する sudo systemctl start mariadb # 正常に起動したか確認する sudo systemctl status mariadb

* mariadb.service - MariaDB 10.11 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled) Active: active (running) since Fri 2026-08-22 15:35:42 JST; 5s ago Status: "Taking your SQL requests now..." Main PID: 8821 (mariadbd)

Active: active (running)Status: "Taking your SQL requests now..." が表示されれば正常にリストアできています。

増分バックアップの取得と適用

毎回フルバックアップを取ると保存容量が大きくなります。増分バックアップは「前回のバックアップから変更されたデータだけ」を保存するため、容量と時間を節約できます。

1. 増分バックアップを取得する

--incremental-basedir に「前回のバックアップディレクトリ」を指定します。

# 1回目の増分バックアップ(フルバックアップを基点にする) sudo mkdir -p /backup/mariadb/inc1 sudo mariabackup --backup \ --target-dir=/backup/mariadb/inc1 \ --incremental-basedir=/backup/mariadb/full \ --user=mariabackup \ --password=StrongPass!2026 # 2回目の増分バックアップ(inc1 を基点にする) sudo mkdir -p /backup/mariadb/inc2 sudo mariabackup --backup \ --target-dir=/backup/mariadb/inc2 \ --incremental-basedir=/backup/mariadb/inc1 \ --user=mariabackup \ --password=StrongPass!2026

2. リストア時に増分バックアップを適用する

増分バックアップを使ってリストアするときは、フルバックアップに増分を順番に適用してから --copy-back します。最後の増分バックアップ以外では --apply-log-only をつけることがポイントです(途中でロールバックが走ると次の増分を適用できなくなります)。

# ステップ1: フルバックアップを準備する(--apply-log-onlyで開いたまま) sudo mariabackup --prepare --apply-log-only \ --target-dir=/backup/mariadb/full # ステップ2: 1回目の増分を適用する(まだ--apply-log-only) sudo mariabackup --prepare --apply-log-only \ --target-dir=/backup/mariadb/full \ --incremental-dir=/backup/mariadb/inc1 # ステップ3: 2回目の増分を適用する(最後は--apply-log-onlyをつけない) sudo mariabackup --prepare \ --target-dir=/backup/mariadb/full \ --incremental-dir=/backup/mariadb/inc2 # ステップ4: MariaDBを停止してデータを戻す(フルバックアップと同じ手順) sudo systemctl stop mariadb sudo mv /var/lib/mysql /var/lib/mysql.bak sudo mkdir /var/lib/mysql sudo mariabackup --copy-back --target-dir=/backup/mariadb/full sudo chown -R mysql:mysql /var/lib/mysql sudo systemctl start mariadb

cronで自動化するバックアップスクリプト例

以下は毎日フルバックアップを取り、7世代を保持するシンプルなスクリプト例です。

#!/bin/bash # /usr/local/bin/mariadb-full-backup.sh BACKUP_BASE=/backup/mariadb DATE=$(date +%Y%m%d_%H%M%S) TARGET_DIR=${BACKUP_BASE}/full_${DATE} LOG_FILE=/var/log/mariadb-backup.log BACKUP_USER=mariabackup BACKUP_PASS=StrongPass!2026 KEEP_DAYS=7 # バックアップを実行する mkdir -p "${TARGET_DIR}" mariabackup --backup \ --target-dir="${TARGET_DIR}" \ --user="${BACKUP_USER}" \ --password="${BACKUP_PASS}" >> "${LOG_FILE}" 2>&1 if [ $? -eq 0 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') [OK] Full backup: ${TARGET_DIR}" >> "${LOG_FILE}" else echo "$(date '+%Y-%m-%d %H:%M:%S') [FAIL] Full backup failed" >> "${LOG_FILE}" exit 1 fi # KEEP_DAYS 世代より古いバックアップを削除する find "${BACKUP_BASE}" -maxdepth 1 -name "full_*" -type d \ -mtime +${KEEP_DAYS} -exec rm -rf {} +

スクリプトに実行権限を付与してcronに登録します。

# 実行権限を付与する sudo chmod 750 /usr/local/bin/mariadb-full-backup.sh # cron に登録する(毎日 02:00 に実行) sudo crontab -e # 追加する行: 0 2 * * * /usr/local/bin/mariadb-full-backup.sh

トラブルシューティング

1. ソケットに接続できない(Can't connect to local MySQL server through socket)

MariaDBが起動していないか、ソケットファイルのパスが違う場合に発生します。

# MariaDB の起動状態を確認する sudo systemctl status mariadb # ソケットファイルのパスを確認する sudo mariadb -u root -e "SHOW VARIABLES LIKE 'socket';" # ソケットパスを明示して接続する sudo mariabackup --backup \ --socket=/var/lib/mysql/mysql.sock \ --user=mariabackup \ --password=StrongPass!2026 \ --target-dir=/backup/mariadb/full

2. バックアップユーザーのアクセス拒否(Access denied)

ユーザーが存在しないか、権限が不足しています。

# ユーザーの存在と権限を確認する sudo mariadb -u root -e "SHOW GRANTS FOR 'mariabackup'@'localhost';" # ユーザーが存在しない場合は再作成する sudo mariadb -u root -e " CREATE USER IF NOT EXISTS 'mariabackup'@'localhost' IDENTIFIED BY 'StrongPass!2026'; GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'mariabackup'@'localhost'; FLUSH PRIVILEGES; "

3. --copy-back でエラー(The datadir is not empty)

--copy-backはdatadirが空でないと失敗します。必ず空の状態で実行してください。

# datadir を退避してから空ディレクトリを作成する sudo systemctl stop mariadb sudo mv /var/lib/mysql /var/lib/mysql.bak.$(date +%Y%m%d) sudo mkdir /var/lib/mysql

4. 起動後のSELinuxエラー(Permission denied)

--copy-backで配置したファイルのSELinuxコンテキストが正しくない場合、MariaDBが起動しません。

# SELinux コンテキストを修正する sudo restorecon -Rv /var/lib/mysql # 再起動を試みる sudo systemctl start mariadb

本記事のまとめ

mariabackupはInnoDBのホットバックアップと増分バックアップに対応しており、大規模なMariaDB環境での運用に適したツールです。mysqldumpと使い分けることで、バックアップウィンドウの縮小とストレージの節約を両立できます。
やりたいこと コマンド
mariabackup をインストールする sudo dnf install mariadb-backup
フルバックアップを取得する sudo mariabackup --backup --target-dir=/backup/mariadb/full --user=mariabackup --password=xxx
バックアップをリストア前に準備する sudo mariabackup --prepare --target-dir=/backup/mariadb/full
バックアップからデータを戻す sudo mariabackup --copy-back --target-dir=/backup/mariadb/full
増分バックアップを取得する sudo mariabackup --backup --incremental-basedir=/backup/mariadb/full --target-dir=/backup/mariadb/inc1 --user=mariabackup --password=xxx
増分バックアップをフルに適用する sudo mariabackup --prepare --apply-log-only --target-dir=/backup/mariadb/full --incremental-dir=/backup/mariadb/inc1
所有者を修正する(copy-back後) sudo chown -R mysql:mysql /var/lib/mysql
SELinuxコンテキストを修正する sudo restorecon -Rv /var/lib/mysql

MariaDBのバックアップ設計も、Linuxサーバー運用の「型」の一部です

mariabackupによるホットバックアップ・増分バックアップ設計・リストア手順の把握は、本番MariaDB環境を守るための基礎スキルです。「バックアップが取れているかどうか」だけでなく、「障害時に確実に戻せるか」まで設計できるエンジニアを目指したい方へ、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。