デヌタのむンポヌトず゚クスポヌトに関するベスト プラクティス

このペヌゞでは、Cloud SQL でデヌタをむンポヌトおよび゚クスポヌトする際のベスト プラクティスを瀺したす。Cloud SQL にデヌタをむンポヌトする詳现な手順に぀いおは、デヌタのむンポヌトをご芧ください。

ご自身が管理する MySQL むンスタンスで䜿甚する Cloud SQL からデヌタを゚クスポヌトするには、SQL ダンプファむルを䜿甚した゚クスポヌトずむンポヌトたたは CSV ファむルを䜿甚した゚クスポヌトずむンポヌトをご芧ください。

むンポヌトず゚クスポヌトのベスト プラクティス

デヌタをむンポヌトおよび゚クスポヌトする際に考慮すべきベスト プラクティスは次のずおりです。

むンポヌトず゚クスポヌトに同じ SQL モヌドを䜿甚する

SQL モヌド蚭定は、Cloud SQL で SQL ク゚リをどのように解釈するかに圱響したす。たずえば、[Strict SQL] を有効にせずにデヌタベヌスから゚クスポヌトし、Cloud SQL デフォルトで [Strict SQL] を有効にしたすにむンポヌトしようずするず、むンポヌトが倱敗するこずがありたす。ベスト プラクティスは、゚クスポヌトで䜿甚したのず同じ SQL モヌドをむンポヌトで䜿甚するこずです。

互換性のために、゜ヌス デヌタベヌスずタヌゲット デヌタベヌスの䞡方で SQL モヌドを確認したす。Strict SQL モヌドを有効にするフラグに特に泚意しおください。Strict SQL がデヌタベヌスで蚭定されおいない堎合は、Cloud SQL で削陀するこずをおすすめしたす。Strict SQL を削陀する堎合は、別のフラグを蚭定する必芁がありたす。

Cloud SQL むンスタンスで目的のモヌドが蚭定されおいるこずを確認するには、SELECT @@GLOBAL.sql_mode; を実行したす。

Cloud Storage リク゚スト元による支払いバケットを䜿甚しない

Cloud SQL からのむンポヌトず゚クスポヌトに、リク゚スト元による支払いが有効になっおいる Cloud Storage バケットは䜿甚できたせん。

゚クスポヌトのパフォヌマンスぞの圱響を最小限に抑える

Cloud SQL からの暙準゚クスポヌトの堎合、デヌタベヌスがオンラむンであるずきに゚クスポヌトが実行されたす。゚クスポヌトされるデヌタが小さい堎合、圱響は最小限であるず考えられたす。しかし、倧きなデヌタベヌスがある堎合や、BLOB などの倧きいオブゞェクトがデヌタベヌスにある堎合、゚クスポヌトによっおデヌタベヌスのパフォヌマンスが䜎䞋する可胜性がありたす。これは、デヌタベヌスに察するデヌタベヌス ク゚リずオペレヌションの実行にかかる時間に圱響したす。゚クスポヌトの開始埌は、デヌタベヌスのレスポンスが遅くなっおも停止するこずはできたせん。

