【数据库迁移系列】使用pgloader将数据从MySQL迁移到openGauss的最佳实践

这篇具有很好参考价值的文章主要介绍了【数据库迁移系列】使用pgloader将数据从MySQL迁移到openGauss的最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库迁移是实际工作中经常遇到的问题,比如由于磁盘空间、业务性能、项目改造等等原因,有从甲服务器迁移到乙服务器,从A种数据库迁移到B种数据库,从源路径迁移到另一个目标路径、同一个机器下从一个用户迁移到另一个用户等各种场景,有时需要整个数据库所有文件都迁移,有时只需要迁移部分数据文件如REDO、表空间文件等。

一、概述

云原生数据库openGauss也支持若干数据库迁移工具,其中的pgloader是一个数据导入工具,使用COPY命令将数据导入到PostgreSQL。pgloader有两种工作模式,一种是从文件导入,一种是迁移数据库。pgloader在两种情况下都使用PostgreSQL的COPY协议高效的传输数据。
openGauss兼容PostgreSQL的通信协议以及绝大部分语法,本文就介绍如何使用pgloader将MySQL数据库迁移至openGauss。
pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker

整个过程可以基本分为四步:
迁移前准备 > 相关文件配置 > 执行迁移 > 结果验证

二、迁移前准备:

下载pgloader

除了 源数据库MySQL 和目标数据库openGauss,它们之间需要网络互通外。还需要关键工具pgloader。因为某些网络原因,我这里使用的是docker 版本的pgloader 下载,安装在目标库所在服务器上。
默认pull最新版本。

[root@pekphisprb70593 software]# docker pull dimitri/pgloader
[root@pekphisprb70593 software]# docker run --rm --name pgloader dimitri/pgloader:latest pgloader --version
pgloader version "3.6.7~devel"
compiled with SBCL 2.1.1.debian

需要注意的是,它只是命令行工具,所以一旦执行完毕会自动退出。故每次都需要“docker run --rm --name pgloader dimitri/pgloader:latest pgloader + 具体操作”的命令。

修改openGauss加密方式(重要)

用户密码存储在系统表pg_authid中,为防止用户密码泄露,openGauss对用户密码进行加密存储,所采用的加密算法由配置参数password_encryption_type决定。

  • 当参数password_encryption_type设置为0时,表示采用md5方式对密码加密。
  • 当参数password_encryption_type设置为1时,表示采用sha256和md5方式对密码加密。
  • 当参数password_encryption_type设置为2时,表示采用sha256方式对密码加密,为默认配置。
    pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker

由于MD5加密算法安全性低,存在安全风险,不建议使用。openGauss 对原生PostgreSQL的通信协议进行了安全加固,这导致与PostgreSQL的默认通信协议互相不兼容了,因此,使用pgloader的PostgreSQL原生版本默认是不能连接openGauss的。会报类似下述错误:
pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker

通过修改该GUC参数修改数据库加密算法,执行如下命令将参数修改为1 ,同时支持md5 和sha256

gs_guc reload -N all -I all -c "password_encryption_type=1"

一定要在设置完上述参数后,再新建用户。

openGauss设置监听

若不设置,可能会像我一样遇到“Failed to connect to pgsql at “xxx” (port 15400) as user “opengauss_test”: Database error 28000: no pg_hba.conf entry for host “172.17.0.2”.”
pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker
设置方法:

cd /opt/huawei/install/data/dn/
vi pg_hba.conf
在IPv4中新增一行
host    all    all     0.0.0.0/0                      md5
然后重启数据库
[omm@pekphisprb70593 dn]$ gs_om -t stop
[omm@pekphisprb70593 dn]$ gs_om -t start

pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker

测试用户和数据

这一步是可选的,包括源库的数据库、用户和原始数据,目标库的数据库和用户。如果都已经有了则直接跳过看下一步,缺啥补啥。
创建目标库openGauss的用户及database.

[omm@pekphisprb70593 ~]$ gsql -d postgres -p 15400 
openGauss=# CREATE USER opengauss_test identified by 'Gauss_234'; 
openGauss=# GRANT ALL PRIVILEGES TO opengauss_test; 
openGauss=# CREATE DATABASE opengauss_db with owner opengauss_test ENCODING 'utf8' template = template0;  

新建了一个空表test2。

