Help Center/ GaussDB(for MySQL)/ User Guide/ Data Migration/ Migrating Data to GaussDB(for MySQL) Using mysqldump
Updated on 2024-11-06 GMT+08:00

Migrating Data to GaussDB(for MySQL) Using mysqldump

You can use mysqldump to migrate data to GaussDB(for MySQL).

Precautions

Database migration is performed offline. Before the migration, you must stop any applications using the source database.

Preparing for the Migration

  1. Prepare an ECS in the same VPC and subnet as the GaussDB(for MySQL) instance or bind an EIP to the GaussDB(for MySQL) instance.
    • To connect to an instance through a private network, an ECS has to be created first.

      Purchase an ECS and log in to the ECS.

    • To connect to an instance through an EIP, you must:
      1. Bind the EIP to the instance. For details, see Procedure.
      2. Ensure that the local device can access the EIP that has been bound to the instance.
  2. Install the MySQL client on the prepared ECS or device that can access the GaussDB(for MySQL) instance.
    • Install the MySQL client by following the instructions provided in How Can I Install the MySQL Client?
    • Ensure that the MySQL client version is the same as or later than that installed on the GaussDB(for MySQL) instance. The MySQL database or client provides mysqldump and mysql by default.

Exporting Data

Before migrating data from the source database to the GaussDB(for MySQL) instance, you need to export data from the source database first.

mysqldump must match the DB engine version.

  1. Log in to the prepared ECS or device that can access the GaussDB(for MySQL) instance.
  2. Use mysqldump to export metadata into an SQL file.

    MySQL databases are required for GaussDB(for MySQL) management. When exporting metadata, do not specify --all-database, or the databases will be unavailable.

    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> indicates the name of the database to be migrated.
    • <DB_USER> indicates the database username.
    • <DB_ADDRESS> indicates the database address.
    • <DB_PORT> indicates the database port.
    • <BACKUP_FILE> indicates the name of the file to which the data will be exported.

    Enter the database password when prompted.

    Example:

    mysqldump --databases gaussdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.*.*.* -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

    Enter password:

    After this command is executed, the dump-defs.sql file will be generated.

  3. Use mysqldump to export data into an SQL file.

    MySQL databases are required for GaussDB(for MySQL) management. When exporting metadata, do not specify --all-database, or the databases will be unavailable.

    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>

    For details on the parameters in the preceding command, see 2.

    Enter the database password when prompted.

    Example:

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

    After this command is executed, the dump-data.sql file will be generated.

Importing Data

You can use a client to connect to the GaussDB(for MySQL) instance through an ECS or device that can access the GaussDB(for MySQL) instance and then import the exported SQL files into that instance.

If the source database calls triggers, stored procedures, functions, or events, you must set log_bin_trust_function_creators to ON for the destination database before importing data.

  1. Import metadata into the GaussDB(for MySQL) instance.

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

    • <DB_ADDRESS> indicates the IP address of the GaussDB(for MySQL) instance.
    • <DB_PORT> indicates the port of the GaussDB(for MySQL) instance.
    • <BACKUP_DIR> indicates the directory where dump-defs.sql will be stored.

    Example:

    mysql -f -h 172.*.*.* -P 3306 -u root -p < dump-defs.sql

    Enter password:

  2. Import data into the GaussDB(for MySQL) instance.

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

    • <DB_ADDRESS> indicates the IP address of the GaussDB(for MySQL) instance.
    • <DB_PORT> indicates the port of the GaussDB(for MySQL) instance.
    • <BACKUP_DIR> indicates the directory where dump-data.sql will be stored.

    Example:

    mysql -f -h 172.*.*.* -P 3306 -u root -p < dump-data.sql

    Enter password:

  3. Use the MySQL tool to connect to the GaussDB(for MySQL) instance and view the results.

    mysql> show databases;

    In this example, the database named my_db has been imported.

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