MariaDB Mariabackup オプション徹底解説:バックアップ設定の全て

2025-05-27

主な「MariaBackup Options」のカテゴリと、代表的なオプションの例をいくつかご紹介します。

バックアップの種類と対象 (Backup Type and Target)

  • --no-tablespaces: 各テーブルスペースを個別のファイルとしてバックアップせず、データファイルに含めます。
  • --tables=db1.table1[,db2.table2,...]: 指定したテーブルのみをバックアップします。--databasesと同時に使用することはできません。
  • --all-databases: すべてのデータベースをバックアップします。
  • --databases=db1[,db2,...]: 指定したデータベースのみをバックアップします。
  • --target-dir=path: バックアップファイルを保存するディレクトリを指定します。これも必須のオプションです。
  • --backup: バックアップ操作を実行することを指定します。これは必須のオプションです。

接続と認証 (Connection and Authentication)

  • --port=port_num: リモートのMariaDBサーバーへの接続に使用するポート番号を指定します。
  • --host=host_name: リモートのMariaDBサーバーへの接続に使用するホスト名を指定します。
  • --socket=path: ローカルのMariaDBサーバーへの接続に使用するソケットファイルを指定します。
  • --password[=password]: MariaDBサーバーへの接続に使用するパスワードを指定します。セキュリティのため、コマンドラインで直接指定するのではなく、--defaults-extra-fileオプションや対話的な入力を使用することが推奨されます。
  • --user=user_name: MariaDBサーバーへの接続に使用するユーザー名を指定します。

バックアップの詳細設定 (Backup Specific Options)

  • --stream: バックアップを単一のストリームとして出力します。これにより、パイプ処理などで直接リストアできます。
  • --encrypt-key=key: 暗号化に使用するキーを指定します。
  • --encrypt=algorithm: バックアップファイルを暗号化します。
  • --compress: バックアップファイルをgzip形式で圧縮します。
  • --parallel=N: バックアップ処理を並列実行するスレッド数を指定することで、バックアップ時間を短縮できます。
  • --innodb-use-checksums: InnoDBのチェックサムを使用してデータ整合性を検証します。

増分バックアップ (Incremental Backup)

  • --incremental-lsn=LSN: 特定のLSN(ログシーケンス番号)以降の変更をバックアップします。
  • --incremental-basedir=path: 前回のフルバックアップのディレクトリを指定します。
  • --incremental: 差分バックアップ(前回のフルバックアップ以降の変更のみをバックアップ)を実行します。
  • --quiet: エラーメッセージ以外の出力を抑制します。
  • --verbose: より詳細な出力を行います。
  • --version: mariabackupのバージョンを表示します。
  • --help: ヘルプメッセージを表示します。
  • --defaults-extra-file=path: 追加の設定ファイルを指定します。
  • --defaults-file=path: MariaDBの設定ファイルを指定します。

これらはmariabackupで利用できるオプションのほんの一部です。より詳細な情報や、それぞれのオプションの具体的な使い方については、MariaDBの公式ドキュメントを参照することをお勧めします。

例えば、すべてのデータベースを/var/backup/ディレクトリにバックアップする場合、以下のようなコマンドを実行します。

mariabackup --backup --target-dir=/var/backup/ --all-databases --user=backup_user --password='your_password'

また、並列処理数を4にしてバックアップを高速化する場合は、--parallelオプションを追加します。

mariabackup --backup --target-dir=/var/backup/ --all-databases --user=backup_user --password='your_password' --parallel=4


権限に関するエラー (Permission Errors)

  • トラブルシューティング
    • バックアップ対象のファイルやディレクトリの権限を確認し、mariabackupを実行するユーザーに必要な読み取り権限があるか確認してください。
    • バックアップ先のディレクトリの権限を確認し、mariabackupを実行するユーザーに必要な書き込み権限があるか確認してください。
    • SELinuxやAppArmorなどのセキュリティモジュールが有効になっている場合は、それらがアクセスを妨げていないか確認し、必要に応じて設定を変更してください。
    • MariaDBサーバーへの接続に使用するユーザー(--userオプションで指定)が、必要なデータベースやテーブルへのSELECT権限を持っているか確認してください。
  • 原因
    mariabackupを実行するユーザーに、バックアップ対象のデータファイルやディレクトリ、またはバックアップ先のディレクトリへのアクセス権がない場合に発生します。
  • エラー例
    mariabackup: Error: Cannot open file: ... (Permission denied)

