IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 从 MySQL 8.x 迁移到 PostgreSQL 13.x (使用 pgloader ) -> 正文阅读

[大数据]从 MySQL 8.x 迁移到 PostgreSQL 13.x (使用 pgloader )

本文介绍了如何使用 pgloader 将 MySQL 8.x 中 ebooks 数据库迁移到 PostgreSQL 13.x 的 ebooks 数据库中,我们在 MacBook Pro 上(IP为10.136.x.x)进行迁移,两个目标数据库都安装在局域网的同一台服务器上(IP为10.130.159.110)。

为什么放弃 MySQL ?

因为 MySQL 不够高级 ,用老师的话来说就是:“MySQL 就是个玩具”!
我们单表的数据将达到百万量级,单表的容量将达到几个TB,网络上的资料1显示 MySQL 无法满足这样的需求,甚至一度传有 MySQL 单表上限 500万条,单表容量 2GB 的说法,而最高级的开源数据库 —— PostgreSQL 则是单表条数无限制,容量上限32TB,当然了这个说法不准确,大意就是 PostgreSQL 比 MySQL 高级。
放弃使用 MySQL 于我而言最主要的原因是 MySQL 用久了,该换一个新的玩玩了,那么 PostgreSQL 就是你了。

PostgreSQL 13.x 的安装

Windows 系统上,一路 Next,不做任何更改,特别是选择地区一律默认,否则可能出现奇奇怪怪的错误。
安装 PostgreSQL
中间会让你设置密码,默认用户是 postgres

PostgreSQL 开启远程连接

开启远程连接,修改 pg_hba.conf 文件 ,添加:

	host    all             all             0.0.0.0/0            scram-sha-256

pg_hba.conf 控制用户登录的认证方式(相同匹配第一条有效!),任意IP用0.0.0.0/0、::0/0

然后,要么重启 PostgreSQL 服务,要么打开 pgadmin 管理工具(在安装目录下可以自己运行),菜单栏中选择 reload config !
之后就可以远程连接了,注意防火墙放行 5432 端口。

PostgreSQL 新建数据库与用户

所有用户都是角色,用户是可以login的角色,创建用户就是在创建角色2!

帮助:psql --help
先登录超级用户:psql -U postgres
显示用户:\du
显示帮助:/?
显示数据库:\db
显示表:\dt
连接到新数据库:\c
退出:\q

新建用户3create user ddddd with password 'ddddd';
创建数据库:create database ebooks owner ddddd;
更改数据库权限:grant all privileges on database ebooks to postgres;

赋予角色权限:

\c ebooks
grant all privileges on database ebooks to ddddd;
grant all privileges on schema ebooks to ddddd;  // 模式权限
grant all privileges on table chapter to ddddd;  // 表权限
grant all privileges on table book to ddddd;

也可通过 Navicat 等可视化工具修改:
可视化赋予角色权限
注意表的字段,如果与关键字重名,要用双引号"括起来,此外,查询中的字符串值用单引号'括起来。

PostgreSQL 中的单引号与双引号在pg中的sql,单引号用来标识实际的值,双引号用来标识表名(table name)或列名(column name)等数据库中存在的值。

从 MySQL 8.x 迁移数据到 PostgreSQL 13.x

首先我们要保证在各自的数据库中的权限都要有。
我们使用 pgloader 4工具,因为非常简单,一行命令可以解决:pgloader mysql://root@localhost/f1db pgsql:///f1db

注意,这里的格式:

source:db://user:pass@host:port/dbname
target:postgresql://[user[:password]@][netloc][:port][/dbname][?option=value&...]

pgloader 的安装

我的实验是在 macOS 上做的,所以需要 macOS 上有 PostgreSQL 、MySQL的命令行工具。
目标 MySQL、PostgreSQL 数据库是安装在同一台Windows 服务器上的。

  1. macOS 上装postgresql:(pgcli是命令行工具的包名,我干脆安装一个 PostgreSQL 数据库好了)
brew install postgresql
brew services start postgresql

注意打印的信息,可能会报错,如果报错可以这样解决:

rm '/usr/local/lib/libecpg.6.dylib'
brew link --overwrite postgresql
  1. macOS上装 pgloader
brew install pgloader
  1. macOS上安装 msyql cli:
brew install mysql-client

MySQL 8.x 的准备工作

首先要更改认证方式,因为 pgloader 不支持 MySQL 8.x 的 caching_sha2_password 认证方式,不仅需要更改用户的认证方式还要更改默认的认证方式5

  • 更改用户的认证方式:alter user 'root'@'%' identified with mysql_native_password by 'ddddd';
  • 默认认证方式需要修改 my.cnf 中的 [mysqld] 部分添加: default-authentication-plugin=mysql_native_password
    然后重启MySQL。

PostgreSQL 13.x 的准备工作

同样也要更改认证方式,因为pgloader 不支持默认的 scram-sha-256方式6,PostgreSQL 可以直接开启 trust 模式,这样无需密码就能访问数据库。
修改 pg_hba.conf 文件,将 macOS 的内网地址的 ip 段的认证方式设置为 trust

host    all             all             10.136.1.1/16         trust

重启 PostgreSQL 服务,或者用 pgAdmin reload config。

开始迁移 -> 迁移成功!

迁移之前,可以尝试利用 命令行工具 连接 MySQL 和 PostgreSQL ,看是否能够成功连接,测试成功之后就能一键迁移了。

这时候,macOS 上运行一条命令:

pgloader mysql://root:ddddd@10.130.159.110/ebooks postgresql://postgres@10.130.159.110/ebooks

迁移成功,结果如下:
迁移成功的结果

注意迁移完毕之后把配置改过来哦。


  1. mysql的限制 ??

  2. PostgresSQL数据库的基本使用——新手入门@小鸟技术笔记 (lijiaocn.com) ??

  3. PostgreSQL的用户到底是这么回事?新建用户怎样才能用密码登陆?@小鸟技术笔记 (lijiaocn.com) ??

  4. Pgloader Tutorial — pgloader 3.4.1 documentation ??

  5. QMYND:MYSQL-UNSUPPORTED-AUTHENTICATION attempting to load data from mysql 8.0.4-rc. · Issue #782 · dimitri/pgloader (github.com) ??

  6. pgloader 10 fell through ECASE expression · Issue #1183 · dimitri/pgloader (github.com) ??

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:24:52  更:2021-09-14 13:27:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:51:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码