Main Logo
hero-background.jpg

MySQLのコマンドバックアップ (備忘録)

MySQLデータベースをコマンドラインでバックアップする方法の備忘録です。

mysqldumpコマンドの基本的な使い方から、特定のデータベース、複数のデータベース、全データベースのバックアップ、そして復元方法までを解説します。


MySQLのコマンドバックアップ (備忘録)

MySQLデータベースのバックアップコマンドを忘れてしまうので、コマンドラインツールmysqldumpを使ったバックアップと復元方法についてまとめます。

環境

  • Ubuntu24.04 LTS
  • mysql Ver 15.1 Distrib 10.11.13-MariaDB

mysqldumpコマンドの概要

mysqldumpは、MySQLデータベースの構造とデータをSQL形式のファイルとしてエクスポートするためのクライアントプログラムです。
このSQLファイルでデータベースを復元できます。

まずは基本的なコマンド

バックアップの前MySQLの基本的なコマンド一覧。

テーブル操作

1. MySQLへのログイン

mysql -u [ユーザー名] -p
例rootユーザーでログイン
mysql -u root -p

パスワードの入力を求められたら入力します。

2. データベースの表示・作成

現在存在するデータベースの一覧を表示します。

SHOW DATABASES;

新しいデータベースを作成します。

作成
CREATE DATABASE [データベース名] CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
作成例
CREATE DATABASE new_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3. データベースの選択

操作したいデータベースを選択します。

USE [データベース名];
例new_databaseを選択
USE new_database;

4. テーブルの表示

選択したデータベース内のテーブル一覧を表示します。

SHOW TABLES;

ユーザー操作

5. ユーザーの作成

新しいMySQLユーザーを作成し、パスワードを設定します。

CREATE USER '[ユーザー名]'@'localhost' IDENTIFIED BY '[パスワード]';

例: new_userというユーザーをlocalhostからアクセス可能にし、パスワードをnew_passwordにする場合

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

7. ユーザーのパスワード変更

既存ユーザーのパスワードを変更します。

ALTER USER '[ユーザー名]'@'localhost' IDENTIFIED BY '[新しいパスワード]';

例: new_userのパスワードをchanged_passwordに変更する場合

ALTER USER 'new_user'@'localhost' IDENTIFIED BY 'changed_password';

8. データベースへのアクセス権付与

作成したユーザーに特定のデータベースへのアクセス権を付与します。

GRANT ALL PRIVILEGES ON [データベース名].* TO '[ユーザー名]'@'localhost';

例: new_usernew_databaseへの全ての権限を付与する場合

GRANT ALL PRIVILEGES ON new_database.* TO 'new_user'@'localhost';

9. 権限の反映

権限の変更をMySQLに反映させます。

FLUSH PRIVILEGES;

10. アクセス権の種類

GRANT文で付与できる主なアクセス権の種類は以下の通りです。

権限の種類説明
ALL PRIVILEGES全ての権限を付与します。
SELECTデータの読み取りを許可します。
INSERTデータの挿入を許可します。
UPDATEデータの更新を許可します。
DELETEデータの削除を許可します。
CREATEデータベースやテーブルの作成を許可します。
ALTERテーブル構造の変更を許可します。
DROPデータベースやテーブルの削除を許可します。
INDEXインデックスの作成・削除を許可します。
REFERENCES外部キー制約の作成を許可します。
GRANT OPTION他のユーザーに権限を付与する権限を許可します。

バックアップの基本的な使い方

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

最も一般的なコマンド、データベース全体をバックアップする方法です。 基本的にはデータベース名を指定して実行します。

mysqldump -u [ユーザー名] -p [データベース名] > [出力ファイル名].sql

例: mydatabaseというデータベースをbackup.sqlにバックアップする場合

mysqldump -u root -p mydatabase > mydatabase_backup.sql

※コマンド実行後、パスワードの入力を求められます。

2. 複数のデータベースをバックアップする

複数のデータベースを一度にバックアップしたい場合は、--databasesオプションを使用します。

mysqldump -u [ユーザー名] -p --databases [データベース名1] [データベース名2] > [出力ファイル名].sql

例: db1db2multi_db_backup.sqlにバックアップする場合

mysqldump -u root -p --databases db1 db2 > multi_db_backup.sql

3. 全てのデータベースをバックアップする

MySQLサーバー上の全てのデータベース(mysqlinformation_schemaperformance_schemaなどのシステムデータベースを含む)をバックアップするには、--all-databasesオプションを使用します。

注意

システムデータベースも含まれるため、ファイルサイズが大きくなる可能性があります。

mysqldump -u [ユーザー名] -p --all-databases > all_databases_backup.sql

バックアップファイルの復元

バックアップしたSQLファイルからデータベースを復元するには、mysqlコマンドを使用します。

バックアップファイルの復元

バックアップしたSQLファイルからデータベースを復元するには、mysqlコマンドを使用します。

1. データベースを復元する

既存のデータベースに復元する場合、または新しいデータベースを作成して復元する場合。

mysql -u [ユーザー名] -p [データベース名] < [入力ファイル名].sql

例: mydatabase_backup.sqlmydatabaseに復元する場合

mysql -u root -p mydatabase < mydatabase_backup.sql
注意

既存データベースへの復元 既存のデータベースに復元する場合、データが上書きされる可能性があります。事前に確認してください。

2. 全てのデータベースを復元する

--all-databasesでバックアップしたファイルを復元する場合、データベース名を指定せずにmysqlコマンドを実行します。

mysql -u [ユーザー名] -p < all_databases_backup.sql

よく使うオプション

オプション説明
-u [username]MySQLに接続するユーザー名を指定します。
-pパスワードの入力を求めます。-p[パスワード]のように直接記述することも可能
-h [ホスト名]MySQLサーバーのホスト名を指定します。デフォルトはlocalhostです。
--no-dataテーブル構造のみをバックアップし、データは含めません。
--add-drop-tableCREATE TABLEステートメントの前にDROP TABLE IF EXISTSステートメントを追加します。復元時に既存のテーブルを削除してから作成します。

自動バックアップの設定 (cron)

定期的に自動バックアップを実行するには、Linuxのcronジョブを使います。

例: 毎日午前3時にmydatabaseをバックアップするcron設定

# crontab -e で編集
0 3 * * * mysqldump -u root -p'your_password' mydatabase > /path/to/backup/mydatabase_$(date +\%Y\%m\%d).sql

世代バックアップ

世代管理する場合はバックアップ作成->古いものを削除するコマンドで対応させます。
本番前にテストすることをお勧めします。

0 3 * * * mysqldump -u root -p'your_password' mydatabase > /path/to/backup/mydatabase_$(date +\%Y\%m\%d).sql && ls -1t /path/to/backup/mydatabase_*.sql | tail -n +4 | xargs -r rm --

テスト用

世代バックアップのテスト用コマンドです。何が削除されるのか確認できます。

ls -1t /path/to/backup/mydatabase_*.sql | tail -n +4
パスワードの扱い

cronでパスワードを直接記述する場合は、シングルクォーテーションで囲むなど、シェルスクリプトの記述に注意してください。セキュリティを考慮し、パスワードファイルを使用する方法も検討してください。

まとめ

mysqldumpコマンドはMySQLデータベースのバックアップと復元を行うための強力なツールです。これらのコマンドを理解し、定期的なバックアップを習慣づけることで、データの損失リスクを大幅に軽減できます。

関連記事

コメントを読み込み中...