
Cloud
Learning Level
Google Cloud SQL is a fully managed relational database service that supports MySQL, PostgreSQL, and SQL Server. It handles backups, replication, and patching automatically, allowing you to focus on your application.
By the end of this lesson, you'll understand:
Cloud SQL is a fully managed service that:
# Or use gcloud CLI
gcloud sql instances create my-database \
--database-version=MYSQL_8_0 \
--region=us-central1 \
--tier=db-f1-micro \
--backup-start-time=03:00 \
--enable-bin-log# Create database
gcloud sql databases create myapp_db \
--instance=my-database
# Create user
gcloud sql users create app_user \
--instance=my-database \
--passwordMySQL:
gcloud sql connect my-database \
--user=root \
--quiet
# Then in MySQL prompt:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(200),
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);package.json:
{
"dependencies": {
"mysql2": "^3.0.0",
"dotenv": "^16.0.0"
}
}server.js:
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'your-instance-ip',
user: 'app_user',
password: process.env.DB_PASSWORD,
database: 'myapp_db',
connectionLimit: 10,
waitForConnections: true
});
async function getUsers() {
const connection = await pool.getConnection();
try {
const [rows] = await connection.execute('SELECT * FROM users');
return rows;
} finally {
connection.release();
}
}
async function createUser(name, email) {
const connection = await pool.getConnection();
try {
const [result] = await connection.execute(
'INSERT INTO users (name, email) VALUES (?, ?)',
[name, email]
);
return result.insertId;
} finally {
connection.release();
}
}requirements.txt:
mysql-connector-python==8.0.33
python-dotenv==1.0.0app.py:
import mysql.connector
from mysql.connector import pooling
import os
dbconfig = {
"host": os.environ.get("DB_HOST"),
"user": "app_user",
"password": os.environ.get("DB_PASSWORD"),
"database": "myapp_db"
}
pool = pooling.MySQLConnectionPool(pool_name="mypool", pool_size=5, **dbconfig)
def get_users():
conn = pool.get_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
cursor.close()
conn.close()
return result
def create_user(name, email):
conn = pool.get_connection()
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (name, email))
conn.commit()
user_id = cursor.lastrowid
cursor.close()
conn.close()
return user_id# Download Cloud SQL Proxy
curl -o cloud-sql-proxy https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
chmod +x cloud-sql-proxy
# Run proxy
./cloud-sql-proxy my-project:us-central1:my-database &
# Connect via localhost:3306
mysql -h 127.0.0.1 -u app_user -p# Create on-demand backup
gcloud sql backups create \
--instance=my-database
# List backups
gcloud sql backups list --instance=my-database
# Restore from backup
gcloud sql backups restore BACKUP_ID \
--backup-instance=my-databasegcloud sql instances patch my-database \
--backup-start-time=03:00 \
--transaction-log-retention-days=7# Create user with password
gcloud sql users create app_user \
--instance=my-database \
--password
# Specific permissions
gcloud sql users set-password app_user \
--instance=my-database \
--passwordgcloud sql instances patch my-database \
--storage-size=50GBgcloud sql instances patch my-database \
--tier=db-n1-standard-1gcloud monitoring time-series list \
--filter='resource.type=cloudsql_database'Learn about Cloud SQL replication for high availability, or explore connecting to Cloud Run applications.
Resources
Ojasa Mirai
Master AI-powered development skills through structured learning, real projects, and verified credentials. Whether you're upskilling your team or launching your career, we deliver the skills companies actually need.
Learn Deep • Build Real • Verify Skills • Launch Forward