暂无图片
暂无图片
2
暂无图片
暂无图片
1
暂无图片

详细指南:如何将MySQL数据库无缝迁移到AntDB

摘要

在数字化时代,数据迁移是企业升级数据库系统的关键步骤。本文将为您详细介绍如何将MySQL数据库迁移到AntDB,包括详细的步骤、技巧和注意事项。无论您是数据库管理员还是开发者,本文都将帮助您顺利完成迁移,提升数据库性能和稳定性。

1. 软件安装

1.1 安装必要的Perl模块

为了使用Ora2Pg工具进行数据库迁移,您需要在系统中安装以下Perl模块。请按照以下步骤操作:

步骤1:安装DBI、JSON、DBD:Pg、DBD:Oracle

yum install mysql-devel yum install postgresql-devel yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMake
复制

步骤2:安装其他必需软件包

下载并安装以下软件包:

  • CPAN-2.27.tar.gz
  • DBD-mysql-4.050.tar.gz
  • DBD-Oracle-1.80.tar.gz(Oracle迁移需要的包)
  • DBD-Pg-3.10.5.tar.gz
  • Devel-CheckLib-1.14.tar.gz
  • instantclient_11_2.tar.gz(Oracle迁移需要的包)
  • ora2pg-20.0.zip
  • Time-HiRes-1.9760.tar.gz

步骤3:解压并安装软件包

将下载的软件包上传到服务器(例如:/data/mysql2pg目录下),然后使用root用户执行以下命令:

cd /data/mysql2pg/ tar -zxvf instantclient_11_2.tar.gz unzip instantclient-basic-linux.x64-21.3.0.0.0.zip unzip instantclient-sdk-linux.x64-21.3.0.0.0.zip unzip instantclient-sqlplus-linux.x64-21.3.0.0.0.zip
复制

设置环境变量:

export ORACLE_HOME= /data/mysql2pg/instantclient_11_2 export LD_LIBRARY_PATH=$ORACLE_HOME : $LD_LIBRARY_PATH
复制

进入每个软件包目录,执行以下命令安装:

perl Makefile.PL make make install
复制

注意:先安装DBI再安装DBD。

执行 ora2pg --help 查看是否安装成功。

2.创建迁移项目

2.1 使用ora2pg初始化迁移项目

创建迁移项目是迁移过程的第一步。使用以下命令初始化迁移项目:

ora2pg --init_project oramig -m
复制

-m/–mysql 选项和–init_project/-i 选项一起使用,用于告知ora2pg我们正在处理MySQL格式。

2.2 项目目录结构

创建迁移项目后,当前目录下会生成一个名为 oramig 的目录模板。该目录包含以下内容:

  • schema 和 sources 目录:存放各对象的DDL语句。schema 存放转换为PL/PGSQL后的语句,sources 存放转换前的PL/SQL语句。
  • data 目录:存放表数据文件。
  • config 目录:包含配置文件 ora2pg.conf。
  • reports 目录:存放迁移报告。

术语解释

  • Ora2Pg:一个用于将Oracle数据库迁移到PostgreSQL的工具,也支持MySQL迁移。
  • DBI:Perl数据库接口,用于连接和操作数据库。
  • DBD:数据库驱动,用于特定数据库类型的连接和操作。

常见问题解答

Q: 安装过程中遇到权限问题怎么办?

A: 确保您以root用户身份执行安装命令。如果仍然遇到问题,请检查文件权限和所有权。

Q: 如何验证ora2pg是否成功安装?

A: 执行 ora2pg --help 命令,如果显示帮助信息,则表示安装成功。

3.修改配置文件

3.1 配置文件的重要性

配置文件是数据库迁移过程中的关键,它包含了连接数据库所需的所有参数。以下是您需要修改的参数:

3.2 修改 conf 目录下的 ora2pg.conf 文件

