このチュートリアルでは、Compute Engine で動作する MySQL データベースのクローンを作成する 2 つの方法について説明します。1 つ目の方法では、永続ディスクのスナップショットを使用します。2 つ目の方法では、ネイティブの MySQL エクスポートとインポートを使用し、Cloud Storage を使用してエクスポート ファイルを転送します。Cloud Storage とは Google Cloud のオブジェクト ストレージ サービスのことです。セキュリティと可用性が高く、耐久性があり、わかりやすいファイルの保存手段です。
クローニングとは、データベースを別のサーバーにコピーするプロセスのことです。データベースのコピーは、ソース データベースから独立し、ポイントインタイム スナップショットとして保存されます。本番環境サーバーに負荷をかけることや、本番環境データの整合性を損なうことなく、クローンを作成したデータベースをさまざまな目的に使用できます。その目的には、次のようなものがあります。
- 分析クエリの実行。
- アプリの負荷テストや統合テスト。
- データ ウェアハウスに入力するデータの抽出。
- データに対するテストの実施。
このチュートリアルで説明するクローンの作成方法には、それぞれにメリットとデメリットがあります。目的に適した方法は状況によって異なります。次の表に、重要な検討事項をいくつか示します。
検討事項 | 方法 1: ディスクのスナップショット | 方法 2: Cloud Storage を使用するエクスポートおよびインポート |
---|---|---|
MySQL インスタンスのディスク容量の追加 | 追加のディスク容量は不要 | エクスポート ファイルの作成時および復元時に追加容量が必要 |
クローン作成時のソース MySQL インスタンスへの負荷の追加 | 追加の負荷なし | エクスポート ファイルの作成時およびアップロード時に、CPU と I/O への追加の負荷あり |
クローン作成にかかる時間 | 大規模なデータベースの場合は比較的短い | 大規模なデータベースの場合は比較的長い |
Google Cloud の外部にある MySQL インスタンスからクローンを作成できるか | × | ○ |
複雑さ | クローン作成したディスクの接続に複雑なコマンド シーケンスあり | クローン作成用のコマンドセットは比較的簡単 |
既存のバックアップ システムを活用できるか | ○(バックアップ システムが Google Cloud ディスクのスナップショットを使用している場合) | ○(バックアップ システムが Cloud Storage にファイルをエクスポートできる場合) |
クローン作成の単位 | ディスク全体のクローン作成のみ | 指定したデータベースのクローン作成のみ |
データの整合性 | スナップショット時点での整合性 | エクスポート時点での整合性 |
クローンの作成元として Cloud SQL を使用できるか | × | ○(同じバージョンを使用している場合) |
クローンの作成先として Cloud SQL を使用できるか | × | ○ |
このチュートリアルは、Linux コマンドラインと MySQL データベースの管理を理解していることを前提としています。
目標
- Google Cloud で MySQL データベースを実行する方法を習得します。
- セカンダリ ディスク上にデモ データベースを作成する方法を習得します。
- Compute Engine のディスク スナップショットを使用して MySQL データベースのクローンを作成する方法を習得します。
- Cloud Storage を使用してエクスポート ファイルを転送することにより、MySQL データベースのクローンを作成する方法を習得します。
- Cloud Storage を使用してエクスポート ファイルを転送することにより、MySQL データベースのクローンを Cloud SQL に作成する方法を習得します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Compute Engine API を有効にします。 API を有効にする
環境の設定
このチュートリアルを最後まで進めるには、お使いのコンピューティング環境に次のものを設定する必要があります。
- 本番環境データベース サーバーを表す Compute Engine 上の MySQL インスタンス(名前は
mysql-prod
とします)。 - 本番環境データベースの保存用に本番環境サーバーにアタッチする追加ディスク(名前は
mysql-prod-data
とします)。 mysql-prod
にインポートされたEmployees
データベースのコピー。クローンを作成する本番環境データベースをシミュレートします。- テスト環境データベース サーバーを表す Compute Engine 上の MySQL インスタンス(名前は
mysql-test
とします)。このサーバー上にデータベースのクローンを作成します。
次の図は、このアーキテクチャを表しています。
本番環境 VM インスタンスを作成する
本番環境をシミュレートするには、Debian Linux で MySQL を実行する Compute Engine VM インスタンスを設定します。
このチュートリアルの VM インスタンスは、OS とユーザー アカウント用に 50 GB ディスク、データベース ストレージ用に 100 GB ディスクの 2 つのディスクを使用します。
Compute Engine では、ディスクを分けることによるパフォーマンス上のメリットはありません。ディスクのパフォーマンスは、インスタンスにアタッチされているすべてのディスクの合計ストレージ容量と、VM インスタンスの vCPU の合計数によって決まります。したがって、データベースとログファイルは同じディスク上に存在できます。
Cloud Shell を開きます。
優先ゾーンを設定します。
ZONE=us-east1-b REGION=us-east1 gcloud config set compute/zone "${ZONE}"
Compute Engine インスタンスを作成します。
gcloud compute instances create mysql-prod \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --boot-disk-size=50GB \ --boot-disk-device-name=mysql-prod \ --create-disk="mode=rw,size=100,type=pd-standard,name=mysql-prod-data,device-name=mysql-prod-data"
このコマンドは、インスタンスに Google Cloud APIs への完全アクセス権を付与します。さらに、100 GB のセカンダリ ディスクを作成して、インスタンスにアタッチします。このチュートリアルでは高いパフォーマンスを必要としないため、ディスク パフォーマンスの警告は無視してください。
追加ディスクを設定する
本番環境インスタンスにアタッチされている 2 番目のディスクは、本番環境データベースを保存するためのものです。このディスクは空のため、パーティション、フォーマット、マウントを行う必要があります。
Google Cloud コンソールで [VM インスタンス] ページに移動します。
mysql-prod
インスタンスの横に、準備完了を表す緑色のチェックマーク check が表示されていることを確認します。mysql-prod
インスタンスの横にある [SSH] をクリックします。ブラウザが開き、インスタンスに対するターミナル接続が表示されます。ターミナル ウィンドウで、インスタンスに接続されているディスクの一覧を表示します。
lsblk
次のような出力が表示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk └─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk
sdb
という名前のディスク(100 GB)がデータディスクです。sdb
ディスクをフォーマットし、ext4 ファイル システムのパーティションを 1 つ作成します。sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard \ /dev/sdb
データディスクのマウント ポイントとなる MySQL データ ディレクトリを作成します。
sudo mkdir -p /var/lib/mysql
作成したマウント ポイントにディスクを自動的にマウントするには、
/etc/fstab
ファイルに次の記述を追加します。echo "UUID=`sudo blkid -s UUID -o value /dev/sdb` /var/lib/mysql ext4 discard,defaults,nofail 0 2" \ | sudo tee -a /etc/fstab
ディスクをマウントします。
sudo mount -av
MySQL がデータ ディレクトリとして使用できるように、データディスクからすべてのファイルを削除します。
sudo rm -rf /var/lib/mysql/*
MySQL サーバーをインストールする
MySQL Community Edition をダウンロードしてインストールする必要があります。追加のディスクに MySQL データ ディレクトリが作成されます。
mysql-prod
に接続された SSH セッションで、MySQL 構成パッケージをダウンロードしてインストールします。wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
プロンプトが表示されたら、[MySQL Server & Cluster option] を選択し、続いて [mysql-5.7] を選択します。
リストで [Ok] オプションを選択し、パッケージの構成を完了します。
リポジトリのキャッシュを更新し、mysql-community パッケージをインストールします。
sudo apt-get update sudo apt-get install -y mysql-community-server mysql-community-client
データ ディレクトリがすでに存在するという警告が表示されたら、[Ok] を選択します。
root パスワードの入力を求められたら、パスワードを作成して入力します。パスワードはメモするか、安全な場所に一時的に保存します。
サンプル データベースをダウンロードしてインストールする
mysql-prod
インスタンスに接続された SSH セッションで、git をインストールします。sudo apt-get install -y git
Employees
データベース スクリプトが格納された GitHub リポジトリのクローンを作成します。git clone https://github.com/datacharmer/test_db.git
Employees
データベース スクリプト用のディレクトリに移動します。cd test_db
Employees
データベースを作成するスクリプトを実行します。mysql -u root -p -q < employees.sql
プロンプトが表示されたら、前の手順で作成した root パスワードを入力します。
サンプル データベースが機能していることを確認するには、
employees
テーブルの行数をカウントするクエリを実行します。mysql -u root -p -e "select count(*) from employees.employees;"
プロンプトが表示されたら、前の手順で作成した root パスワードを入力します。
次のような出力が表示されます。
+----------+ | count(*) | +----------+ | 300024 | +----------+
テスト VM インスタンスを作成する
このセクションでは、クローン データベースの作成先として、mysql-test
という名前の MySQL VM インスタンスを作成します。このインスタンスの構成は、本番環境インスタンスと同じです。ただし、2 番目のデータディスクは作成しません。代わりに、このチュートリアルの後半でデータディスクをアタッチします。
Cloud Shell を開きます。
テスト用の MySQL インスタンスを作成します。
gcloud compute instances create mysql-test \ --machine-type=n1-standard-2 \ --scopes=cloud-platform \ --boot-disk-size=50GB \ --boot-disk-device-name=mysql-test
このチュートリアルでは高いパフォーマンスを必要としないため、ディスク パフォーマンスの警告は無視してください。
テスト VM インスタンスに MySQL サーバーをインストールする
mysql-test
VM インスタンスにも MySQL Community Edition をダウンロードしてインストールする必要があります。
mysql-test
に接続された SSH セッションで、MySQL 構成パッケージをダウンロードしてインストールします。wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
プロンプトが表示されたら、[MySQL Server & Cluster option] を選択し、続いて [mysql-5.7] を選択します。
リストで [Ok] オプションを選択し、パッケージの構成を完了します。
リポジトリのキャッシュを更新し、mysql-community パッケージをインストールします。
sudo apt-get update sudo apt-get install -y mysql-community-server mysql-community-client
root パスワードの入力を求められたら、パスワードを作成して入力します。パスワードはメモするか、安全な場所に一時的に保存します。
Compute Engine のディスク スナップショットを使用してデータベースのクローンを作成する
Compute Engine で実行される MySQL データベースのクローンを作成する方法の 1 つは、データベースを別のデータディスクに保存し、永続ディスク スナップショットを使用してそのディスクのクローンを作成することです。
永続ディスクのスナップショットを使用すると、ディスク上のデータのポイントインタイム コピーを取得できます。ディスク スナップショットのスケジュールを設定すると、データを自動的にバックアップできます。
このセクションでは、次の操作を行います。
- 本番環境サーバーのデータディスクのスナップショットを作成します。
- スナップショットから新しいディスクを作成します。
- 新しいディスクをテストサーバーにマウントします。
- サーバーが新しいディスクをデータディスクとして使用するように、テスト インスタンスで MySQL サーバーを再起動します。
次の図は、ディスク スナップショットを使用してデータベースのクローンを作成する方法を示しています。
ディスク スナップショットを作成する
Cloud Shell を開きます。
VM インスタンスと同じゾーンにデータディスクのスナップショットを作成します。
gcloud compute disks snapshot mysql-prod-data \ --snapshot-names=mysql-prod-data-snapshot \ --zone="${ZONE}"
スナップショットの作成には、数分かかります。
ディスク スナップショットをテスト インスタンスにアタッチする
作成したスナップショットから新しいデータディスクを作成し、mysql-test
インスタンスにアタッチする必要があります。
Cloud Shell を開きます。
本番環境ディスクのスナップショットを使用して、そのコンテンツ用の新しい永続ディスクを作成します。
gcloud beta compute disks create mysql-test-data \ --size=100GB \ --source-snapshot=mysql-prod-data-snapshot \ --zone="${ZONE}"
新しいディスクを、読み取りと書き込み権限付きで
mysql-test
インスタンスにアタッチします。gcloud compute instances attach-disk mysql-test \ --disk=mysql-test-data --mode=rw
Linux で新しいデータディスクをマウントする
クローンを作成したデータディスクを MySQL のデータ ディレクトリとして使用するには、MySQL インスタンスを停止してディスクをマウントする必要があります。
mysql-test
に接続された SSH セッションで、MySQL サービスを停止します。sudo service mysql stop
ターミナル ウィンドウで、インスタンスにアタッチされているディスクの一覧を表示します。
lsblk
次のような出力が表示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk └─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk
sdb
という名前のディスク(100 GB)がデータディスクです。MySQL データディスクを MySQL のデータ ディレクトリにマウントします。
sudo mount -o discard,defaults /dev/sdb /var/lib/mysql
このディスクをマウントすると、MySQL の構成ファイルとテーブル スペースが非表示になり、このディスクの内容に置き換えられます。
このコマンドで行うディスクのマウントは一時的なもので、システム起動時に再マウントされません。システムの起動時にディスクをマウントする場合は、
fstab
エントリを作成します。詳細については、前述の追加ディスクを設定するをご覧ください。
テスト インスタンスで MySQL を起動する
mysql-test
に接続された SSH セッションで、MySQL サービスを起動します。sudo service mysql start
クローンを作成したデータベースが機能していることを確認するには、
employees
テーブルの行数をカウントするクエリを実行します。mysql -u root -p -e "select count(*) from employees.employees;"
入力を求めるメッセージが表示されたら、
mysql-prod
データベース サーバーの root パスワードを入力します。本番環境インスタンスの root パスワードが必要になる理由は、MySQL データ ディレクトリ全体がmysql-prod
インスタンスのデータ ディレクトリのクローンであり、データベース、データベース ユーザーとそのパスワードがすべてコピーされるためです。+----------+ | count(*) | +----------+ | 300024 | +----------+
行数は
mysql-prod
インスタンスと同じです。
これで、永続ディスクのスナップショットを使用してデータベースのクローンを作成する方法は以上です。次は、エクスポートとインポートを使用してデータベースのクローンを作成する方法について説明します。この 2 つ目の方法のチュートリアルを最後まで進めるには、クローンを作成したディスクのマウントを解除する必要があります。
クローンを作成したディスクのマウントを解除する
ディスク スナップショットを使用して作成したクローン ディスクのマウントを解除するには、次の手順を行います。
mysql-test
インスタンスに接続された SSH セッションで、MySQL サービスを停止します。sudo service mysql stop
クローン作成したデータディスクの MySQL データ ディレクトリへのマウントを解除します。
sudo umount /var/lib/mysql
MySQL サービスを再起動します。
sudo service mysql start
エクスポートとインポートを使用したクローン作成
Compute Engine で動作する MySQL データベースのクローンを作成する 2 つ目の方法では、ネイティブの MySQL エクスポート(mysqldump
を使用)とインポートを使用します。この方法では、Cloud Storage を使用してエクスポート ファイルを転送します。
このセクションでは、このチュートリアルの Compute Engine のディスク スナップショットを使用してデータベースのクローンを作成するセクションで作成したリソースを使用します。そのセクションの手順を完了していない場合は、続行する前に完了する必要があります。
このセクションでは、次の操作を行います。
- Cloud Storage バケットを作成します。
- 本番環境インスタンスのデータベースをエクスポートし、Cloud Storage に書き込みます。
- エクスポート ファイルを Cloud Storage から読み込み、テスト インスタンスにインポートします。
次の図は、Cloud Storage を使用してエクスポートを転送してデータベースのクローンを作成する方法を示しています。
Google Cloud 外のシステムにも Cloud Storage へのアクセス権を付与できるため、この方法で外部の MySQL インスタンスからデータベースのクローン作成が可能です。
Cloud Storage バケットを作成する
エクスポート ファイルを mysql-prod
インスタンスから mysql-test
インスタンスに転送する間、それを保存する Cloud Storage バケットを作成する必要があります。
Cloud Shell を開きます。
VM インスタンスと同じリージョンに Cloud Storage バケットを作成します。
gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
データベースをエクスポートする
本番環境では、mysqldump
エクスポート ファイルを使用してすでにバックアップが作成されている場合があります。このようなバックアップは、データベースのクローン作成のベースとして使用できます。
このチュートリアルでは、mysqldump
を使用して新しいエクスポート ファイルを作成します。これは、既存の完全バックアップまたは増分バックアップのスケジュールには影響しません。
mysql-prod
インスタンスに接続された SSH セッションで、Employees
データベースをエクスポートし、前の手順で作成したバケットの Cloud Storage オブジェクトに流し込みます。mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose --hex_blob \ --databases employees |\ gcloud storage cp - "gs://$(gcloud config get-value project)-bucket/employees-dump.sql"
入力を求めるメッセージが表示されたら、
mysql-prod
データベース サーバーの root パスワードを入力します。エクスポートの際、
utf8mb4
の文字セットを使用すると、文字エンコードの問題を回避できます。--add-drop-database
オプションを使用して、DROP DATABASE
ステートメントとCREATE DATABASE
ステートメントをエクスポートに含めます。
エクスポートしたファイルをインポートする
mysql-test
インスタンスに接続された SSH セッションで、エクスポートしたファイルを Cloud Storage バケットからmysql
コマンドライン アプリケーションに流し込みます。gcloud storage cat "gs://$(gcloud config get-value project)-bucket/employees-dump.sql" |\ mysql --user=root -p --default-character-set=utf8mb4
入力を求めるメッセージが表示されたら、
mysql-test
データベース サーバーの root パスワードを入力します。インポートの際、
utf8mb4
の文字セットを使用すると、文字エンコードの問題を回避できます。クローンを作成したデータベースが機能していることを確認するには、
employees
テーブルの行数をカウントするクエリを実行します。mysql -u root -p -e "select count(*) from employees.employees;"
入力を求めるメッセージが表示されたら、
mysql-test
データベース サーバーの root パスワードを入力します。+----------+ | count(*) | +----------+ | 300024 | +----------+
行数は
mysql-prod
インスタンスと同じです。
クローン作成先としての Cloud SQL の使用
クローン作成先のデータベースが Cloud SQL でホストされており、元のデータベースが Compute Engine にある場合、サポートされている唯一のクローンの作成方法は、データベースを Cloud Storage にエクスポートした後、Cloud SQL にインポートする方法です。
Cloud SQL のドキュメントで説明されているように、Cloud SQL では、トリガー、ストアド プロシージャ、ビュー、関数を含まない場合に限り、エクスポートされたファイルをインポートできます。
データベースがこれらの要素のいずれかを必要としている場合は、--skip-triggers
と --ignore-table [VIEW_NAME]
のコマンドライン引数を使用してエクスポートから除外してインポートした後、除外した要素を手動で再作成します。
Cloud SQL for MySQL インスタンスを作成する
Cloud Shell を開きます。
mysql-prod
インスタンスと同じデータベース バージョンを実行する Cloud SQL for MySQL インスタンスを作成します。gcloud sql instances create mysql-cloudsql \ --tier=db-n1-standard-2 --region=${REGION} --database-version MYSQL_5_7
Cloud SQL データベースが作成されるまで数分かかります。
root ユーザー パスワードを既知の値にリセットします。
gcloud sql users set-password root \ --host=% --instance=mysql-cloudsql --prompt-for-password
root パスワードの入力を求められたら、パスワードを作成して入力します。パスワードはメモするか、安全な場所に一時的に保存します。
データベースをエクスポートする
Cloud SQL へのインポートに適した形式でデータベースをエクスポートするには、データベース内のすべてのビューを除外する必要があります。
mysql-prod
インスタンスに接続された SSH セッションで、mysqldump
コマンドのコマンドライン引数を含む環境変数を、Employees
データベース内のビューを無視するように設定します。DATABASE_NAME=employees IGNORE_TABLES_ARGS="`mysql -u root -p -s -s -e \" SELECT CONCAT('--ignore-table ${DATABASE_NAME}.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA = '${DATABASE_NAME}'; \"`"
入力を求めるメッセージが表示されたら、
mysql-prod
データベース サーバーの root パスワードを入力します。環境変数の内容を表示して、正しく設定されていることを確認します。
echo "${IGNORE_TABLES_ARGS}"
--ignore-table employees.current_dept_emp --ignore-table employees.dept_emp_latest_date
Employees
データベースをエクスポートします。データベースは、トリガーとビューが除かれ、前に作成したバケットの Cloud Storage オブジェクトに直接流し込まれます。mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose \ --hex-blob --skip-triggers --set-gtid-purged=OFF \ $IGNORE_TABLES_ARGS \ --databases employees |\ gcloud storage cp - "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
入力を求めるメッセージが表示されたら、
mysql-prod
データベース サーバーの root パスワードを入力します。
オブジェクト権限を更新する
Cloud SQL サービス アカウントが Cloud Storage バケットとエクスポート オブジェクトを読み取れるようにするには、そのどちらにも適切な権限を設定する必要があります。この権限は、Google Cloud コンソールを使用してオブジェクトをインポートするときに自動的に設定されるか、gcloud
コマンドを使用して設定できます。
Cloud Shell を開きます。
Cloud SQL インスタンスのサービス アカウントのアドレスを格納する環境変数を設定します。
CLOUDSQL_SA="$(gcloud sql instances describe mysql-cloudsql --format='get(serviceAccountEmailAddress)')"
サービス アカウントをバケット IAM ポリシーにリーダーおよびライターとして追加します。
gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \ --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
エクスポートしたデータベースをインポートする
Cloud Shell を開きます。
エクスポートしたファイルを Cloud SQL インスタンスにインポートします。
gcloud sql import sql mysql-cloudsql \ "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
入力を求めるメッセージが表示されたら、「
y
」と入力します。クローンを作成したデータベースが機能していることを確認するには、
employees
テーブルの行数をカウントするクエリを実行します。echo "select count(*) from employees.employees;" |\ gcloud sql connect mysql-cloudsql --user=root
入力を求めるメッセージが表示されたら、
mysql-cloudsql
データベース サーバーの root パスワードを入力します。次のような出力が表示されます。
Connecting to database with SQL user [root].Enter password: count(*) 300024
行数は
mysql-prod
インスタンスと同じです。
本番環境システムの追加情報
ディスク スナップショットの使用
物理的なバックアップ(ディスク スナップショットなど)の場合、MySQL のドキュメントでは、データベースへの書き込みを一時停止した後、スナップショットを作成することを推奨しています。これを行うには、FLUSH TABLES WITH READ LOCK
コマンドを使用します。スナップショットが完了すると、UNLOCK TABLES
を使用して書き込みを再開できます。
InnoDB テーブルを使用するデータベースの場合は、最初に FLUSH TABLES WITH READ LOCK
コマンドを実行せずに、直接スナップショットを取得することをおすすめします。こうすることにより、データベースは悪影響を受けることなく動作し続けます。ただし、スナップショットは一貫性のない状態になる場合があります。とはいえ、一貫性が失われた場合でも、InnoDB エンジンはクローン起動時に一貫した状態にテーブルを再構築できます。
MyISAM テーブルを使用するデータベースの場合、FLUSH TABLES WITH READ LOCK
コマンドを実行するとテーブルへの書き込みがすべてブロックされ、UNLOCK TABLES
コマンドを実行するまでデータベースは読み取り専用になります。
最初にテーブルをフラッシュおよびロックせずにスナップショットを作成すると、新しくクローンを作成したデータベースに整合性のないデータが含まれるか、データベースが破損するリスクが生じます。
そのため、MyISAM テーブルを使用してデータベースの一貫したスナップショットを取得するには、プライマリ(マスター)データベースのパフォーマンスに影響が出ないように、リードレプリカで FLUSH TABLES WITH READ LOCK
を実行してそのレプリカのスナップショットを作成することをおすすめします。
mysqldump コマンドの使用
ソース データベースと整合性のあるエクスポート ファイルを作成するために、mysqldump
コマンドはエクスポート オペレーションの間、すべてのテーブルをロックします。つまり、データベースがエクスポートされている間、データベースへの書き込みはブロックされます。
そのため、プライマリ データベースのリードレプリカに対して mysqldump
コマンドを実行し、プライマリ データベースがブロックされないようにすることをおすすめします。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、このチュートリアルで作成した Google Cloud プロジェクトを削除します。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。