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

Перемещение данных в RDS for MySQL с использованием mysqldump

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

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

Вы можете получить доступ RDS Экземпляры DB через EIP или через ECS.

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

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

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

    Для получения подробностей см Как установить клиент MySQL?

    Note

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

    После миграции данных в RDS вам может потребоваться изменить IP‑адрес. Для получения подробностей см Просмотр и изменение плавающего IP‑адреса.

    Системные базы данных RDS mysql и sys cannot be imported from one RDS for MySQL instance to another.

Exporting Data

Before migrating a database to RDS, its data needs to be exported.

Notice
  • The export tool must match the DB engine version.
  • Database migration is performed offline. Before the migration, you have to stop all applications using the source database.
  1. Log in to the source database.
  2. Use the mysqldump tool to export the table structure to an SQL file.

    Notice

    The mysql database is required for RDS management. When exporting the table structure, do not specify --all-database. Otherwise, a database fault will occur.

    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 перед запуском этой команды.

    После выполнения этой команды, 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 8635 -r dump-data.sql

    Note

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

    После выполнения этой команды 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>-uroot-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, укажите базу данных в команде. В противном случае может быть отображено сообщение об ошибке "No database selected". Например, если вы собираетесь импортировать SQL‑операторы таблицы в базу данных mydb, выполните следующую команду:

    # 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>-uroot-p< <BACKUP_DIR>/dump-data.sql

    • RDS_ADDRESS указывает IP-адрес RDS экземпляр БД.
    • 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, укажите базу данных в команде. В противном случае может появиться сообщение об ошибке "No database selected". Например, если вы планируете импортировать SQL‑операторы таблицы в базу данных mydb, выполните следующую команду:

    # 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)