参数名 描述 示例值
ORACLE\_HOME 设置环境变量 ORACLE\_HOME,DBD::Oracle 模块使用该变量查找 Oracle 共享库 /data/mysql2pg/instantclient_11_ 2
ORACLE\_DSN 设置标准 DBI DSN 格式的数据源名称。 Oracle: dbi:Oracle:host=oradb_host.myhost.com;sid=DB_ SID;port=1521 mysql: dbi:mysql:host=192.168.1.10;database=sakila;port=3306
ORACLE\_USER 指定连接 Oracle 数据库的用户名。 sys as username
ORACLE\_PWD 指定连接 Oracle 数据库的密码。 your\_password
USER\_GRANTS 如果使用普通用户连接 Oracle 数据库,并且该用户没有访问 DBA\ _… 表的权限,将该参数设置为 1。 1 or 0
ORA_INITIAL_ COMMAND 建立 Oracle 数据库连接后,执行一个初始化命令。 ALTER SESSION SET NLS_DATE_ FORMAT=‘YYYY-MM-DD HH24:MI:SS’
REPLACE_ZERO_ DATE 指定日期为0时的替换值。当表结构中有一个date类型的列且有非NULL约束时,可以使用它来指定一个固定的日期. 2023-03-14 00:00:00

注:从mysql迁移和从oracle迁移,配置文件的差距只在ORACLE_DSN,其余参数可复用。

术语解释

  • DSN:数据源名称,用于指定数据库的连接信息。
  • DBD:数据库驱动,用于特定数据库类型的连接和操作。

常见问题解答

Q: 如何确保配置文件的正确性?

A: 在修改配置文件后,执行 ora2pg -t SHOW_VERSION -c config/ora2pg.conf 命令来测试数据库的连接。

Q: 如果连接测试失败怎么办?

A: 检查您的配置文件中的参数是否正确,特别是用户名、密码、主机和端口。确保您的网络连接没有问题。

4. 导出MySQL数据

4.1 创建具有远程连接权限的用户

在MySQL上创建用户并授予权限:

create user 'username' @'host' identified by 'password' ; grant all privileges on * . * to 'username' @'%' with grant option ; flush privileges ;
复制

4.2 导出数据

执行以下命令导出MySQL数据:

sh export_schema.sh ora2pg -t COPY -o data.sql -b ./data -c ./config/ora2pg.conf
复制

注意:如果导出过程中遇到权限问题,请确保您的用户具有足够的权限。

常见问题解答

Q: 数据导出过程中遇到错误怎么办?

A: 检查您的数据文件路径和权限。确保您的用户有足够的权限访问这些文件。

Q: 如何处理导出的数据文件过大的问题?

A: 您可以将数据分割成多个文件,或者使用压缩工具来减小文件大小。

5. 数据导入到AntDB

5.1 修改配置文件,配置antdb的连接方式

ORACLE_DSN dbi:pg:host=${hostip};database=fed_host_1_2_0;port=19999
复制

ORACLE_USER 和 ORACLE_PWD

这两个选项用于指定连接 antdb 数据库的用户名和密码。

设置好 antdb 数据库的 DSN 之后,可以执行以下命令测试数据库的连接:

ora2pg -t SHOW_VERSION -c config/ora2pg.conf
复制

5.2 导入数据

使用以下命令将数据导入AntDB:

sh import_all.sh -d fed_guest_1_2_0 \ -h ${hostip} \ -U adb63 \ -p 19999 \ -o adb63
复制

参数说明

  • -d 指定数据库
  • -h 指定AntDB所在服务器ip
  • -U 指定数据库连接用户
  • -o 指定创建database的用户

注意点

  • 如果导入表的某个字段报错,确认是否是因为AntDB关键词导致,可更改字段名解决。
  • 如果导入索引,报已存在,是因为oracle/mysql的同一个表的索引名称不可重复,但是不同表可重复,但是AntDB全库索引名称都不可重复,需要手动更改索引名称。

术语解释

  • AntDB:兼容PostgreSQL语法的数据库,与PostgreSQL生态全面适配。

常见问题解答

Q: 数据导入AntDB时遇到索引名称冲突怎么办?

A: 手动更改索引名称,确保全库索引名称唯一。

Q: 数据导入后如何验证数据的完整性?

A: 使用 select count( *) 语句对比AntDB和MySQL中的数据量,确保数据一致性。

6. 校验数据量

6.1 查询AntDB导入所有的表的count数

使用以下命令查询AntDB中所有表的数据量:

