【MariaDB】バックアップ/リストア mysqldump編

【MariaDB】バックアップ/リストア mysqldump編

データベースのバックアップとリストアは、システム管理者や開発者にとって重要な業務です。本ブログではMariaDBでのバックアップとリストアの基本的な方法を、初心者/中級者向けに紹介します。

MariaDBのバックアップ方法には主に「バックアップコマンド」と「mysqldump」がありますが、本ブログでは「mysqldump」を紹介します。

【MariaDB】mysqldumpとは

mysqldumpは、MariaDBに含まれるバックアップ用コマンドラインツールです。データをSQL形式のファイルにエクスポートし、リストア時にそのファイルをインポートして復元します。

  • 主な特徴
    • SQLスクリプト形式:読みやすくバックアップファイルの編集が可能
    • 軽量かつポータブル:別の環境にデータを簡単に移行できる
    • 多様なバックアップ対象:特定のテーブル/データベース/全データベースを選択可能
  • 利用場面
    • 簡単にデータを移行したい場合
    • テキスト形式で編集や変更が必要な場合

【MariaDB】バックアップの基本

基本コマンド

特定のデータベースをバックアップする方法

C:\>mysqldump -u root -p test_db > H:\Backup\test_db_backup.sql
  • -u root:ユーザー名(ここではroot)
  • -p:パスワードを入力するプロンプトを表示
  • test_db:バックアップ対象のデータベース名
  • > H:\Backup\test_db_backup.sql:バックアップファイルの出力先

■実行例

C:¥>mysqldump -u root -p test_db > H:\Backup\test_db_back.sql
Enter password: ******

C:\>

■test_db_back.sqlの内容(例)

              ・
              ・
              ・
--
-- Table structure for table `customers`
--

