Mysqldump de MySQL database wo betsu no server ni saisoku iko suru hoho

MySQLデータベースを別のサーバーに移行することは、特にダウンタイムを最小限に抑え高速なパフォーマンスを目指す場合、難しい課題となります。

この作業に最も人気のあるツールの1つがmysqldumpで、これはMySQLが提供するデータベースのバックアップと復元のためのユーティリティです。この記事では、mysqldumpを使ってデータベースを移行する方法と、このプロセスを自動化するスクリプトの作成方法をご紹介します。

MySQLデータベースを別のサーバーに移行し、データを複製する。

前提条件

  • MySQLがインストールされたソースサーバーと宛先サーバー
  • MySQLのrootクレデンシャル、または両サーバー上で十分な権限を持つアカウント
  • 両サーバーへのSSHアクセス、またはDBサーバーが受信接続を許可していること(同一マシン上にない場合)

mysqldumpを使ってデータベースをエクスポートする

移行プロセスの最初のステップは、ソースデータベースのバックアップを作成することです。これにはmysqldumpを使用します。mysqldumpは、宛先サーバー上でデータベース構造とデータを再作成するために必要なすべてのコマンドを含むSQLスクリプトを作成します。

ソースサーバーにログインし、次のコマンドを実行してデータベースの圧縮バックアップを作成します:

bash
mysqldump -u [username] -p --single-transaction --extended-insert --quick --lock-tables=false [database_name] | gzip > [backup_file].sql.gz

[username][database_name][backup_file]を、それぞれあなたのMySQLユーザー名、移行したいデータベース名、希望するバックアップファイル名に置き換えてください。

このコマンドは、データの整合性を保証するために--single-transactionフラグを、メモリ使用量を削減するために--quickを、エクスポート中のテーブルロックを防ぐために–lock-tables=falseを使用します。

最も重要なパラメータは–extended-insertです。これにより、エクスポートしたSQLファイルのインポートが宛先サーバー上で10〜15倍速くなります。

バックアップファイルを宛先サーバーに転送する

バックアップを作成したら、もう一方のデータベースサーバーにインポートできます。

  • 圧縮されたgzipファイルをサーバーにコピーしてインポートする
  • ファイルを解凍し、SSH経由でMySQLを使ってDBサーバーにロードする

宛先サーバーへの転送には、SCP、SFTP、rsyncなどのツールを使用できます。たとえば、SCPを使用するには:

bash
scp [backup_file].sql.gz [destination_user]@[destination_ip]:/path/to/destination

[backup_file][destination_user][destination_ip]/path/to/destinationを適切な値に置き換えてください。

宛先サーバー上でデータベースをインポートする

バックアップファイルを転送したら、宛先サーバーにログインし、次のコマンドを実行してデータベースをインポートします:

bash
gunzip < [backup_file].sql.gz | mysql -u [username] -p [database_name]

[username][database_name][backup_file]を、それぞれあなたのMySQLユーザー名、移行したいデータベース名、バックアップファイル名に置き換えてください。

データベース移行スクリプトのダウンロード

MySQLデータベースの移行プロセスを自動化するには、私たちがここwp-staging.comでDigitalOceanにホスティングされたmanaged dbへのデータベース移行に使用したこのbashスクリプトを利用できます。(WP Stagingが現在データベース移行を実行できるため、もう使用していません):

bash
#!/bin/sh
# migrate.sh

sourceUser=""
sourcePassword=""
sourceHostname=""
sourcePort=""
sourceDatabase=""

destinationUser=""
destinationPassword=""
destinationHostname=""
destinationPort=""
destinationDatabase=""

echo "Exporting $sourceDatabase database to ./wp-staging.com.sql"

start_export=`date +%s`

mysqldump -P $sourcePort -h $sourceHostname -u $sourceUser  -p$sourcePassword --set-gtid-purged=OFF --extended-insert --single-transaction --skip-lock-tables --column-statistics=0 $sourceDatabase > ./wp-staging.com.sql

# Done creating a dump of wp-staging.com

end_export=`date +%s`

echo "Database exported in" $((end_export-start_export)) "seconds"

echo "Importing Database to... "

start_import=`date +%s`

mysql -u $destinationUser -p$destinationPassword -h $destinationHostname -P $destinationPort $destinationDatabase < ./wp-staging.com.sql

# Done importing the dump to managed db

end_import=`date +%s`

echo "Database imported in" $((end_import-start_import)) "seconds"

echo "Total runtime: " $((end_export-start_export+end_import-start_import)) "seconds"

ファイル上部にあるデータベースクレデンシャルの値を、ソースと宛先のデータベースに適した情報に置き換えてください。

スクリプトを実行する前に、ソースと宛先のデータベースがアクセス可能であることを確認してください。

次に、スクリプトに実行権限を付与します:

bash
chmod +x migrate.sh

スクリプトを実行して移行を行います:

bash
./migrate.sh

このスクリプトは、mysqldumpを使ってソースデータベースをエクスポートし、mysqlコマンドを使って宛先サーバーにデータベースをインポートし、その後バックアップファイルを削除してクリーンアップします。

関連記事

Rene Hermenau

著者: Rene Hermenau

著者について: René Hermenau は WP STAGING の創設者です。WordPress のバックアップ、ステージング、移行、データベース処理、安全なデプロイメントワークフローに取り組んでいます。