mysqldumpは論理バックアップ(SQL形式の書き出し)なのでどこへでも持ち運べますが、大規模テーブルではロック待ちや転送速度がネックです。mariabackupはデータファイルをそのままコピーする物理バックアップであり、InnoDBをサービス無停止(ホットバックアップ)で取得できます。
この記事では、Rocky Linux 9 / RHEL 9 + MariaDB 10.11環境を前提に、mariabackupのインストールからフルバックアップ・増分バックアップ・リストアまでの実際の手順を解説します。
この記事のポイント
・mariabackupはInnoDBをロックなしでホットバックアップできるMariaDB公式ツール
・mariadb-backupパッケージをdnfで導入し、専用バックアップユーザーで実行する
・リストアは--prepare(前処理)→ --copy-back(データ戻し)の2ステップで完結する
・増分バックアップを組み合わせると毎日の差分だけ保存でき、バックアップ容量を削減できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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(目標復旧時間)が必要な本番 |
mariabackupのインストールとバージョン確認
mariabackupはmariadb-backup パッケージに含まれています。MariaDB本体とは別パッケージなので、明示的にインストールする必要があります。# mariadb-backup パッケージをインストール sudo dnf install -y mariadb-backup # バージョンを確認する mariabackup --version
mariabackup based on MariaDB server 10.11.6-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 {} +
# 実行権限を付与する 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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 次のページへ:PostgreSQLのテーブル一覧をpsqlで確認する手順|スキーマごとの洗い出しと行数・サイズの把握
- 前のページへ:MySQLのユーザー作成とGRANT権限付与の実務手順|SHOW GRANTSで確認・REVOKEで剥奪まで
- この記事の属するカテゴリ:データーベース管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます