Рубрики
Uncategorized

Как перенести базу данных MySQL из Digitalocean на AWS RDS

Цель В конце этого процесса мы успешно переместили наш выбранный MySQL SCH … Помечено с AWS, Digitalocean, база данных, DEVOPS.

Цель

В конце этого процесса мы успешно переместили наши выбранные схемы MySQL в другую базу данных MySQL (например, AWS RDS). Мы воспользуемся некоторыми автоматическими скриптами Bash, чтобы облегчить наш путь.

ПРЕДУПРЕЖДЕНИЕ. Стратегия, показанная в данном руководстве, не понадобится время для клиентов наших баз данных, пока работает процесс миграции. Используйте это руководство как ресурс обучения на свой риск.

Если вы ищете самое низкое время простоя миграции, я предлагаю взглянуть на AWS База данных Миграционная служба Отказ

Предварительные условия

Перед началом, убедитесь, что у вас есть следующие двоичные файлы на вашем сервере (версии, используемые в этом руководстве, были предоставлены в качестве ссылки).

  • mysqldumm (ver 10.13 Распространение 5.7.33)
  • MySQL (Client Ver 14.14 распределяет 5.7.33)
  • Bash (версия 4.4.20 (1) -релез)
  • Дата (GNU COREUTILS 8.28)
  • Как ранее были созданы базы данных источника и назначения и являются совместимыми синтаксисом. Пользователи и пароли уже созданы для миграции, а также
  • Вы уже знаете, как войти на сервер на цифровой камень и комфортно с использованием текстового редактора командной строки, такой как VIM, Nano, Emacs (в зависимости от вас работает на вашем сервере)

Учетные данные базы данных

Создайте файл пароля ~/.mysql_source_config и поместите пароль источника базы данных, используя следующую структуру для mysqldump.

[mysqldump]
password=the_password
host=localhost
port=3306

Установите рекомендуемые разрешения для защиты файла от посторонних глаз. Команда chmod 600 <Файл> Дает разрешение на чтение и запись только для владельца файла (пользователь системы, который создает его в этом случае).

chmod 600 ~/.mysql_source_config

Если предыдущая команда не работала для вас, это может быть связано с отсутствием разрешений от вашего вошедшего в систему пользователя.

Давайте сделаем тот же процесс и храним пароль базы данных MySQL MySQL, создавая ~/.mysql_destination_config Отказ Имя конфигурации будет ориентироваться MySQL в этом случае.

[mysql]
password=the_password
host=https://aws-rds-host.com
port=3306

И не забывайте о его разрешениях

chmod 600 ~/.mysql_destination_config

Резервное копирование базы данных

