1

第1世代のクラウドSQLから第2世代への移行方法はありますか?Google Cloud sqlは、第1世代から第2世代へのダウンタイムを最小限から最小限にとどめます。

私の第1世代のDBをダンプするのは、読み込み専用に設定した後に約30分かかるため、第2世代へのインポートにも長い時間がかかります。

アップグレードの進行中にクローンを使用してアップグレードが完了したら、その違いを新しいDBにコピーするのはどうですか?

私はAppEngineを使用していますので、古いバージョンがクローンを指している間に第2世代DBを指す新しいバージョンをアップロードすることを考えていました。 アップグレードが完了したら、私はバージョンを変更し、不足しているデータをコピーするスクリプトを実行します。

それは動作しますか?より良いオプションはありますか?

+1

あなたの第一世代のDBのデータをダンプするクラウドSQLのデータのエクスポート操作を使用している場合は、クラウドSQLは、それは 'mysqldumpをを使用しています--single-transaction'フラグを使用すると、データベースを読み取り専用に設定する必要がなくなり、データの一貫性のある表示が得られるはずです。また、第二世代のパフォーマンスが優れているので、インポートが高速になる可能性があります。これは前にテストする必要があります。 –

+0

お返事ありがとうございます。それはドキュメントで言う: 'あなたは、エクスポートを実行するためにmysqldumpを使用する必要があります。 Google Cloud Platform Consoleで提供されているエクスポートを使用することはできませんので、不可能です。リンクは次のとおりです:https://cloud.google.com/sql/docs/migrate-2nd-gen – bentzy

答えて

0

私は次のことをやってしまった:

  1. 一時マシンに
  2. Sshの
  3. 計算エンジンで一時的なマシンを作成し、マシンのIPを取得
  4. 第2世代のインスタンスを作成します。https://askubuntu.com/questions/95910/command-for-determining-my-public-ip
  5. 新しいDBインスタンスと古いDBインスタンスのIPアドレスへのアクセスを許可する
  6. 第1世代インスタンスのユーザとパスワードを設定します(下のスクリプトに入力してください)
  7. 新しい第2世代DBを使用するように構成された、あなたのApp Engineアプリケーションの新しいバージョンをアップロードしますが、編集&が
  8. のsshで一時マシンで以下のスクリプトをスクリプトを実行し、デフォルトのバージョン
  9. ようにそれを設定しないでくださいスクリプトが正常にポイントへのApp Engineのデフォルトのバージョンを変更し終えたら、スクリプトがアプリケーション
  10. のためのダウンタイムの原因とREAD ONLYモードになりますDBを実行している間、読み取り専用フラグに
  11. を確認するために要求されます新しい第2世代DBを使用する新しいバージョンへ
  12. これは、ここで私たちにダウンタイムの15分

を与えたスクリプトです:

#!/bin/sh 

DB_IP=127.0.0.1 
SQL_FILE_NAME=db-backup.sql 
GZ_SQL_FILE_NAME=db-backup.sql.gz 
BUCKET_NAME=gs://db-bucket-name 
GS_FILE_PTH=$BUCKET_NAME/$GZ_SQL_FILE_NAME 
INSTANCE_NAME=1st-gen-instance 
NEW_INSTANCE_NAME=2nd-gen-instace 

gcloud config set project project-name 
gcloud sql instances patch $INSTANCE_NAME --database-flags read_only=on 
mysqldump --databases dbname -h $DB_IP -u user --password=password \ 
--hex-blob --skip-triggers --set-gtid-purged=OFF \ 
--default-character-set=utf8 > $SQL_FILE_NAME 
gzip $SQL_FILE_NAME 
gsutil cp -r $GZ_SQL_FILE_NAME $GS_FILE_PTH 
SERVICE_ACCOUNT_ADDRESS=$(gcloud sql instances describe $NEW_INSTANCE_NAME | sed -n -e 's/^.*serviceAccountEmailAddress: //p') 
gsutil acl ch -u $SERVICE_ACCOUNT_ADDRESS:W $BUCKET_NAME 
gsutil acl ch -u $SERVICE_ACCOUNT_ADDRESS:R $GS_FILE_PTH 
gcloud sql instances import $NEW_INSTANCE_NAME $GS_FILE_PTH 
gsutil acl ch -d $SERVICE_ACCOUNT_ADDRESS:W $BUCKET_NAME 
gsutil acl ch -d $SERVICE_ACCOUNT_ADDRESS:R $GS_FILE_PTH 
関連する問題