psql -d fed_guest_1_2_0 -p 19999 -c "SELECT concat('select ''',tablename,''' as table_name,count(1) as sum from ',tablename,';') FROM pg_tables where schemaname = 'public' order by 1;" > select_antdb.sql 2 > &1 /* 注:得到的s elect_antdb.sql是所有表的select count(1)语句 */ psql -d fed_guest_1_2_0 -p 19999 -f select_antdb.sql > select_antdb.out 2>&1 /* 注:得到的 select_antdb.out是所有表的数据量 */
复制

6.2 查询MySQL源库所有的表的count数

使用以下命令查询MySQL中所有表的数据量:

mysql -u root -P 30306 -h 10.19 .36.200 -p1qaz@WSX -D fed_guest_1_2_0 -e "SELECT concat('select ''',table_name,''' as table_name,count(1) as sum from ',table_name,';') FROM information_schema.tables where TABLE_SCHEMA = 'fed_guest_1_2_0' order by 1;" > select_mysql.sql 2 > &1 /* 注:得到的s elect_mysql.sql是所有表的select count(1)语句 */ mysql -u root -P 30306 -h 10.19.36.200 -p1qaz@WSX -D fed_guest_1_2_0 -e "source /home/puaiuc/ select_mysql.sql "> select_mysql.sql.out 2>&1 /* 注:得到的select_mysql.sql.out 是所有表的数据量 */
复制

6.3 比对数据量

使用 diff 命令比对AntDB和MySQL的数据量:

diff -B -w -y select_antdb.out select_mysql.out
复制

术语解释

  • count( *):SQL语句,用于计算表中的行数。

常见问题解答

Q: 数据量不一致怎么办?

A: 检查数据导入过程中是否有错误,或者数据是否有损坏。重新导入数据并验证。

Q: 如何处理数据导入后的性能问题?

A: 优化数据库配置,如增加内存、优化查询语句等。

7. AntDB的优势和数据类型对比

7.1 AntDB的优势

AntDB是兼容PostgreSQL语法的数据库,与PostgreSQL生态全面适配:

  • 执行复杂查询时,性能更好且更稳定。
  • 对大表(上亿条记录,数十GB大小)的支持更好。
  • 支持JSON,XML等现代应用程序功能。
  • 支持物化视图。
  • 窗口函数功能支持较好。
  • PostgreSQL的插件体系带来了无限可能,如PostGIS,Citus,Timescaledb,Pipelinedb等。

7.2 数据类型对比

MySQL AntDB
TINYINT 不支持,可以通过domain定制
SMALLINT SMALLINT
MEDIUMINT 不支持,可以通过domain定制
INT INT/INTEGER
BIGINT BIGINT
有符号和无符号 不支持,可以通过domain定制
float4/real float4/real
double double
decimal decimal
numeric numeric
DATE DATE
TIME TIMESTAMP
YEAR 不支持,可以通过domain定制
DATETIME TIMESTAMP
TIMESTAMP TIMESTAMP
CHAR CHAR
VARCHAR VARCHAR
TINYBLOB bytea
TINYTEXT TEXT
BLOB bytea
TEXT TEXT
MEDIUMBLOB bytea
MEDIUMTEXT TEXT
LONGBLOB bytea
LONGTEXT TEXT
JSON JSON/JSONB

术语解释

  • domain:在PostgreSQL中,domain是创建在另一种数据类型基础上的逻辑数据类型,用于限制该数据类型的值。

常见问题解答

Q: 如何在AntDB中创建自定义类型?

A: 使用 create domain 语句来创建自定义类型,例如:

create domain uint8 as numeric ( 20 , 0 ) check ( value <= (( 2 ^ 64 :: numeric ):: numeric ( 20 , 0 ) - 1 ) and value >= 0 :: numeric ( 20 , 0 ));
复制

Q: AntDB中如何优化查询性能?

A: 使用物化视图、索引和合理的查询优化技术来提高查询性能。

8. SQL语句对比和其他功能对比

8.1 SQL语句对比