[omm@pekphisprb70593 dn]$ gsql -d opengauss_db -p 15400
opengauss_db=# create table if not exists test2(id integer);
CREATE TABLE

创建源数据库和用户,刷新系统授权表。

CREATE DATABASE IF NOT EXISTS mysql_db1 default charset utf8;
CREATE USER mysql_t1 identified by 'Mysql_234' ;
GRANT ALL PRIVILEGES ON *.* TO 'mysql_t1' WITH GRANT OPTION;
FLUSH PRIVILEGES;

构造数据

mysql@siaphisprk01345:~> mysql -u mysql_t1 -p
mysql> use mysql_db1;
create table if not exists test1 (id int(10),name char(20),salary float,time datetime(6),addr varchar(200),primary key(id)) ;
insert into test1 values (1,'zhangsan',2000.00,'2018-06-01 00:00:00','beijing');
insert into test1 values (2,'李四',2000.89,'2018-06-01 00:00:00','西安');
insert into test1 values (3,'Bob',2000,'2018-06-02 00:00:00','南京');

#创建了一个和目标数据库表结构不同的test2。
create table if not exists test2(id int(10),name varchar(20));
insert into test2 values (1234567,'Kevin');
#创建空表test3。
create table if not exists test3(id int(10));

三、配置文件

pgloader提供丰富的配置项,我们可以自由定义迁移时的各类动作,如通过include drop,删除目标数据库中名称出现在MySQL数据库中的所有表,以允许连续多次使用同一命令,从干净的环境自动启动。
在pgloader所在服务器任意路径下创建一个配置文件,文件可以命名为opengauss.loader。下面是一个配置文件示例,里面的值需要修改为自己环境的实际值。

LOAD DATABASE 
  
FROM mysql://mysql_t1:Mysql_234@1.1.1.1:3306/mysql_db1 
  
INTO postgresql://opengauss_test:Gauss_234@2.2.2.2:15400/opengauss_db 
  
WITH include drop, create tables, create indexes, reset no sequences, 
  
workers = 8, concurrency = 1, 
  
multiple readers per thread, rows per range = 50000 
  
CAST 
  
type varchar when(= 1 precision) to "boolean" drop typemod keep default keep not null;

几个配置项简单介绍下:

  • FROM:源库,格式:
    mysql://用户名:密码@IP:端口/数据库名称
  • INTO:目标库,格式:
    postgresql://用户名:密码@IP:端口/数据库名称
  • WITH:从MySQL数据库加载时的选项。有include drop、create tables、create indexes等选项。
  • CAST:因为两种数据库的数据类型并不完全一致,工具允许用户覆盖已有的默认转换规则或者使用特殊情况修改它们,自定义类型转换规则。
    还有个比较重要的功能是部分迁移:用户可以通过 including only table names matching 和 excluding table names matching 实现只迁移特定的表或者在迁移过程中排除特定的表。

更详细的配置项解读,可查看官网的说明:https://pgloader.readthedocs.io/en/latest/ref/mysql.html
Migratinga MySQL Database to PostgreSQL — pgloader 3.4.1 documentation

四、执行迁移

启动docker:

docker run -tid --name pgloader_test dimitri/pgloader 

复制配置文件到docker:

docker cp ./openGauss.loader pgloader_test:/ 

进入docker环境:

docker exec -it pgloader_test /bin/bash

启动迁移

root@548498fb64a6:/# pgloader opengauss.loader

pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker

如果遇到问题可以先按照上面的配置步骤去检查下。

五、结果验证

现在来看下迁移结果与预期是否一致:
在目标库进行查询:

[omm@pekphisprb70593 dn]$ gsql -d opengauss_db -p 15400

可以看出表 test1和test3包括数据都已经迁移过来。test2由于迁移前后的数据库结构不一致并没有迁移成功。与预期一致。
但是之前mysql定义的float类型,被强制转成double precision。其他的一些不同和限制有兴趣或者必须要迁移的同学自行探索下。
pgloader根据条件导入数据,openGauss经验总结,mysql,数据库,云原生,docker

总结:使用pgloader进行数据库的迁移过程还是比较简单的,有兴趣的同学可以尝试下。

openGauss: 一款高性能、高安全、高可靠的企业级开源关系型数据库。

🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连点赞评论收藏就更好啦!谢谢各位大佬给予的支持!文章来源地址https://www.toymoban.com/news/detail-783343.html

到了这里,关于【数据库迁移系列】使用pgloader将数据从MySQL迁移到openGauss的最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库迁移之mysql到达梦数据库

    由于业务需求要求数据库国产化,因此将数据从mysql数据库中迁移到国产达梦数据库中。将mysql中的每个库迁移到达梦不同模式下,下面为详细过程。 (1)安装达梦客户端工具 (2)点击选择DM管理工具 (3)创建模式和用户 在用户菜单中,新建一个TEST模式以及相应的用户。

    2024年02月08日
    浏览(22)
  • mysql数据库迁移

    公司有个项目,刚开始数据量不是大的时候,数据库和服务上的所有应用数据都放在一个旧小盘中,随着项目数据的增长,旧的磁盘被占满了,导致系统无法写入数据,我和同事排查了很长时间,最终确定是磁盘被占满导致的一系列连锁问题。问题找到了,接下来就是想办法

    2024年02月14日
    浏览(17)
  • mysql数据库数据如何迁移目录

    默认位置 C:ProgramDataMySQLMySQL Server 8.0 步骤2中Data文件夹就是mysql存放数据的位置 这里举例移动到E盘下 原来my.ini文件不要修改文件位置,如果修改需要另行学习

    2024年02月07日
    浏览(25)
  • 如何迁移MySQL数据库?

    迁移MySQL数据库可以采取多种方法,以下是其中几种常用的方法: 备份和还原:将原有的MySQL数据库备份到一个文件中,然后将备份文件还原到新的MySQL服务器中。具体来说,可以使用mysqldump命令进行备份,使用mysql命令进行还原。例如,备份一个名为mydb的数据库可以使用以下

    2024年02月09日
    浏览(22)
  • 【MySQL系列】使用C语言来连接数据库

    ☕导航小助手☕      🍚 写在前面           🥡 一、准备工作                🧇🧇 1.1 把 libmysql.dll 和 libmysql.lib 文件复制到工程目录下                🍞🍞 1.2 添加 libmysql.lib                 🦪🦪 1.3 添加 include目录                🍔🍔 1.4 包含头文件    

    2024年02月04日
    浏览(32)
  • MySQL数据库迁移(直接复制文件)

    MySQL数据库迁移(直接复制文件) - 简书 (jianshu.com) 看了几种方法: 1、修改注册表的 windows下迁移mysql数据 - 程序员丁先生 - 博客园 (cnblogs.com) 2、mysqldump指令将数据库表/数据保存成xx.sql文件存到本地的 (157条消息) 如何简单实现mysql数据库迁移_岁月呀的博客-CSDN博客 看着都复

    2024年02月15日
    浏览(18)
  • Mysql数据库迁移|如何把一台服务器的mysql数据库迁移到另一台服务器上的myql中

      那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏 https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482 操作系统专栏 https://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482 手撕数据结构 https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482 一、在

    2024年02月06日
    浏览(31)
  • mysql数据库 windows迁移至linux

    1.打开navicat,选择一个数据库进行操作: 之后文件会保存为一个xxx.sql文件,之后打开xftp,把生成的sql放进一个文件夹中( /home/dell/linuxmysql ): 之后登录mysql数据库,并创建一个新的数据库,然后把刚刚的数据导入到新的数据库中: 如果出现下面情况说明数据库已经成功导入

    2024年02月07日
    浏览(18)
  • Mysql实现Linux下数据库目录迁移

    Centos中迁移Mysql的数据目录,一般是硬盘满了不够用,然后挂载了新的数据盘,那么就可以将Mysql数据迁移到新的数据盘。 可以查看pid后kill停止,可以进入目录stop,可以变量停止 复制当前目录到新目录 更改mysql数据存储路径

    2024年02月12日
    浏览(24)
  • 用于将Grafana默认数据库sqlite3迁移到MySQL数据库

    以下是一个方案,用于将Grafana数据迁移到MySQL数据库。 背景: grafana 默认采用的是sqlite3,当我们要以集群形式部署的时使用mysql较为方便,试了很多sqlite转mysql的方法要么收费,最后放弃。选择自己动手风衣足食。 目标: 迁移sqlite3切换数据库到mysql 前提条件: 确保你已经安装了

    2024年02月20日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包