DROP TABLE IF EXISTS `customers`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `customers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_name` text NOT NULL,
  `customer_address` text DEFAULT NULL,
  `customer_email` text DEFAULT NULL,
  `customer_age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `customers`
--

LOCK TABLES `customers` WRITE;
/*!40000 ALTER TABLE `customers` DISABLE KEYS */;
INSERT INTO `customers` VALUES
(1,'田中 太郎','東京都新宿区1-2-3','tanaka.taro@example.com',30),
(2,'佐藤 花子','大阪府大阪市北区4-5-6','sato.hanako@example.com',25),
(3,'鈴木 次郎','北海道札幌市中央区7-8-9','suzuki.jiro@example.com',40),
(4,'高橋 美咲','福岡県福岡市博多区10-11-12','takahashi.misaki@example.com',35),
(5,'山本 健','愛知県名古屋市中区13-14-15','yamamoto.ken@example.com',50);
/*!40000 ALTER TABLE `customers` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
              ・
              ・
              ・

すべてのデータベースをバックアップする方法

  • –all-databasesオプションを指定する
C:\>mysqldump -u root -p --all-databases > H:\Backup\all_databases_backup.sql

特定のテーブルだけをバックアップ

C:\>mysqldump -u root -p test_db table1 table2 > H:\Backup\tables_backup.sql

圧縮したバックアップ

  • バックアップを7-zip等の圧縮ソフトで圧縮するとディスク容量を節約できます。
C:¥>mysqldump -u root -p test_db | 7z a -si H:\Backup\test_db_backup.7z -mx=9
  • 説明
    • mysqldump
      • MariaDBのtest_dbデータベースをエクスポートします
      • -u root -pでユーザー名を指定し、プロンプトでパスワードを入力します
    • |(パイプ)
      • mysqldumpの出力を直接7-zipに渡します
    • 7-zipのオプション
      • a
        圧縮ファイルを作成します(add)
      • -si
        標準入力(Standard Input)を使用してデータを受け取ります
      • test_db_backup.7z
        作成される圧縮ファイル名
      • -mx=9
        圧縮レベルを最大(9)に指定。但し、圧縮スピードを優先したい場合は -mx=1 を指定
  • バックアップファイルをフォルダ単位で管理している場合、フォルダ全体を圧縮すると便利です。
7z a -t7z backup_folder.7z H:\backup_folder -mx=9
  • backup_folder.7z:出力するフォルダ名
  • H:\backup_folder:圧縮するフォルダ名

バックアップのオプション

mysqldumpには多数のオプションがあり、要件に応じて使い分けることができます。

  • ロックを防ぐ
    –single-transaction:バックアップ中にテーブルがロックされるのを防ぎたい場合
    • 推奨用途
      InnoDBストレージエンジンを使用している場合
c:\>mysqldump -u root -p --single-transaction test_db > H:\Backup\test_db_backup.sql
  • データだけをバックアップ
    –no-create-info:データベース構造を除きデータのみをバックアップしたい場合
c:\>mysqldump -u root -p --no-create-info test_db > H:\Backup\data_only.sql
  • スキーマのみをバックアップ
    –no-data:テーブルの構造だけをバックアップしたい場合
c:\>mysqldump -u root -p --no-data test_db > H:\Backup\schema_only.sql
  • 特定の条件でデータをバックアップ
    –where:条件付きでデータをバックアップ(例: 特定の日付以降のデータ)したい場合
c:\>mysqldump -u root -p --where="created_at > '2025-01-01'" test_db > H:\Backup\filtered_backup.sql

【MariaDB】リストアの基本

基本コマンド

リストアするにはリストア先のデータベースが存在している必要があるので、無い場合は作成しておく必要があります。データベース名は変更してもかまいません。

バックアップした特定のSQLファイルのリストア

c:\>mysql -u root -p test_db < H:\Backup\test_db_backup.sql

圧縮ファイルのリストア

圧縮されたバックアップファイル(例: backup.7z)を解凍し、解凍したSQLファイルをmysqlコマンドでリストアします

  • 圧縮されたバックアップファイル(例: backup.7z)の解凍
c:¥>7z x H:\Backup\test_db_backup.7z -oH:\Backup
C:\>mysql -u root -p test_db < H:\Backup\test_db_backup
  • 説明
    • 7z.exe x
      解凍(extract)コマンド
    • H:\Backup\test_db_backup.7z
      圧縮したファイル
    • -oH:\Backup
      解凍先フォルダ

  • 解凍したSQLファイルのリストア
C:\>mysql -u root -p test_db < H:\Backup\test_db_backup
  • 解凍とリストアを一つのコマンドにまとめる事もできます
c:¥>7z e -so D:\Backup\test_db_backup.7z | mysql -u root -p test_db
  • 説明
    • e -so
      解凍し、内容を標準出力(stdout)に送るオプション。
    • |
      解凍した内容を直接mysqlに渡します。

mysqldumpバックアップ データの整合性

mysqldumpはMariaDBサーバーと通信してデータを取得するツールであり、通常は稼働中のデータベースサーバーから直接バックアップを取得します。

ただし、MariaDBを停止すべきケースもあるので紹介します。

MariaDBを停止させないでバックアップを取得する方法

  • –single-transaction オプションを使用する
    バックアップの開始時にトランザクションを開始し、そのトランザクションのスナップショットを基にデータをエクスポートします。このオプションは、InnoDBで使用する場合に非常に有効です。
    ※MyISAMテーブルではこのオプションは有効ではありません。
c:¥>mysqldump -u root -p --single-transaction test_db > H:\Backup\test_db_backup.sql
  • テーブルをロックする(デフォルト)
    テーブルをロックしてデータの変更を防ぎます(デフォルト動作)。ただし、全テーブルがロックされるため、バックアップ中のクエリ実行に影響が出ることがあります。
    ※データの整合性よりもパフォーマンスを優先する場合は、–skip-lock-tables オプションを
     使用します。
c:¥>mysqldump -u root -p --lock-tables test_db > H:\Backup\test_db_backup.sql

MariaDBを停止させるべきケース

MariaDBを停止してバックアップを取る必要があるのは以下のケースに限られます

  1. データの完全性を100%確保したい場合
    サーバーを停止させることで完全な状態でバックアップを取得できます。ただし、停止中はMariaDBを使用できなくなるため、メンテナンスウィンドウを確保する必要があります。

  2. ファイルベースのバックアップを使用する場合
    データディレクトリを丸ごとコピーするファイルベースのバックアップを取る場合は、MariaDBを停止させる必要があります。

    但しxtrabackupのようなツールを使用すると、停止させずにファイルベースのバックアップが可能です。

まとめ

mysqldumpはそのシンプルさと柔軟性からMariaDBのバックアップツールとして非常に便利です。

基本的なバックアップ・リストア手順だけでなくオプションを活用して効率を最大化し、セキュリティやパフォーマンスを考慮した運用が可能です。

タイトルとURLをコピーしました