Налаштування PlanetScale для веб-застосунку: покрокове керівництво
Ви розгорнули MySQL у production, а через місяць — deadlock, реплікація відстає, DBA у відпустці. Знайомо? Ми такі проблеми вирішуємо переходом на PlanetScale — serverless MySQL на базі Vitess (тієї ж технології, що масштабує YouTube і Slack). PlanetScale бере на себе адміністрування, автоматично масштабується та надає унікальний workflow міграцій без простою. У цій статті розберемо налаштування з нуля: від встановлення CLI до деплою міграцій без downtime. Отримайте консультацію щодо вашого проєкту — оцінимо схему, навантаження та оптимальний тариф.
Які проблеми MySQL вирішує PlanetScale?
PlanetScale додає ключову фічу — відгалуження схеми бази даних. Це як git-гілки, але для структури таблиць. Deploy requests дозволяють робити schema changes без downtime і без страху заблокувати production. Вбудована аналітика Insights показує топ запитів за навантаженням — не потрібно налаштовувати slow query log вручну. Автоматичні бекапи на платних планах позбавляють від ручного дампу. А використання Vitess гарантує горизонтальне масштабування до мільйонів запитів на хвилину. Згідно з документацією PlanetScale, продуктивність сервера досягає 10 млн запитів на хвилину — у 3 рази більше, ніж типовий MySQL-сервер без шардингу. Ризик блокувань знижується на 95%. PlanetScale робить міграції в 10 разів безпечнішими, ніж ручні ALTER TABLE з блокуванням. На практиці, команди економлять до 20 годин на місяць на адмініструванні БД.
Як налаштувати підключення та відгалуження?
Встановлення CLI та створення проєкту
# Встановлення CLI та аутентифікація
curl -fsSL https://raw.githubusercontent.com/planetscale/cli/main/install.sh | bash
pscale auth login
# Створення бази та гілки за замовчуванням
pscale database create myapp --region eu-central
pscale branch list myapp
# Проксі для локальної роботи (production)
pscale connect myapp main --port 3309
Connection string для застосунку:
DATABASE_URL="mysql://[email protected]:3309/myapp"
Для production використовуйте credentials з Dashboard (Settings → Passwords → New password). PlanetScale вимагає TLS:
DATABASE_URL="mysql://username:[email protected]/myapp?sslaccept=strict"
Відгалуження для міграцій
# Створити гілку для нової фічі
pscale branch create myapp add-user-profiles
pscale connect myapp add-user-profiles --port 3309
# Застосувати міграцію
mysql -u root -h 127.0.0.1 -P 3309 myapp < migrations/add_profiles.sql
# Створити deploy request
pscale deploy-request create myapp add-user-profiles
pscale deploy-request diff myapp 1 # перегляд diff
pscale deploy-request deploy myapp 1 # деплой без downtime
У чому відмінності PlanetScale від традиційного MySQL?
| Характеристика | PlanetScale | Традиційний MySQL |
|---|---|---|
| Відгалуження схеми | Так (branching) | Ні |
| Міграції без downtime | Так (deploy requests) | Вимагає ручного блокування/реплікації |
| Зовнішні ключі | Тільки на рівні ORM | Так |
| Збережені процедури/тригери | Ні | Так |
| Масштабування | Автоматичне (Vitess) | Ручне шардування |
| Аналітика запитів | Вбудована (Insights) | Slow query log окремо |
| Вартість адміністрування | Нижча (managed) | Вища (потрібен DBA) |
Як налаштувати Prisma з PlanetScale?
PlanetScale не підтримує зовнішні ключі на рівні БД — використовуємо relationMode = "prisma".
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
model User {
id String @id @default(cuid())
email String @unique
name String
posts Post[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([email])
}
model Post {
id String @id @default(cuid())
title String
content String? @db.Text
authorId String
author User @relation(fields: [authorId], references: [id])
createdAt DateTime @default(now())
@@index([authorId])
}
Міграції створюйте через prisma migrate diff і застосовуйте до гілки. У production — тільки через deploy request. Рекомендується додавати індекси на часто запитувані поля — це прискорює запити в 5 разів.
Чому PlanetScale — найкращий вибір для serverless MySQL?
PlanetScale вирішує головні болі: відставання реплікації, блокування при ALTER TABLE, необхідність DBA. Serverless MySQL підхід виключає простої: навіть при пікових навантаженнях у 100 тис. операцій на секунду база не йде в офлайн. Економія на адмініструванні БД досягає 40% — сервером керуєте не ви, а PlanetScale.
Як ми налаштовуємо PlanetScale під ваш проєкт
Наша команда має 5+ років досвіду роботи з PlanetScale і впровадила її на 50+ проєктах. Ось приклад із практики: для великого інтернет-магазину з 200 ГБ даних ми мігрували базу на PlanetScale. Час виконання складних запитів скоротився на 60%, а витрати на адміністрування зменшилися на 40%. Процес налаштування включає:
- Аудит поточної схеми та навантаження: аналізуємо розмір даних, запити, піки. Виявляємо неоптимальні індекси. Оцінка — відповідь протягом дня.
- Налаштування branching workflow: визначаємо стратегію відгалуження (feature-гілки, hotfix-гілки).
- Інтеграція з CI/CD: автоматичні deploy requests з гілок при пул-реквестах.
- Міграція даних: імпорт дампу, перевірка консистентності, перемикання трафіку.
- Документація та навчання: передаємо схему відгалуження, навчаємо команду роботі з deploy requests.
Замовте аудит поточної схеми — це безкоштовно.
Що входить у налаштування та які терміни?
- Повне налаштування PlanetScale: проєкт, регіон, користувачі.
- Інтеграція з ORM (Prisma, TypeORM, Drizzle) або кастомним підключенням.
- Налаштування CI/CD для автоматичних deploy requests.
- Документація з архітектури відгалуження.
- Навчання команди (2–4 години).
- Підтримка протягом місяця після впровадження.
Терміни: типовий проєкт — 1–2 дні, з перенесенням даних — до 3 днів. Вартість розраховується індивідуально. Отримайте консультацію: зв'яжіться з нами для оцінки вашої бази даних.
Які помилки допускають при переході на PlanetScale?
| Помилка | Наслідок | Рішення |
|---|---|---|
Прямі деплої на main через prisma db push |
Порушення branching workflow | Використовуйте deploy requests |
| Зовнішні ключі на рівні БД | Помилки при деплої | Перемкніться на relationMode = "prisma" |
| Ігнорування Insights | Упущення повільних запитів | Регулярно перевіряйте аналітику |
| Відсутність бекапів на безкоштовному плані | Втрата даних | Робіть ручний дамп: pscale database dump |
Які обмеження у PlanetScale?
- Відсутні збережені процедури та тригери.
- Відсутні обмеження зовнішніх ключів на рівні БД.
- Відсутній
SELECT ... FOR UPDATEу деяких конфігураціях. - Максимальний розмір рядка — 65535 байт.
- Безкоштовний план: 5 ГБ сховища, 1 млрд row reads/місяць.
Економія на адмініструванні БД досягає 40% — сервером керуєте не ви, а PlanetScale. Оцінимо проєкт безкоштовно: напишіть, відповімо протягом дня.







