目次:
- Mysqldumpコマンド構文
- 単一のMySQLデータベースのバックアップ
- 複数のMySQLデータベースのバックアップ
- すべてのMySQLデータベースのバックアップ
- すべてのMySQLデータベースを個別のファイルにバックアップします
- 圧縮されたMySQLデータベースバックアップを作成する
- タイムスタンプを使用してバックアップを作成する
- MySQLダンプの復元
- 完全なMySQLダンプから単一のMySQLデータベースを復元する
- 1つのコマンドでMySQLデータベースをエクスポートおよびインポートする
- Cronでバックアップを自動化する
- 結論
このチュートリアルでは、mysqldumpユーティリティを使用して、コマンドラインからMySQLまたはMariaDBデータベースをバックアップおよび復元する方法について説明します。
mysqldumpユーティリティによって作成されるバックアップファイルは、基本的に元のデータベースを再作成するために使用できるSQLステートメントのセットです。 mysqldumpコマンドは、CSVおよびXML形式のファイルも生成できます。
mysqldumpユーティリティを使用して、MySQLデータベースを別のMySQLサーバーに転送することもできます。
Mysqldumpコマンド構文
mysqldumpコマンドの使用方法に入る前に、基本的な構文を確認してみましょう。
mysqldumpユーティリティの式は次の形式を取ります。
mysqldump > file.sql
-
options
-mysqldumpオプションfile.sql
ダンプ(バックアップ)ファイル
mysqldumpコマンドを使用するには、MySQLサーバーがアクセス可能で実行されている必要があります。
単一のMySQLデータベースのバックアップ
mysqldumpツールの最も一般的な使用例は、単一のデータベースのバックアップです。
たとえば、ユーザー
root
を使用してdatabase_nameという名前の
database_name
バックアップを作成し、database_name.sqlという名前のファイルに保存するには、次のコマンドを実行します。
mysqldump -u root -p database_name > database_name.sql
ルートパスワードの入力を求められます。 認証に成功すると、ダンププロセスが開始されます。 データベースのサイズによっては、プロセスに時間がかかる場合があります。
mysqldump database_name > database_name.sql
複数のMySQLデータベースのバックアップ
1つのコマンドで複数のMySQLデータベースをバックアップするには、
--database
オプションの後にバックアップするデータベースのリストを使用する必要があります。 各データベース名はスペースで区切る必要があります。
mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql
上記のコマンドは、両方のデータベースを含むダンプファイルを作成します。
すべてのMySQLデータベースのバックアップ
--all-databases
オプションを使用して、すべてのMySQLデータベースをバックアップします。
mysqldump -u root -p --all-databases > all_databases.sql
前の例と同じように、上記のコマンドはすべてのデータベースを含む単一のダンプファイルを作成します。
すべてのMySQLデータベースを個別のファイルにバックアップします
mysqldump
ユーティリティには、すべてのデータベースを個別のファイルにバックアップするオプションはありませんが、単純なbash
FOR
ループで簡単に実現できます。
for DB in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $DB > "$DB.sql"; done
上記のコマンドは、データベース名をファイル名として使用して、データベースごとに個別のダンプファイルを作成します。
圧縮されたMySQLデータベースバックアップを作成する
データベースのサイズが非常に大きい場合は、出力を圧縮することをお勧めします。 これを行うには、単に出力を
gzip
ユーティリティにパイプし、次に示すようにファイルにリダイレクトします。
mysqldump database_name | gzip > database_name.sql.gz
タイムスタンプを使用してバックアップを作成する
mysqldump database_name > database_name-$(date +%Y%m%d).sql
上記のコマンドは、次の形式のファイルを作成します
database_name-20180617.sql
MySQLダンプの復元
mysql
ツールを使用してMySQLダンプを復元できます。 コマンドの一般的な構文は次のとおりです。
mysqld database_name < file.sql
ほとんどの場合、インポートするデータベースを作成する必要があります。 データベースが既に存在する場合、最初に削除する必要があります。
次の例では、最初のコマンドはdatabase_nameという名前の
database_name
を作成してから、そこにダンプ
database_name.sql
をインポートし
database_name.sql
。
mysql -u root -p -e "create database database_name";
mysql -u root -p database_name < database_name.sql
完全なMySQLダンプから単一のMySQLデータベースを復元する
mysql --one-database database_name < all_databases.sql
1つのコマンドでMySQLデータベースをエクスポートおよびインポートする
あるデータベースからダンプファイルを作成してから、別のMySQLデータベースにバックアップをインポートする代わりに、次のワンライナーを使用できます。
mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name
上記のコマンドは、出力をリモートホスト上のmysqlクライアントにパイプし、
remote_database_name
という名前のデータベースにインポートします。 コマンドを実行する前に、データベースがリモートサーバーに既に存在することを確認してください。
Cronでバックアップを自動化する
データベースのバックアッププロセスの自動化は、指定された時間にmysqldumpコマンドを実行するcronジョブを作成するのと同じくらい簡単です。
cronjobを使用してMySQLデータベースの自動バックアップを設定するには、次の手順に従います。
-
ユーザーのホームディレクトリに
.my.cnf
という名前のファイルを作成します。sudo nano ~/.my.cnf
次のテキストをコピーして、.my.cnfファイルに貼り付けます。
user = dbuser password = dbpasswd
dbuser
とdbpasswd
をデータベースユーザーとユーザーのパスワードに置き換えることを忘れないでください。ユーザーのみがアクセスできるように、資格情報ファイルのアクセス許可を制限します。
chmod 600 ~/.my.cnf
バックアップを保存するディレクトリを作成します。
mkdir ~/db_backups
ユーザーのcrontabファイルを開きます。
crontab -e
データベース名
mydb
バックアップを毎日午前3時に作成する次のcronジョブを追加します。0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +%Y%m%d).sql
username
を実際のユーザー名に置き換えることを忘れないでください。
別のcronjobを作成して、30日より古いバックアップを削除することもできます。
find /path/to/backups -type f -name "*.sql" -mtime +30 -delete
もちろん、バックアップの場所とファイル名に従ってコマンドを調整する必要があります。 findコマンドの詳細については、コマンドラインガイドを使用してLinuxでファイルを検索する方法をご覧ください。
結論
このチュートリアルでは基本事項のみを説明しますが、mysqldumpユーティリティを使用してコマンドラインからMySQLデータベースを作成および復元する方法を学習したい人にとっては良いスタートになるはずです。
また、MySQLルートパスワードを忘れた場合にリセットする方法についてのチュートリアルを確認することもできます。
mysql mariadbバックアップmysqldump