以下是MySQL和AntDB在SQL语句上的差异:

  • CREATE TABLE:AntDB不支持使用反引号包裹表名和字段名。

  • ALTER TABLE:AntDB不支持某些MySQL的语法
    ALTER TABLE table_name ADD INDEX index_name(col_list);
    ALTER TABLE table_name ADD UNIQUE(col_list);
    ALTER TABLE table_name ADD PRIMARY KEY(col_list);
    ALTER TABLE table_name DROP INDEX index_name;
    ALTER TABLE table_name DROP primary key;

  • REPLACE INTO:AntDB不支持MySQL的 REPLACE INTO 语法。

  • 更新并返回:AntDB使用 returning 子句来返回更新后的行。

  • 插入冲突处理:AntDB使用 on conflict 子句来处理插入冲突。

  • LIMIT:AntDB不支持MySQL的 LIMIT offset_no, limit_no 语法。

8.2 其他功能对比

功能 MySQL PostgreSQL/AntDB
默认事务级别 REPEATABLE-READ READ-COMMITTED
BEGIN>COMMIT/ROLLBACK 只支持对DML的 DML和DDL都支持
表名、索引名等 同一个表的索引名称不可重复,但是不同表可重复 全库索引名称都不可重复

术语解释

  • DML:数据操作语言,包括 SELECT, INSERT, UPDATE, DELETE。
  • DDL:数据定义语言,包括 CREATE, ALTER, DROP。

常见问题解答

Q: 如何在AntDB中处理不支持的MySQL语法?

A: 使用AntDB提供的转换工具或手动修改SQL语句以适应AntDB的语法。

Q: 如何在AntDB中实现MySQL的自动记录创建时间和修改时间的功能?

A: 使用触发器和函数来实现,例如:

CREATE OR REPLACE FUNCTION "public" . "cs_timestamp" () RETURNS "pg_catalog" . "trigger" AS $BODY$ begin new.modify_time = current_timestamp ; return new; end $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ;
复制

然后创建触发器:

create trigger cs_name before update on ai_enum_dic for each row execute procedure cs_timestamp();
复制

结语

感谢您阅读本文,希望这些详细的步骤和技巧,能帮助您顺利完成MySQL到AntDB的迁移。如有任何疑问或需要进一步的帮助,欢迎在评论区留言。

如果觉得本文有帮助,请分享给您的同事或朋友,或在社交媒体上分享本文。订阅亚信安慧AntDB公众号,获取更多数据库迁移和优化的技巧!

关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

小草
暂无图片
2月前
评论
暂无图片 0
详细指南:如何将MySQL数据库无缝迁移到AntDB
2月前
暂无图片 点赞
评论
暂无图片
获得了404次点赞
暂无图片
内容获得353次评论
暂无图片
获得了124次收藏
TA的专栏
AntDB 亚信数据库
收录174篇内容
目录
  • 1. 软件安装
    • 1.1 安装必要的Perl模块
      • 步骤1:安装DBI、JSON、DBD:Pg、DBD:Oracle
      • 步骤2:安装其他必需软件包
      • 步骤3:解压并安装软件包
  • 2.创建迁移项目
    • 2.1 使用ora2pg初始化迁移项目
    • 2.2 项目目录结构
      • 术语解释
      • 常见问题解答
  • 3.修改配置文件
    • 3.1 配置文件的重要性
    • 3.2 修改 conf 目录下的 ora2pg.conf 文件
      • 术语解释
      • 常见问题解答
  • 4. 导出MySQL数据
    • 4.1 创建具有远程连接权限的用户
    • 4.2 导出数据
      • 常见问题解答
  • 5. 数据导入到AntDB
    • 5.1 修改配置文件,配置antdb的连接方式
    • 5.2 导入数据
      • 术语解释
      • 常见问题解答
  • 6. 校验数据量
    • 6.1 查询AntDB导入所有的表的count数
    • 6.2 查询MySQL源库所有的表的count数
    • 6.3 比对数据量
      • 术语解释
      • 常见问题解答
  • 7. AntDB的优势和数据类型对比
    • 7.1 AntDB的优势
    • 7.2 数据类型对比
      • 术语解释
      • 常见问题解答
  • 8. SQL语句对比和其他功能对比
    • 8.1 SQL语句对比
    • 8.2 其他功能对比
      • 术语解释
      • 常见问题解答
  • 结语