オプションの指定ミス (Incorrect Option Usage)

  • トラブルシューティング
    • コマンドラインで指定したオプションを再度確認し、スペルミスがないか、オプション名が正しいかを確認してください。
    • MariaDBの公式ドキュメントやmariabackup --helpコマンドで、利用可能なオプションとその構文を確認してください。
    • オプションの組み合わせに矛盾がないか確認してください(例: --databases--tablesを同時に指定するなど)。
  • 原因
    存在しないオプションを指定した場合や、オプションのスペルミスがある場合に発生します。
  • エラー例
    mariabackup: Error: unknown option '--invalid-option'

バックアップ先のディスク容量不足 (Insufficient Disk Space)

  • トラブルシューティング
    • バックアップ先のディスクの空き容量を確認してください。
    • 不要なファイルを削除するか、より大きなディスクを使用することを検討してください。
    • --compressオプションを使用してバックアップファイルを圧縮することで、必要なディスク容量を減らすことができます。
  • 原因
    バックアップファイルを保存するディレクトリのディスク容量が不足している場合に発生します。
  • エラー例
    mariabackup: Error: Failed to write to target directory. No space left on device

MariaDBサーバーとの接続エラー (Connection Errors)

  • トラブルシューティング
    • --host--port--socketオプションの値が、実際のMariaDBサーバーの設定と一致しているか確認してください。
    • MariaDBサーバーが正常に起動しているか確認してください。
    • ファイアウォールが接続をブロックしていないか確認してください(特にリモート接続の場合)。
    • --user--passwordオプションで指定した認証情報が正しいか確認してください。
  • 原因
    --host--port--socketなどの接続オプションの設定が誤っているか、MariaDBサーバーが起動していない場合に発生します。
  • エラー例
    mariabackup: Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

増分バックアップに関するエラー (Incremental Backup Errors)

  • トラブルシューティング
    • --incremental-basedirオプションで指定したパスが、以前に正常に完了したフルバックアップのディレクトリであることを確認してください。
    • 増分バックアップを実行する前に、少なくとも一度はフルバックアップが成功していることを確認してください。
    • --incremental-lsnオプションを使用する場合は、指定したLSNが有効な範囲内であることを確認してください。
  • 原因
    --incremental-basedirオプションで指定したディレクトリが、有効なフルバックアップディレクトリではない場合に発生します。
  • エラー例
    mariabackup: Error: The --incremental-basedir option must point to a full backup directory.
  • トラブルシューティング
    • --copy-backまたは--move-backオプションを実行する前に、バックアップディレクトリの内容が完全であることを確認してください。
    • バックアップ処理中にエラーが発生していないかログを確認してください。
    • 可能であれば、別のバックアップセットを使用してリストアを試みてください。
    • バックアップファイルの整合性を検証するオプション(もしあれば)を使用してみてください。
  • 原因
    リストアに必要なバックアップファイルが見つからない場合や、バックアップファイルが破損している場合に発生します。
  • エラー例
    mariabackup: Error: Could not find all the necessary data files.
  • トラブルシューティング
    • サーバーのリソース(CPU、メモリ、ディスクI/O)の使用状況を確認してください。
    • 関連するログファイル(MariaDBのエラーログ、mariabackupの出力など)を確認し、エラーメッセージの詳細を把握してください。
    • MariaDBのバージョンやmariabackupのバージョンが最新であるか確認し、既知のバグがないか調べてください。
    • 問題が解決しない場合は、MariaDBのコミュニティフォーラムやメーリングリストで情報を共有し、支援を求めてみてください。
  • 原因
    メモリ不足、ファイルシステムの破損、mariabackup自体のバグなど、上記以外の様々な原因が考えられます。


Pythonでの例

Pythonでは、subprocessモジュールを使用して外部コマンドを実行できます。以下は、Pythonスクリプトからmariabackupを実行し、いくつかのオプションを指定する例です。

import subprocess

def run_mariabackup(target_dir, all_databases=False, databases=None, user=None, password=None, parallel=None, compress=False):
    """mariabackupコマンドを実行する関数"""
    command = ["mariabackup", "--backup", f"--target-dir={target_dir}"]

    if all_databases:
        command.append("--all-databases")
    elif databases:
        command.extend(["--databases", ",".join(databases)])

    if user:
        command.extend(["--user", user])
    if password:
        command.extend(["--password", password])  # 注意: セキュリティ上の懸念あり

    if parallel:
        command.extend(["--parallel", str(parallel)])

    if compress:
        command.append("--compress")

    try:
        result = subprocess.run(command, capture_output=True, text=True, check=True)
        print("MariaBackupが成功しました:")
        print(result.stdout)
    except subprocess.CalledProcessError as e:
        print(f"MariaBackupでエラーが発生しました (終了コード: {e.returncode}):")
        print(e.stderr)
    except FileNotFoundError:
        print("エラー: mariabackupコマンドが見つかりません。")

