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 脚本文件。