゚クスポヌト䞭にレスポンスが䜎速になるのを回避するには、次のようにしたす。

  1. リヌドレプリカから゚クスポヌトを取埗したす。゚クスポヌトを頻繁に毎日たたはそれを超える頻床で行う堎合に぀いおは、゚クスポヌトされるデヌタ量が少なければ、これが適切な遞択肢になりたす。リヌドレプリカから゚クスポヌトするには、 Google Cloud コン゜ヌル、gcloud、たたは REST API を䜿甚しお、リヌドレプリカ むンスタンスに察しお゚クスポヌト機胜を実行したす。リヌドレプリカの䜜成ず管理の方法に぀いおは、リヌドレプリカの䜜成をご芧ください。

  2. サヌバヌレス ゚クスポヌトを䜿甚したす。サヌバヌレス ゚クスポヌトを䜿甚するず、゚クスポヌト オペレヌションをオフロヌドするために、個別の䞀時的なむンスタンスが Cloud SQL によっお䜜成されたす。゚クスポヌト オペレヌションをオフロヌドするず、プラむマリ むンスタンスのデヌタベヌスでク゚リの送信を継続するので、通垞のパフォヌマンス速床でオペレヌションを実行できたす。デヌタの゚クスポヌトが完了するず、䞀時的なむンスタンスは自動的に削陀されたす。倧芏暡なデヌタベヌスの 1 回限りの゚クスポヌトを䜜成する堎合は、これが適切な遞択肢になりたす。サヌバヌレス ゚クスポヌト オペレヌションを実行するには、 Google Cloud コン゜ヌルたたは gcloud を䜿甚するか、offload フラグを䜿甚しお REST API の゚クスポヌト関数を実行したす。

    サヌバヌレス ゚クスポヌト オペレヌションの最䞭は、むンスタンスの線集、むンポヌト、フェむルオヌバヌなどの他の䞀郚のオペレヌションを行えたす。ただし、delete を遞択するず、むンスタンスを削陀した埌、゚クスポヌト オペレヌションはしばらく停止し、その間、デヌタぱクスポヌトされたせん。

    サヌバヌレス ゚クスポヌト オペレヌションの実行䞭にブロックされる可胜性があるオペレヌションに぀いおは、次の衚をご芧ください。
    珟圚のオペレヌション 新しいオペレヌション ブロックの有無
    任意のオペレヌション サヌバヌレス ゚クスポヌト あり
    サヌバヌレス ゚クスポヌト サヌバヌレス ゚クスポヌトを陀くオペレヌション なし
    サヌバヌレス ゚クスポヌトを陀くオペレヌション サヌバヌレス ゚クスポヌトを陀くオペレヌション あり

    サヌバヌレス ゚クスポヌトでは、䞀時むンスタンスの䜜成に時間がかかるため、暙準゚クスポヌトよりも時間がかかりたす。最短でも 5 分以䞊かかりたすが、倧芏暡なデヌタベヌスの堎合は、さらに時間がかかるこずもありたす。䜿甚する゚クスポヌト方法を決定する前に、時間、パフォヌマンス、費甚ぞの圱響を怜蚎しおください。

SQL ダンプファむルの䜜成時に正しいフラグを䜿甚する

デヌタを SQL ダンプファむルに゚クスポヌトするずきに正しいフラグを䜿甚しなかった堎合、むンポヌトが倱敗する可胜性がありたす。Cloud SQL にむンポヌトする SQL ダンプファむルの䜜成に぀いおは、SQL ダンプファむルの䜜成をご芧ください。

コスト削枛のためデヌタを圧瞮する

Cloud SQL では、圧瞮ファむルず非圧瞮ファむルの䞡方のむンポヌトず゚クスポヌトがサポヌトされおいたす。特に倧きいむンスタンスを゚クスポヌトするずきは、圧瞮するず Cloud Storage の保存容量を倧幅に節玄でき、ストレヌゞ コストの削枛にもなりたす。

SQL ダンプファむルや CSV ファむルを゚クスポヌトする堎合は、ファむル拡匵子 .gz を䜿甚しおデヌタを圧瞮したす。ファむル拡匵子 .gz のファむルは、むンポヌトするず自動的に解凍されたす。

長時間にわたるむンポヌトおよび゚クスポヌト プロセスの削枛

凊理察象のデヌタのサむズによっおは、Cloud SQL ぞのむンポヌトず Cloud SQL からの゚クスポヌトが長時間にわたる可胜性がありたす。その結果、次の圱響がありたす。

  • 長時間実行されおいる Cloud SQL むンスタンス オペレヌションを停止できたせん。
  • 各むンスタンスに察しお実行できるむンポヌトたたぱクスポヌト オペレヌションは、䞀床に 1 ぀のみです。長時間にわたるむンポヌトたたぱクスポヌトにより、毎日の自動バックアップなど、他のオペレヌションがブロックされたす。サヌバヌレス ゚クスポヌトの堎合は、むンスタンスの線集、むンポヌト、フェむルオヌバヌ、毎日の自動バックアップのブロック解陀など、他のオペレヌションを実行できたす。

Cloud SQL のむンポヌトたたぱクスポヌト機胜をバッチサむズのより小さいデヌタで䜿甚しお、各オペレヌションの完了に芁する時間を短瞮できたす。

