Различия
Показаны различия между двумя версиями страницы.
sql:mysql-to-pg-plan [2024/08/13 21:07] admin создано |
sql:mysql-to-pg-plan [2024/08/13 21:24] (текущий) admin |
||
---|---|---|---|
Строка 9: | Строка 9: | ||
- Запустить pgloader, который перенесет данные | - Запустить pgloader, который перенесет данные | ||
- Переключить конфиг МС на Postgres и запустить МС | - Переключить конфиг МС на Postgres и запустить МС | ||
+ | |||
+ | |||
+ | Подробное описание на примере переезда одного микросервиса '' | ||
+ | |||
+ | ===== Исправить код МС на Postgres ===== | ||
+ | |||
+ | Локально: | ||
+ | |||
+ | ==== План перевода ==== | ||
+ | |||
+ | Если проект был форкнут от us-template, | ||
+ | |||
+ | <code bash> | ||
+ | git remote add template git@******: | ||
+ | git fetch template laravel-10.x-latest | ||
+ | git merge --no-commit --no-ff template/ | ||
+ | # Исправление конфликтов и измененных значений | ||
+ | </ | ||
+ | |||
+ | Если это не так, то можно копировать из '' | ||
+ | |||
+ | < | ||
+ | [ ] .env.dist: подключения, | ||
+ | [ ] docker-compose.yml: | ||
+ | [ ] docker/ | ||
+ | [ ] docker/ | ||
+ | [ ] docker/ | ||
+ | [ ] docker/ | ||
+ | [ ] docker/ | ||
+ | [ ] src/ | ||
+ | [ ] src/ | ||
+ | [ ] src/ | ||
+ | [ ] поправить миграцию ' | ||
+ | [ ] / | ||
+ | [ ] миграции: | ||
+ | [ ] миграции: | ||
+ | [ ] Laravel-query-builder: | ||
+ | </ | ||
+ | |||
+ | Более тщательные проверки можно делать после переезда на develop/ | ||
+ | |||
+ | <note important> | ||
+ | **Foreign key** | ||
+ | |||
+ | MySQL по-дефолту при создании FK также создает индекс на это поле. Однако Postgres этого не делает по-умолчанию. Но индексы нужны. Поэтому необходимо проверить, | ||
+ | </ | ||
+ | |||
+ | ===== Создать БД ===== | ||
+ | |||
+ | Можно воспользоваться скриптом для генерации SQL, либо использовать сниппет ниже. | ||
+ | |||
+ | <code sql> | ||
+ | -- Создание БД для тестов на сервере develop | ||
+ | |||
+ | CREATE DATABASE " | ||
+ | CREATE DATABASE " | ||
+ | CREATE DATABASE " | ||
+ | CREATE DATABASE " | ||
+ | CREATE DATABASE " | ||
+ | |||
+ | ALTER DATABASE " | ||
+ | ALTER DATABASE " | ||
+ | ALTER DATABASE " | ||
+ | ALTER DATABASE " | ||
+ | ALTER DATABASE " | ||
+ | |||
+ | -- На сервере develop | ||
+ | |||
+ | CREATE USER " | ||
+ | CREATE USER " | ||
+ | |||
+ | CREATE DATABASE " | ||
+ | CREATE DATABASE " | ||
+ | |||
+ | GRANT " | ||
+ | GRANT " | ||
+ | ALTER DATABASE " | ||
+ | ALTER DATABASE " | ||
+ | |||
+ | \c " | ||
+ | GRANT ALL PRIVILEGES ON DATABASE " | ||
+ | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO " | ||
+ | |||
+ | \c " | ||
+ | GRANT ALL PRIVILEGES ON DATABASE " | ||
+ | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO " | ||
+ | |||
+ | -- На сервере prod | ||
+ | |||
+ | CREATE USER " | ||
+ | CREATE USER " | ||
+ | |||
+ | CREATE DATABASE " | ||
+ | CREATE DATABASE " | ||
+ | |||
+ | GRANT " | ||
+ | GRANT " | ||
+ | ALTER DATABASE " | ||
+ | ALTER DATABASE " | ||
+ | |||
+ | \c " | ||
+ | GRANT ALL PRIVILEGES ON DATABASE " | ||
+ | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO " | ||
+ | |||
+ | \c " | ||
+ | GRANT ALL PRIVILEGES ON DATABASE " | ||
+ | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO " | ||
+ | GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO " | ||
+ | </ | ||
+ | |||
+ | ===== Сделать чистую миграцию - только схема ===== | ||
+ | |||
+ | На локальной машине разработчика проверить, | ||
+ | |||
+ | Временно добавить следующие строки в подключение " | ||
+ | |||
+ | <code php> | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | </ | ||
+ | |||
+ | Запустить миграцию: | ||
+ | |||
+ | <code bash> | ||
+ | art migrate | ||
+ | </ | ||
+ | |||
+ | В некоторых проектах туда добавляются первоначальные данные, | ||
+ | |||
+ | Зачем это делать? | ||
+ | |||
+ | |||
+ | ===== Остановить МС ===== | ||
+ | |||
+ | |||
+ | Делается через GitLab. Нужно, чтобы не была нарушена ссылочная целостность. | ||
+ | |||
+ | |||
+ | Запустить pgloader, который перенесет данные | ||
+ | |||
+ | Создать файл '' | ||
+ | |||
+ | Его примерное содержимое: | ||
+ | |||
+ | < | ||
+ | LOAD DATABASE | ||
+ | FROM mysql:// | ||
+ | INTO postgresql:// | ||
+ | |||
+ | WITH data only, truncate, reset sequences | ||
+ | SET maintenance_work_mem to ' | ||
+ | | ||
+ | | ||
+ | AFTER LOAD DO $$ ALTER SCHEMA " | ||
+ | |||
+ | | ||
+ | ; | ||
+ | </ | ||
+ | |||
+ | pgloader работает со схемой, | ||
+ | |||
+ | Также происходит truncate, иначе при миграции могут быть ошибки - если '' | ||
+ | |||
+ | Запуск миграции: | ||
+ | |||
+ | <code bash> | ||
+ | pgloader migrate-mortgage-data.load | ||
+ | </ | ||
+ | |||
+ | Необязательно, | ||
+ | |||
+ | <code sql> | ||
+ | ALTER DATABASE " | ||
+ | </ | ||
+ | |||
+ | Более подробная информация о самой утилите приведена [[sql: | ||
+ | |||
+ | ===== Переключить конфиг МС на Postgres и запустить МС ===== | ||
+ | |||
+ | Список переменных, | ||
+ | |||
+ | < | ||
+ | app: | ||
+ | dev_mysql_credential: | ||
+ | db_host: " | ||
+ | env: | ||
+ | - name: DB_DATABASE | ||
+ | value: us-template-develop | ||
+ | - name: DB_USERNAME | ||
+ | value: svc-us-template-develop | ||
+ | - name: DB_PASSWORD | ||
+ | value: " | ||
+ | </ | ||
+ | |||
+ | Список переменных, | ||
+ | |||
+ | < | ||
+ | app: | ||
+ | dev_mysql_credential: | ||
+ | db_host: " | ||
+ | env: | ||
+ | - name: DB_DATABASE | ||
+ | value: us-template-production | ||
+ | - name: DB_USERNAME | ||
+ | value: svc-us-template-production | ||
+ | - name: DB_PASSWORD | ||
+ | value: " | ||
+ | - name: DB_CONNECTION | ||
+ | value: " | ||
+ | - name: DB_PORT | ||
+ | value: " | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | Не допускайте ошибок в прод-конфигурации. Нужно проверить, | ||
+ | </ |