if __name__ == "__main__":
    backup_dir = "/var/backup/mydb"
    db_list = ["mydatabase1", "mydatabase2"]
    backup_user = "backup_user"
    backup_password = "your_secret_password"
    parallel_threads = 4

    # すべてのデータベースをバックアップする例
    run_mariabackup(target_dir=backup_dir, all_databases=True, user=backup_user, password=backup_password, parallel=parallel_threads, compress=True)

    print("\n--- 特定のデータベースのみをバックアップする例 ---")
    # 特定のデータベースのみをバックアップする例
    run_mariabackup(target_dir=backup_dir, databases=db_list, user=backup_user, password=backup_password)

この例では、run_mariabackup関数がsubprocess.run()を使用してmariabackupコマンドを実行しています。関数の引数として、バックアップ先のディレクトリ、バックアップするデータベース(すべてまたは特定)、ユーザー名、パスワード、並列処理数、圧縮の有無などを指定できます。これらの引数に基づいて、適切なmariabackupコマンドが構築され、実行されます。

注意
スクリプトに直接パスワードを記述するのはセキュリティ上のリスクがあるため、より安全な方法(例: 環境変数、設定ファイル、プロンプトからの入力など)を検討してください。

Bashスクリプトでの例

Bashスクリプトは、システム管理タスクを自動化するのに非常に便利です。以下は、Bashスクリプトからmariabackupを実行し、いくつかのオプションを指定する例です。

#!/bin/bash

BACKUP_DIR="/var/backup/mydb"
BACKUP_USER="backup_user"
BACKUP_PASSWORD="your_secret_password"
PARALLEL_THREADS=4
DATABASE_LIST=("mydatabase1" "mydatabase2")

# すべてのデータベースをバックアップする
echo "すべてのデータベースをバックアップします..."
mariabackup --backup --target-dir="$BACKUP_DIR/all" --all-databases --user="$BACKUP_USER" --password="$BACKUP_PASSWORD" --parallel="$PARALLEL_THREADS" --compress

# 特定のデータベースのみをバックアップする
echo "\n特定のデータベースのみをバックアップします..."
MARIA_DBS=$(IFS=,; echo "${DATABASE_LIST[*]}")
mariabackup --backup --target-dir="$BACKUP_DIR/specific" --databases="$MARIA_DBS" --user="$BACKUP_USER" --password="$BACKUP_PASSWORD"

echo "バックアップ処理が完了しました。"

このBashスクリプトでは、変数を使用してバックアップ先のディレクトリ、ユーザー名、パスワード、並列処理数、バックアップするデータベースのリストなどを定義しています。これらの変数をmariabackupコマンドのオプションとして展開することで、柔軟なバックアップ処理を実現できます。

  • セキュリティ
    Bashスクリプトでも、パスワードを直接記述することは避けるべきです。.my.cnfファイルを使用したり、プロンプトから入力させたりするなど、より安全な方法を検討してください。
  • エラー処理
    上記の例では簡単な出力のみですが、より堅牢なスクリプトでは、コマンドの終了ステータス ($?) を確認し、エラー発生時の処理を追加することが重要です。
  • コマンドの組み立て
    文字列連結や配列の展開を利用して、複雑なmariabackupコマンドを動的に生成できます。
  • 変数の利用
    スクリプト内で変数を定義し、それをオプションの値として使用することで、設定の変更が容易になります。


設定ファイル (Configuration Files) の利用

mariabackupは、コマンドラインオプションだけでなく、設定ファイル(通常は my.cnf や、--defaults-file--defaults-extra-file オプションで指定されるファイル)からオプションを読み込むことができます。

  • 例 (Python)
  • 利点
    • オプションの管理が一元化され、スクリプトの変更なしに設定を調整できます。
    • 頻繁に使用するオプションをデフォルトで設定しておくことで、コマンドラインが簡潔になります。
    • パスワードなどの機密情報を設定ファイルに保存し、ファイルへのアクセス権を適切に管理することで、スクリプト内に直接記述するよりも安全な場合があります(ただし、ファイル自体の保護は重要です)。
  • プログラミングの観点
    プログラムやスクリプト内で、mariabackupの実行時に必要なオプションを直接指定する代わりに、共通の設定ファイルを用意し、それを参照させる方法があります。
import subprocess

