Облачная платформаAdvanced

Миграция данных в RDS для MySQL с использованием mysqldump

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Подготовка к миграции данных

Вы можете получить доступ RDS инстансы через EIP или через ECS.

  1. Подготовьте ECS для доступа к RDS инстанс или подготовьте устройство для доступа к инстансу БД через EIP.
    • Чтобы подключиться к инстансу БД через ECS, вам нужно создать ECS сначала.

      Для получения подробностей о том, как создать и подключиться к ECS, см. Как создать и подключиться к ECS?

    • Чтобы подключиться к экземпляру DB через EIP, вы должны:
      1. Привяжите EIP к экземпляру DB. Для подробностей см. Binding an EIP.
      2. Убедитесь, что локальное устройство может получить доступ к EIP.
  2. Установите клиент MySQL на подготовленный ECS или устройство, которое может получить доступ к RDS. Для подробностей см. 6.
    Note

    Версия клиента MySQL должна совпадать с версией движка DB вашего экземпляра RDS for MySQL. База данных MySQL или клиент предоставят mysqldump и mysql.

    После миграции данных в RDS вам может потребоваться изменить IP-адрес. Для подробностей см. Changing a Floating IP Address.

    Системные базы данных RDS mysql и sys нельзя импортировать из одного RDS for MySQL экземпляра в другой.

Экспорт данных

Перед миграцией базы данных в RDS, её данные необходимо экспортировать.

Notice
  • Инструмент экспорта должен соответствовать версии движка БД.
  • Миграция базы данных выполняется офлайн. Перед миграцией необходимо остановить все приложения, использующие исходную базу данных.
  1. Войдите в исходную базу данных.
  2. Используйте инструмент mysqldump для экспорта структуры таблицы в файл SQL.

    Notice

    Эта mysql база данных требуется для RDS управление. При экспорте структуры таблицы не указывайте --all-database. В противном случае произойдёт сбой базы данных.

    mysqldump --databases <DB_NAME> --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF-u <DB_USER> -p -h<DB_ADDRESS> -P <DB_PORT>|sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' ><BACKUP_FILE>

    • DB_NAME указывает имя базы данных, которую необходимо перенести.
    • DB_USER указывает имя пользователя базы данных.
    • DB_ADDRESS указывает адрес базы данных.
    • DB_PORT указывает порт базы данных.
    • BACKUP_FILE указывает имя файла, в который будут экспортированы данные.

    Введите пароль базы данных, когда будет запрошено.

    Пример:

    mysqldump --databases rdsdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.168.151.18 -P 3306 |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > dump-defs.sql

    Введите пароль:

    Note

    Если вы используете mysqldump версии ранее 5.6, удалите --set-gtid-purged=OFF перед выполнением этой команды.

    После выполнения этой команды, a dump-defs.sql файл будет сгенерирован следующим образом:

    [rds@localhost ~]$ ll dump-defs.sql
    -rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-defs.sql

  3. Используйте инструмент mysqldump для экспорта данных в файл SQL.

    Notice

    Эта mysql база данных требуется для RDS управление. При экспорте данных не указывайте --all-database. В противном случае произойдет ошибка базы данных.

    mysqldump --databases <DB_NAME> --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers-u<DB_USER> -p -h<DB_ADDRESS> -P<DB_PORT> -r<BACKUP_FILE>

    Для получения сведений о параметрах в предыдущей команде см 2.

    Введите пароль базы данных, когда будет предложено.

    Пример:

    mysqldump --databases rdsdb --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u root -p -h 192.168.151.18 -P 3306 -r dump-data.sql

    Note

    Если вы используете mysqldump версии ранее 5.6, удалите --set-gtid-purged=OFF перед выполнением этой команды.

    После выполнения этой команды, a dump-data.sql файл будет создан следующим образом:

    [rds@localhost ~]$ ll dump-data.sql
    -rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-data.sql

Импорт данных

Вы можете подключить ваш клиент к RDS и импортировать экспортированные SQL файлы в RDS.

Notice

Если исходная база данных содержит триггеры, хранимые процедуры, функции или события, вы должны установить log_bin_trust_function_creators на ON в целевой базе данных перед импортом данных.

  1. Войдите в ECS или устройство, которое может получить доступ к RDS экземпляр DB.
  2. Подключиться к RDS экземпляр DB через клиент.
  3. Импортировать структуру таблицы в RDS.

    # mysql -f -h<RDS_ADDRESS> -P<DB_PORT> -u root -p < <BACKUP_DIR>/dump-defs.sql

    • RDS_ADDRESS указывает IP-адрес RDS DB экземпляр.
    • DB_PORT указывает порт RDS DB экземпляра.
    • BACKUP_DIR указывает каталог, где dump-defs.sql хранится.

    Пример:

    # mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-defs.sql

    Введите пароль:

    Note

    Если вы собираетесь импортировать SQL‑операторы таблицы в RDS, укажите базу данных (mydb) в команде. В противном случае может появиться сообщение об ошибке "No database selected". Пример:

    # mysql -f -h 172.16.66.198 -P 3306 -u root -p mydb < dump-defs.sql

    Введите пароль:

  4. Импортировать данные в RDS.

    # mysql -f -h<RDS_ADDRESS> -P<DB_PORT> -u root -p < <BACKUP_DIR>/dump-data.sql

    • RDS_ADDRESS указывает IP-адрес RDS Экземпляр DB.
    • DB_PORT указывает порт экземпляра RDS DB.
    • BACKUP_DIR указывает директорию, в которой dump-data.sql хранится.

    Пример:

    # mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-data.sql

    Введите пароль:

    Note

    Если вы собираетесь импортировать SQL‑операторы таблицы в RDS, укажите базу данных (mydb) в команде. В противном случае может быть отображено сообщение об ошибке "No database selected". Пример:

    # mysql -f -h 172.16.66.198 -P 3306 -u root -p mydb < dump-defs.sql

    Введите пароль:

  5. Просмотрите результат импорта.

    mysql> show databases;

    Следующий результат указывает, что база данных rdsdb была импортирована.

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | rdsdb |
    | mysql |
    | performance_schema |
    +--------------------+
    4 rows in set (0.00 sec)