ここでは、Cloud SQL インスタンス上の MySQL データベースの作成、一覧取得、削除について説明します。
新しく作成されたインスタンスには、次の 4 つのシステム データベースがあります。
information_schema
: データベース メタデータ(MySQL サーバーに関する情報)へのアクセスを提供します。
mysql
: システム スキーマ。MySQL サーバーの実行時に必要な情報を格納するテーブルが含まれています。
performance_schema
: MySQL サーバーの実行を低レベルでモニタリングする機能。
sys
: DBA とデベロッパーがパフォーマンス スキーマによって収集されたデータの解釈に役立つ一連のオブジェクトが含まれています。
MySQL データベースの詳細については、
MySQL のドキュメント をご覧ください。
始める前に
ここで説明するタスクの前に、次のことを行っておく必要があります。
Cloud SQL インスタンスを作成しておきます。詳細については、インスタンスの作成 をご覧ください。
MySQL クライアントを使用してデータベースを作成または管理する場合は、次のことを行っておく必要があります。
Cloud SQL インスタンスにデータベースを作成する
注: データベース名の最大長は 64 文字です。この名前に関するその他の条件について詳しくは、スキーマ オブジェクト名 をご覧ください。
データベースの作成時にカスタム文字セットと照合順序を指定しなかった場合、データベースには次のデフォルト値が設定されます。
MySQL 5.6、5.7 :(Google Cloud コンソール、Cloud SQL Admin API、gcloud CLI 、Terraform、または mysql クライアントで作成)
文字セット: utf8
照合順序: utf8_general_ci
MySQL 8.0.x 以降 (Google Cloud コンソールで作成)
文字セット: utf8
照合順序: utf8_general_ci
MySQL 8.0.x 以降 (Cloud SQL Admin API、gcloud CLI 、Terraform、または mysql クライアントで作成)
文字セット: utf8mb4
照合順序: utf8mb4_0900_ai_ci
作成後にデータベースの文字セットまたは照合順序の構成を変更する必要がある場合は、データベースの文字セットと照合順序を更新する をご覧ください。
コンソール
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
Cloud SQL の [インスタンス] に移動
インスタンスの [概要 ] ページを開くには、インスタンス名をクリックします。
SQL ナビゲーション メニューから [データベース ] を選択します。
[データベースを作成 ] をクリックします。
[データベースを作成 ] ダイアログで、データベースの名前と、必要に応じて文字セットと照合を指定します。文字セットと照合順序の詳細については、文字セット、照合、Unicode をご覧ください。
[作成 ] をクリックします。
データベースを作成するには、Terraform リソース を使用します。
変更を適用する
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
Cloud Shell を起動します。
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf
にする必要があります(例: main.tf
)。このチュートリアルでは、このファイルを main.tf
とします。
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した main.tf
にサンプルコードをコピーします。
必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
環境に適用するサンプル パラメータを確認し、変更します。
変更を保存します。
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、-upgrade
オプションを使用します。
terraform init -upgrade
変更を適用する
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
次のコマンドを実行します。プロンプトで「yes
」と入力して、Terraform 構成を適用します。
terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
Google Cloud プロジェクトを開いて 結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
注: Terraform のサンプルでは通常、必要な API が Google Cloud プロジェクトで有効になっていることを前提としています。
変更を削除する
変更を削除するには、次の手順を行います。
削除の保護を無効にするには、Terraform 構成ファイルで deletion_protection
引数を false
に設定します。
deletion_protection = "false"
次のコマンドを実行します。プロンプトで「yes
」と入力して、更新された Terraform 構成を適用します。
terraform apply
次のコマンドを実行します。プロンプトで「yes
」と入力して、以前に Terraform 構成で適用されたリソースを削除します。
terraform destroy
REST v1
以下のリクエストでは、databases:insert メソッドを使用して、指定したインスタンスに新しいデータベースを作成します。
リクエストのデータを使用する前に、次のように置き換えます。
project-id : プロジェクト ID
instance-id : インスタンス ID
database-name : Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases
リクエストの本文(JSON):
{
"project": "project-id ",
"instance": "instance-id ",
"name": "database-name "
}
リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
以下のリクエストでは、databases:insert メソッドを使用して、指定したインスタンスに新しいデータベースを作成します。
リクエストのデータを使用する前に、次のように置き換えます。
project-id : プロジェクト ID
instance-id : インスタンス ID
database-name : Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases
リクエストの本文(JSON):
{
"project": "project-id ",
"instance": "instance-id ",
"name": "database-name "
}
リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases"
PowerShell(Windows)
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
mysql クライアント
リファレンス情報については、MySQL のドキュメントの CREATE DATABASE をご覧ください。
文字セットと照合順序の詳細については、文字セット、照合、Unicode をご覧ください。
CREATE DATABASE database_name
[[ CHARACTER SET charset_name ][ COLLATE collation_name ]];
データベースの一覧を表示する
インスタンス上のすべてのデータベースの一覧を取得するには:
コンソール
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
Cloud SQL の [インスタンス] に移動
インスタンスの [概要 ] ページを開くには、インスタンス名をクリックします。
左側のメニューから、[データベース ] をクリックします。[データベース ] ページには、データベースが照合タイプ、文字セット、データベース タイプとともに一覧表示されます。
REST v1
次のリクエストでは、databases:list メソッドを使用して、インスタンスのデータベースを一覧表示します。
API を使用してデータベースを一覧表示すると、コンソールでは表示されない追加のテンプレート データベースとシステム データベースが表示されます。システム データベースの削除や管理を行うことはできません。
リクエストのデータを使用する前に、次のように置き換えます。
project-id : プロジェクト ID
instance-id : インスタンス ID
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases
リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases"
PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{
"kind": "sql#database",
"charset": "utf8",
"collation": "utf8_general_ci",
"etag": "etag ",
"name": "sys",
"instance": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/sys",
"project": "project-id "
}
REST v1beta4
次のリクエストでは、databases:list メソッドを使用して、インスタンスのデータベースを一覧表示します。
API を使用してデータベースを一覧表示すると、コンソールでは表示されない追加のテンプレート データベースとシステム データベースが表示されます。システム データベースの削除や管理を行うことはできません。
リクエストのデータを使用する前に、次のように置き換えます。
project-id : プロジェクト ID
instance-id : インスタンス ID
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases
リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases"
PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{
"kind": "sql#database",
"charset": "utf8",
"collation": "utf8_general_ci",
"etag": "etag ",
"name": "sys",
"instance": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/sys",
"project": "project-id "
}
mysql クライアント
リファレンス情報については、MySQL のドキュメントの SHOW DATABASES をご覧ください。
SHOW DATABASES ;
データベースを削除する
Cloud SQL インスタンスでデータベースを削除するには:
コンソール
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
Cloud SQL の [インスタンス] に移動
インスタンスの [概要 ] ページを開くには、インスタンス名をクリックします。
左側のメニューから、[データベース ] をクリックします。
データベースのリストで削除するデータベースを選択し、ごみ箱アイコンをクリックします。
[データベースの削除 ] ダイアログでデータベースの名前を入力し、[削除 ] をクリックします。
注: データベースを削除すると、データベースのディレクトリ内のファイルすべてが削除されます(データベースで直接使用されていないファイルも含む)。このようなファイルの例としては、MySQL 5.6 と MySQL 5.7 の中断された ALTER TABLE オペレーションから作成された #sql-*
ファイルなどがあります。
gcloud
リファレンス情報については、gcloud
sql databases delete
をご覧ください。
gcloud sql databases delete DATABASE_NAME \
--instance= INSTANCE_NAME
注: データベースを削除すると、データベースのディレクトリ内のファイルすべてが削除されます(データベースで直接使用されていないファイルも含む)。このようなファイルの例としては、MySQL 5.6 と MySQL 5.7 の中断された ALTER TABLE オペレーションから作成された #sql-*
ファイルなどがあります。
REST v1
以下のリクエストでは、databases:delete メソッドを使用して、指定されたデータベースを削除します。
リクエストのデータを使用する前に、次のように置き換えます。
project-id : プロジェクト ID
instance-id : インスタンス ID
database-name : Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
DELETE https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name
リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name "
PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "DELETE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
以下のリクエストでは、databases:delete メソッドを使用して、指定されたデータベースを削除します。
注: データベースを削除すると、データベースで直接使用されていないファイルも含めて、データベースのディレクトリ内のファイルすべてが削除されます。このようなファイルの例としては、MySQL 5.6 と MySQL 5.7 の中断された ALTER TABLE オペレーションから作成された #sql-*
ファイルなどがあります。
リクエストのデータを使用する前に、次のように置き換えます。
project-id : プロジェクト ID
instance-id : インスタンス ID
database-name : Cloud SQL インスタンス内のデータベースの名前
HTTP メソッドと URL:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name
リクエストを送信するには、次のいずれかのオプションを開きます。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name "
PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "DELETE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
mysql クライアント
リファレンス情報については、MySQL のドキュメントの DROP DATABASE をご覧ください。
DROP DATABASE [ database_name ];
注: データベースのディレクトリにデータベースで直接使用されていないファイルが含まれている場合、DROP DATABASE
コマンドは、データベース ディレクトリを削除できなかったことを示す次のようなエラーを生成します。
データベースの削除中にエラーが発生しました(can't rmdir './database_name ', errno: 39)
データベースの削除中にエラーが発生しました(can't rmdir './database_name ', errno: 17)
このようなファイルの例としては、MySQL 5.6 と MySQL 5.7 の中断された ALTER TABLE オペレーションから作成された #sql-*
ファイルなどがあります。これらのファイルを削除して DROP DATABASE オペレーションを完了するには、他のいずれかの方法(Console、gcloud
コマンド、REST API 呼び出し)でオペレーションを繰り返します。
次のステップ
使ってみる
Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Cloud SQL のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
Cloud SQL の無料トライアル