【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 を指定
- a
- mysqldump
- バックアップファイルをフォルダ単位で管理している場合、フォルダ全体を圧縮すると便利です。
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
解凍先フォルダ
- 7z.exe x
- 解凍した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に渡します。
- e -so
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を停止してバックアップを取る必要があるのは以下のケースに限られます
- データの完全性を100%確保したい場合
サーバーを停止させることで完全な状態でバックアップを取得できます。ただし、停止中はMariaDBを使用できなくなるため、メンテナンスウィンドウを確保する必要があります。 - ファイルベースのバックアップを使用する場合
データディレクトリを丸ごとコピーするファイルベースのバックアップを取る場合は、MariaDBを停止させる必要があります。
但しxtrabackupのようなツールを使用すると、停止させずにファイルベースのバックアップが可能です。
まとめ
mysqldumpはそのシンプルさと柔軟性からMariaDBのバックアップツールとして非常に便利です。
基本的なバックアップ・リストア手順だけでなくオプションを活用して効率を最大化し、セキュリティやパフォーマンスを考慮した運用が可能です。