Cloud SQL は、Google Cloud Platform (GCP) が提供するフルマネージドのリレーショナルデータベースサービスです。MySQL、PostgreSQL、SQL Serverなどの一般的なデータベースエンジンをクラウド環境で簡単に展開、管理、スケーリングできます。Cloud SQLはインフラストラクチャの管理、バックアップ、レプリケーション、パッチ適用などの運用タスクを自動化し、開発者がアプリケーション開発に集中できるようにします。
Cloud SQLは以下の主要コンポーネントで構成されています:
コンポーネント | 説明 |
---|---|
インスタンス | データベースサーバーを実行する仮想マシン。特定のリージョンとゾーンに配置される |
データベース | インスタンス内に作成される個々のデータベース |
ストレージ | データを保存する永続ディスク。自動的に拡張可能 |
バックアップ | データベースの定期的なスナップショット。自動バックアップとオンデマンドバックアップが可能 |
レプリカ | プライマリインスタンスのコピー。読み取りレプリカまたは高可用性用のスタンバイレプリカとして機能 |
ネットワーク | インスタンスへの接続を制御するファイアウォールルールとVPCネットワーク |
Cloud SQLと自己管理型データベースには以下のような違いがあります:
Cloud SQLインスタンスは、Google Cloud Console、gcloud CLIツール、またはAPIを使用して作成および管理できます。
gcloud sql instances create my-mysql-instance \
--database-version=MYSQL_8_0 \
--tier=db-n1-standard-2 \
--region=asia-northeast1 \
--root-password=my-secure-password \
--storage-size=100 \
--storage-type=SSD \
--availability-type=REGIONAL
gcloud sql instances create my-postgres-instance \
--database-version=POSTGRES_14 \
--tier=db-n1-standard-2 \
--region=asia-northeast1 \
--root-password=my-secure-password \
--storage-size=100 \
--storage-type=SSD \
--availability-type=REGIONAL
インスタンスを作成した後、データベースを作成できます:
gcloud sql databases create my-database \
--instance=my-mysql-instance
データベースにアクセスするためのユーザーを作成します:
gcloud sql users create my-user \
--instance=my-mysql-instance \
--password=my-user-password
Cloud SQLインスタンスには複数の方法で接続できます:
Cloud SQL Proxyは、暗号化されたセキュアな接続を提供する推奨の接続方法です:
# Linuxの場合
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.0.0/cloud-sql-proxy.linux.amd64
chmod +x cloud-sql-proxy
# macOSの場合
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.0.0/cloud-sql-proxy.darwin.amd64
chmod +x cloud-sql-proxy
./cloud-sql-proxy --instances=my-project:asia-northeast1:my-mysql-instance=tcp:3306
mysql -u my-user -p -h 127.0.0.1
psql -U my-user -h 127.0.0.1 -d my-database
パブリックIPアドレスまたはプライベートIPアドレスを使用して直接接続することもできます:
# パブリックIPアドレスを使用した接続
mysql -u my-user -p -h 35.189.203.xxx
# プライベートIPアドレスを使用した接続(VPC内から)
mysql -u my-user -p -h 10.0.0.xxx
アプリケーションからCloud SQLに接続する例:
const mysql = require('mysql2/promise');
async function connectToDatabase() {
const connection = await mysql.createConnection({
host: '127.0.0.1', // Cloud SQL Proxyを使用する場合
user: 'my-user',
password: 'my-user-password',
database: 'my-database'
});
const [rows] = await connection.execute('SELECT * FROM users');
console.log(rows);
await connection.end();
}
connectToDatabase();
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class CloudSqlExample {
public static void main(String[] args) {
try {
String url = "jdbc:postgresql://127.0.0.1:5432/my-database";
Connection conn = DriverManager.getConnection(url, "my-user", "my-user-password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println(rs.getString("name"));
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
高可用性(HA)構成では、プライマリインスタンスと同じリージョン内の別のゾーンにスタンバイレプリカが作成されます:
gcloud sql instances create my-ha-instance \
--database-version=MYSQL_8_0 \
--tier=db-n1-standard-2 \
--region=asia-northeast1 \
--root-password=my-secure-password \
--availability-type=REGIONAL
既存のインスタンスを高可用性に変更:
gcloud sql instances patch my-mysql-instance \
--availability-type=REGIONAL
読み取りレプリカを作成して読み取りワークロードを分散できます:
gcloud sql instances create my-read-replica \
--master-instance-name=my-mysql-instance \
--region=asia-northeast1
クロスリージョンレプリカの作成:
gcloud sql instances create my-cross-region-replica \
--master-instance-name=my-mysql-instance \
--region=asia-northeast2
自動バックアップの構成:
gcloud sql instances patch my-mysql-instance \
--backup-start-time=23:00 \
--backup-location=asia \
--retained-backups=7
オンデマンドバックアップの作成:
gcloud sql backups create --instance=my-mysql-instance
バックアップからのリストア:
gcloud sql instances restore my-mysql-instance \
--backup-id=1234567890
ポイントインタイムリカバリ:
gcloud sql instances restore my-mysql-instance \
--restore-time=2023-08-01T12:00:00Z
gcloud sql instances patch my-mysql-instance \
--require-ssl
gcloud sql instances patch my-mysql-instance \
--database-flags=log_output=FILE,slow_query_log=on,general_log=on
Cloud SQLはGoogle Cloud Monitoringおよびロギングと統合されており、データベースの健全性とパフォーマンスを監視できます:
クエリインサイトを有効にして、データベースのパフォーマンスを最適化できます:
gcloud sql instances patch my-mysql-instance \
--insights-config-query-insights-enabled \
--insights-config-query-string-length=4096 \
--insights-config-query-plans-per-minute=20
Cloud SQLのコストを最適化するためのベストプラクティス:
# インスタンスの停止
gcloud sql instances patch my-mysql-instance --activation-policy=NEVER
# インスタンスの再開
gcloud sql instances patch my-mysql-instance --activation-policy=ALWAYS
Cloud SQLで発生する一般的な問題とその解決方法:
問題 | 考えられる原因 | 解決策 |
---|---|---|
接続エラー | ファイアウォールルール、認証情報の誤り、ネットワーク構成の問題 |
ファイアウォールルールを確認 認証情報を確認 Cloud SQL Proxyを使用して接続 |
パフォーマンスの低下 | リソース不足、非効率なクエリ、インデックスの欠如 |
クエリインサイトでスロークエリを特定 インデックスを追加 インスタンスサイズをアップグレード |
ディスク容量不足 | データ増加、一時ファイル、ログファイル |
ストレージサイズを増加 不要なデータを削除 自動ストレージ増加を有効化 |
レプリケーションの遅延 | 高負荷、ネットワーク問題、大きなトランザクション |
レプリカのマシンタイプをアップグレード 大きなトランザクションを分割 ネットワーク帯域幅を確認 |
SHOW STATUS WHERE Variable_name = 'Threads_connected';
SHOW PROCESSLIST;
SELECT table_name, table_schema, (data_length + index_length) / 1024 / 1024 AS size_mb FROM information_schema.tables ORDER BY size_mb DESC;
SHOW INDEX FROM table_name;
SELECT * FROM pg_stat_activity WHERE state = 'active';
Cloud SQLは以下のようなユースケースに適しています:
Cloud SQLは他のGoogle Cloudサービスと統合して、より強力なアプリケーションを構築できます:
サービス | 統合の利点 |
---|---|
Cloud Run | サーバーレスアプリケーションからデータベースに安全に接続 |
GKE | コンテナ化されたアプリケーションからデータベースにアクセス |
App Engine | マネージドアプリケーションプラットフォームとデータベースの統合 |
Cloud Functions | サーバーレス関数からデータベース操作を実行 |
BigQuery | Cloud SQLのデータをBigQueryにエクスポートして分析 |
Dataflow | ETLパイプラインでCloud SQLのデータを処理 |
Cloud IAM | データベースアクセスの一元管理 |
Cloud SQL は、Google Cloud Platform上でのリレーショナルデータベースの管理を簡素化するフルマネージドサービスです。MySQL、PostgreSQL、SQL Serverなどの一般的なデータベースエンジンをサポートし、運用タスクを自動化することで、開発者はアプリケーション開発に集中できます。
Cloud SQLの主な利点は以下の通りです:
Cloud SQLを効果的に活用するには、適切なインスタンスサイズの選択、セキュリティ対策の実装、パフォーマンスの最適化、コスト管理が重要です。また、他のGCPサービスと組み合わせることで、スケーラブルで信頼性の高いアプリケーションを構築することができます。