暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

AntDB数据库 2024-11-26
222


摘要

在数字化时代,数据迁移是企业升级数据库系统的关键步骤。本文将为您详细介绍如何将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 -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 \
  -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 -30306 -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  ---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 数据类型对比

MySQLAntDB
TINYINT不支持,可以通过domain定制
SMALLINTSMALLINT
MEDIUMINT不支持,可以通过domain定制
INTINT/INTEGER
BIGINTBIGINT
有符号和无符号不支持,可以通过domain定制
float4/realfloat4/real
doubledouble
decimaldecimal
numericnumeric
DATEDATE
TIMETIMESTAMP
YEAR不支持,可以通过domain定制
DATETIMETIMESTAMP
TIMESTAMPTIMESTAMP
CHARCHAR
VARCHARVARCHAR
TINYBLOBbytea
TINYTEXTTEXT
BLOBbytea
TEXTTEXT
MEDIUMBLOBbytea
MEDIUMTEXTTEXT
LONGBLOBbytea
LONGTEXTTEXT
JSONJSON/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 其他功能对比

功能MySQLPostgreSQL/AntDB
默认事务级别REPEATABLE-READREAD-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  newend
$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数据库

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

点击了解 往期精彩

点击“阅读原文”
下载PDF全文
🔽

文章转载自AntDB数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论