Мы можем сделать это, экспортируя все схемы, но мы сделаем это на этот раз, предоставляя, какие схемы мы хотим мигрировать ( a_database_schema и другой_database_schema Несомненно

mysqldump --defaults-extra-file="~/.mysql_source_config" -u root --databases a_database_schema another_database_schema > backup-$(date +"%Y_%m_%d_%H_%M_%S").sql

Предыдущая команда использует root Как имя пользователя источника базы данных И это читает пароль от ~/.mysql_source_config . Выход этой команды будет файл, содержащий DDL наших схем, таблиц и вкладышей.

Почему вы отделили пароль от команды?

Две причины приходят на мой взгляд:

  • Безопасность Предпочтительно, чтобы они были в разных файлах, чтобы предотвратить запуск команд с паролем. Помните, что все команды, которые мы работаем на терминале, в конечном итоге в файле истории. И мы не хотим пропускать наш пароль случайно
  • Становится проще автоматизировать другие команды/сценарии, которые могут понадобиться один и тот же пароль повторное использование одного и того же файла

Создайте каталог сценариев

Нам нужно место, чтобы поставить скрипты, которые мы собираемся создавать

# Let's place ourselves in the user directory
cd

# And create ~/bin directory if it does not exist
mkdir bin

# We need to set appropriate permissions
# Allowing read, write and execute access only to the owner of the file
chmod 700 bin

Теперь мы должны сообщить системе, где найти наши исполняемые файлы. Нам нужно добавить следующую строку в нашу конфигурацию оболочки (в этом случае ~/.bashrc )

export PATH=$PATH:$HOME/bin

Создайте сценарий резервного копирования

Давайте создадим бегущий скрипт ~/bin/mysql-backup Это поможет нам проверить нашу команду Backup.

# Let's navigate inside our scripts directory
cd ~/bin

# And create a new file
touch mysql-backup

# Don't forget to protect the file
# This time we'll make it executable since this file will become our backup script
chmod 700 mysql-backup

Давайте поместим нашу команду Backup внутри этого нового файла mysql-backup так:

#!/bin/bash
# This command will output a file with the DDL to recreate our schemas, tables, and values

# If no parameter has been given, we'll use this name for the generated file
DEFAULT_FILE=backup-$(date +"%Y_%m_%d_%H_%M_%S").sql

mysqldump \
          --defaults-extra-file="~/.mysql_source_config" \
          --user=root \
          --databases \
            a_database_schema \
            another_database_schema \
          > ${1:-$DEFAULT_FILE}

Убедись --Пользователь и --датабазет Схемы соответствуют вашему.

Создайте скрипт восстановления

Давайте создадим еще один бегущий скрипт, который использует выход предыдущей команды для восстановления его в другой базе данных: ~/bin/mysql-восстановление Отказ

# Let's place ourselves in the previously created ~/bin directory
cd ~/bin

# And create a new file
touch mysql-restore

# Don't forget to protect the file
# We'll make it executable since this file will become our restauration script
chmod 700 mysql-restore

Содержимое файла должно выглядеть так:

#!/bin/bash
# This command will take a SQL file and execute it on the Destination Database

mysql \
        --defaults-extra-file="~/.mysql_destination_config" \
        --user=migration \
        < $1

Убедись - Узер соответствует вашему.

Создать сценарий миграции

Давайте создадим бегущий скрипт, который будет интегрировать предыдущие команды, чтобы сделать синхронную миграцию ~/bin/mysql-мигрировать Отказ

# Let's place ourselves in the previously created ~/bin directory
cd ~/bin

# And create a new file
touch mysql-migrate

# Don't forget to protect the file
# We'll make it executable since this file will become our restauration script
chmod 700 mysql-migrate

Содержимое файла должно выглядеть так:

#!/bin/bash
# A backup file will be created with the SQL needed for the migration.
# Feel free to delete it after the migration has run

# Append the timestamp to the name of the generated file
BACKUP_FILE=backup-$(date +"%Y_%m_%d_%H_%M_%S").sql

echo Making backup file from Source Database
mysql-backup $BACKUP_FILE

echo Restoring on Destination Database
mysql-restore $BACKUP_FILE

echo Done!

Стратегия миграции

  1. Добавьте конфигурации пароля для баз данных источника и назначения на исходном сервере. Убедитесь, что все учетные данные работают правильно
  2. Разместите команды миграции в каталоге пути (мы создали один ~/bin). Убедитесь, что вы уже проверили, команды работают, как ожидалось, и при запуске их нет ошибок разрешений.
  3. Подготовьте список переменных среды для обновления на клиентских серверах базы данных, если применимо
  4. Выключите исходную базу данных пишет на всех клиентах. Беги PHP Artisan down на лиравых проектах
  5. Поместите свой терминал в пустой каталог (желательно), запустите MySQL-мигрировать и подожди, пока он не закончится
  6. Укажите все клиенты в хост базы данных назначения, используя свои новые учетные данные. Измените переменные среды на клиентах базы данных, если это необходимо. Если применимо, обновите .env Файл на проектах Laravel
  7. Поверните назад на базу данных пишет. На этот раз указывая на базу данных назначения. Беги PHP Artisan Up на лиравых проектах

Оригинал: «https://dev.to/cristianllanos/how-to-migrate-a-mysql-database-from-digitalocean-to-aws-rds-3o82»