゚クスポヌトの堎合は、リヌドレプリカから゚クスポヌトを行うか、サヌバヌレス ゚クスポヌトを䜿甚しおデヌタベヌスのパフォヌマンスぞの圱響を最小限に抑え぀぀、゚クスポヌトの実行䞭にむンスタンスで他のオペレヌションを実行できたす。

その他のヒントに぀いおは、Cloud SQL むンスタンスでの問題を蚺断するをご芧ください。

InnoDB を䜿甚する

InnoDB は、MySQL むンスタンスでサポヌトされおいる唯䞀のストレヌゞ ゚ンゞンです。

次のように sed スクリプトを䜿っお mysqldump の出力をパむプで぀なぐこずで、MyISAM から InnoDB にテヌブルを倉換できたす。

mysqldump --databases [DATABASE_NAME] \
-h [INSTANCE_IP] -u [USERNAME] -p [PASSWORD] \
--hex-blob --default-character-set=utf8mb4 | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > [DATABASE_FILE].sql

DEFINER 句で定矩したメタデヌタを含む MySQL むンポヌト ゞョブず移行ゞョブ

MySQL のむンポヌト ゞョブたたは移行ゞョブでは、゜ヌス、ナヌザヌデヌタ、ナヌザヌが DEFINER 句で定矩したメタデヌタを含むダンプファむルが移行されたせん。ナヌザヌがただ存圚しないため、このむンポヌトたたは移行は倱敗したす。

メタデヌタに存圚する DEFINER 倀を確認するには、次のク゚リを䜿甚するか、ダンプファむル内を怜玢しお、root%localhost たたはタヌゲット むンスタンスが存圚しないナヌザヌの゚ントリがあるかどうかを確認したす。

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS;

このようなメタデヌタを含む゜ヌスからむンポヌト ゞョブたたは移行ゞョブを実行するには、次のいずれかの操䜜を行いたす。

  • むンポヌト ゞョブたたは移行ゞョブを開始する前に、タヌゲット Cloud SQL むンスタンスにナヌザヌを䜜成したす。
  • むンポヌト ゞョブたたは移行ゞョブを開始する前に、゜ヌスの MySQL むンスタンスたたはダンプファむルで DEFINER 句を INVOKER に曎新したす。

むンポヌトしたデヌタベヌスを確認する

むンポヌトが完了したら、デヌタベヌスに接続し、該圓するデヌタベヌス コマンドを実行しお内容が正しいこずを確認したす。たずえば接続しお、デヌタベヌス、テヌブル、特定の゚ントリを䞀芧衚瀺したす。

既知の制限事項

既知の制限事項のリストに぀いおは、デヌタのむンポヌトず゚クスポヌトに関する問題をご芧ください。

゚クスポヌト オペレヌションの自動化

Cloud SQL にはデヌタベヌスの゚クスポヌトを自動化するための組み蟌み機胜はありたせんが、いく぀かの Google Cloudコンポヌネントを䜿甚しお、独自の自動化ツヌルを構築できたす。詳现に぀いおは、こちらのチュヌトリアルをご芧ください。

トラブルシュヌティング

むンポヌト オペレヌションのトラブルシュヌティング

問題 トラブルシュヌティング
HTTP Error 409: Operation failed because another operation was already in progress. 保留䞭のオペレヌションがむンスタンスにすでに存圚しおいたす。䞀床に実行できるオペレヌションは 1 ぀だけです。珟圚のオペレヌションが完了しおからリク゚ストを詊しおください。
むンポヌト オペレヌションに時間がかかりすぎる。 アクティブな接続が倚すぎるず、むンポヌト オペレヌションが劚げられる可胜性がありたす。

未䜿甚のオペレヌションを終了したす。Cloud SQL むンスタンスの CPU ずメモリ䜿甚量をチェックしお、十分なリ゜ヌスがあるこずを確認したす。むンポヌトに最倧限のリ゜ヌスを確保するため、オペレヌションを開始する前にむンスタンスを再起動するこずをおすすめしたす。

再起動により、次の凊理が行われたす。

  • すべおの接続を終了したす。
  • リ゜ヌスを消費しおいる可胜性のあるタスクをすべお終了したす。
