使用 MySQLDump 迁移 MySQL 表结构到 OceanBase 数据库

2023年 11月 21日 83.7k 0

MySQLDump 是 MySQL 提供的用于导出 MySQL 数据库对象和数据的工具。您可通过参数 --help 查看使用帮助,此处主要列举 mysqldump 常用的场景命令和参数搭配。

导出指定数据库的表结构(不包括数据)

您可运行下述命令导出指定数据库的表结构(不包括数据)。

mysqldump -h 127.1 -ur*** -P3306 -p123456 -d TPCH --compact > tpch_ddl.sql

导出来的脚本有如下特征:

  • 脚本包含视图定义,但是会以 / *!* / 注释。我们不关注视图,可以删除这部分内容。

  • 脚本包含 OceanBase MySQL 不支持的语法,但是不影响,替换了即可。比如变量 SQL_NOTES 和 DEFINER 语句等。 例如:导出的脚本里包含 MAX_ROWS= 的设置,这个是 MySQL 特有的语法,OceanBase MySQL 不支持该语法,执行会报错。

    /*!40101 SET character_set_client = @saved_cs_client */;
    /*!40101 SET @saved_cs_client = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `NATION` (
    `N_NATIONKEY` int(11) NOT NULL,
    `N_NAME` char(25) COLLATE utf8_unicode_ci NOT NULL,
    `N_REGIONKEY` int(11) NOT NULL,
    `N_COMMENT` varchar(152) COLLATE utf8_unicode_ci DEFAULT NULL,
    PRIMARY KEY (`N_NATIONKEY`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci MAX_ROWS=4294967295;

    您可把所有 MAX_ROWS= 以及后面部分批量注释掉。如在 vim 中使用 :%s/MAX_ROWS=/; -- MAX_ROWS=/g

  • 在导出的表结构语句里,可能包含外键。在导入 OceanBase MySQL 时,如果外键依赖的表没有创建,导入脚本会报错。因此导入之前需禁用外键检查约束。

    MySQL [oceanbase]> set global foreign_key_checks=off;
    Query OK, 0 rows affected (0.01 sec)

    MySQL [oceanbase]> show global variables like '%foreign%';
    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | foreign_key_checks | OFF |
    +--------------------+-------+
    1 row in set (0.00 sec)

修改后,退出会话并重新登录。在 obclient 客户端通过 source 命令执行外部 SQL 脚本文件。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论