def run_mariabackup_with_config(target_dir, config_file=None, all_databases=False):
    command = ["mariabackup", "--backup", f"--target-dir={target_dir}"]
    if config_file:
        command.extend(["--defaults-file", config_file])
    if all_databases:
        command.append("--all-databases")

    try:
        result = subprocess.run(command, capture_output=True, text=True, check=True)
        print("MariaBackupが成功しました:")
        print(result.stdout)
    except subprocess.CalledProcessError as e:
        print(f"MariaBackupでエラーが発生しました (終了コード: {e.returncode}):")
        print(e.stderr)
    except FileNotFoundError:
        print("エラー: mariabackupコマンドが見つかりません。")

if __name__ == "__main__":
    backup_dir = "/var/backup/mydb"
    config_file_path = "/etc/my_backup.cnf"  # 設定ファイルのパス

    # 設定ファイルを使用してすべてのデータベースをバックアップ
    run_mariabackup_with_config(target_dir=backup_dir, config_file=config_file_path, all_databases=True)

この例では、run_mariabackup_with_config関数が --defaults-file オプションを使用して設定ファイルを指定しています。

オーケストレーションツールとの連携

より複雑なバックアップ戦略や、複数のサーバーのバックアップ管理を行う場合、Ansible、Chef、Puppetなどのオーケストレーションツールと連携することが考えられます。

  • 例 (Ansible)
  • 利点
    • 複数のサーバーに対するバックアップ設定、実行、監視を一元的に管理できます。
    • スケジュールに基づいた自動バックアップや、バックアップ後の検証、ローテーションなどの複雑なワークフローを構築できます。
    • 冪等性(同じ操作を何度実行しても結果が変わらない性質)を持つため、安定した自動化が可能です。
  • プログラミングの観点
    これらのツールは、バックアップ処理を含む様々なシステム管理タスクを自動化するための機能を提供します。mariabackupの実行も、これらのツールが提供するモジュールやタスクとして組み込むことができます。
- name: Run MariaBackup
  hosts: database_servers
  tasks:
    - name: Create backup directory
      file:
        path: /var/backup/mydb
        state: directory
        owner: mysql
        group: mysql
        mode: '0755'
      become: true

    - name: Execute mariabackup
      command:
        cmd: mariabackup --backup --target-dir=/var/backup/mydb --all-databases --user=backup_user --password='your_password' --parallel=4
      become: true

このAnsible Playbookは、database_serversグループに属するホストに対して、バックアップディレクトリを作成し、mariabackupコマンドを実行するタスクを定義しています。

バックアップ管理専用ツールとの連携

ZRM (Zmanda Recovery Manager for MySQL) や Percona XtraBackup Enterpriseなどの、MariaDBやMySQLのバックアップとリカバリに特化した管理ツールを利用することも考えられます。


  • これらのツールは通常、独自のCLIや設定ファイルを持ち、それらを通じてバックアップジョブを定義、スケジュールします。具体的なプログラミングというよりは、ツールのAPIやCLIを利用した自動化が中心となります。
  • 利点
    • バックアップ戦略の設計、設定、実行、監視が容易になります。
    • 増分バックアップ、ポイントインタイムリカバリ、暗号化、圧縮など、高度なバックアップ機能を利用できます。
    • バックアップの整合性チェックやリストアのテスト機能を提供している場合があります。
  • プログラミングの観点
    これらのツールは、バックアップのスケジュール管理、実行、監視、リストアなどをGUIやCLIを通じて行う機能を提供しており、独自のAPIや設定ファイルを持つ場合があります。

クラウドプロバイダーのマネージドバックアップサービス

AWS、GCP、Azureなどのクラウドプロバイダーは、マネージドなデータベースサービスを提供しており、多くの場合、自動バックアップ機能やポイントインタイムリカバリ機能が組み込まれています。

  • 例 (AWS CLI)
  • 利点
    • バックアップインフラの管理が不要になり、運用負荷が軽減されます。
    • 高可用性、耐久性、スケーラビリティが確保されたバックアップ環境を利用できます。
    • GUIベースの管理コンソールからも操作が可能です。
  • プログラミングの観点
    これらのサービスのバックアップ設定やリストア操作は、クラウドプロバイダーのCLIツールやSDK(例: AWS CLI、Google Cloud CLI、Azure CLI、各言語用のSDK)を通じて行うことができます。
# RDS MySQLインスタンスのスナップショットを作成
aws rds create-db-snapshot --db-instance-identifier my-db-instance --db-snapshot-identifier my-manual-snapshot

# Aurora MySQLクラスターのスナップショットをリストア
aws rds restore-db-cluster-from-snapshot --snapshot-identifier my-manual-snapshot --db-cluster-identifier my-restored-cluster