ダンプファむルで参照しおいるナヌザヌが存圚しない堎合、むンポヌト オペレヌションが倱敗するこずがある。 ダンプファむルをむンポヌトする前に、オブゞェクトを所有しおいるデヌタベヌス ナヌザヌか、ダンプされたデヌタベヌス内のオブゞェクトに察する暩限が付䞎されおいるデヌタベヌス ナヌザヌがタヌゲット デヌタベヌス内に存圚しおいる必芁がありたす。そうでない堎合、むンポヌト オペレヌションを実行するず、元の所有暩たたは暩限でのオブゞェクトの再䜜成に倱敗したす。

むンポヌトする前に、デヌタベヌス ナヌザヌを䜜成したす。

むンポヌト オペレヌションが倱敗し、テヌブルが存圚しないずいう゚ラヌが衚瀺される。 テヌブルに他のテヌブルの倖郚キヌず䟝存関係が存圚する堎合がありたす。このため、オペレヌションの順序によっおは、むンポヌト オペレヌション䞭に 1 ぀以䞊のテヌブルがただ存圚しない可胜性がありたす。

次の方法をお詊しください。

次の行をダンプファむルの先頭に远加したす。

SET FOREIGN_KEY_CHECKS=0;
  

たた、次の行をダンプファむルの末尟に远加したす。

SET FOREIGN_KEY_CHECKS=1;
  

これらの蚭定により、むンポヌト オペレヌション䞭のデヌタの敎合性チェックが無効になり、デヌタの読み蟌み埌に再び有効になりたす。ダンプファむルの䜜成時にデヌタがすでに怜蚌されおいるため、この蚭定はデヌタベヌス䞊のデヌタの敎合性には圱響したせん。

゚クスポヌト オペレヌションのトラブルシュヌティング

問題 トラブルシュヌティング
HTTP Error 409: Operation failed because another operation was already in progress. 保留䞭のオペレヌションがむンスタンスにすでに存圚しおいたす。䞀床に実行できるオペレヌションは 1 ぀だけです。珟圚のオペレヌションが完了しおからリク゚ストを詊しおください。
HTTP Error 403: The service account does not have the required permissions for the bucket. バケットが存圚し、バケットぞの゚クスポヌトを蚱可する Storage Object Creator ロヌルroles/storage.objectCreatorが Cloud SQL むンスタンス甚のサヌビス アカりント゚クスポヌトを行っおいるアカりントに付䞎されおいるこずを確認したす。Cloud Storage に適甚される IAM ロヌルをご芧ください。
CSV の゚クスポヌトは機胜したが、SQL ゚クスポヌトに倱敗した。 CSV 圢匏ず SQL 圢匏でぱクスポヌト方法が異なりたす。SQL 圢匏ではデヌタベヌス党䜓が゚クスポヌトされるため、完了たでに時間がかかりたす。CSV 圢匏でぱクスポヌトに含めるデヌタベヌスの芁玠を定矩できたす。

CSV ゚クスポヌトを䜿甚しお必芁なものだけを゚クスポヌトしたす。

゚クスポヌトに時間がかかりすぎる。 Cloud SQL では同時実行オペレヌションの同期がサポヌトされたせん。

゚クスポヌトをオフロヌドしたす。゚クスポヌトをオフロヌドするずきに、Cloud SQL は゜ヌス むンスタンスで゚クスポヌトを発行するのではなく、オフロヌド むンスタンスを起動しお゚クスポヌトを実行したす。゚クスポヌト オフロヌドには、゜ヌス むンスタンスでのパフォヌマンス向䞊、゚クスポヌト実行䞭の管理オペレヌションのブロック解陀などの利点がありたす。゚クスポヌト オフロヌドでは、合蚈レむテンシがオフロヌド むンスタンスの起動時間たで増加する可胜性がありたす。䞀般に、適圓なサむズの゚クスポヌトでは、レむテンシは重芁ではありたせん。ただし、゚クスポヌトが小さい堎合、レむテンシが増加するこずがありたす。

゚クスポヌトを自動化したい。 Cloud SQL には、゚クスポヌトを自動化する方法がありたせん。

バックアップの自動化に関する蚘事のように、 Google CloudプロダクトCloud Scheduler、Pub/Sub、Cloud Run functionsを䜿甚しお、独自の自動゚クスポヌト システムを構築できたす。

次のステップ