docker容器环境使用pgloader迁移MySQL数据库到PostgreSql

情况描述

目前我的mysql和postgresql都安装在本地, 并且没有开放外部访问权限.
为了节省服务器资源需要把mysql的db数据库数据迁移至postgre.
服务器是CentOS7, docker环境已经安装

拉取镜像

docker pull dimitri/pgloader

创建容器

pgloader 没找到合适的yum源, 用源码安装中途卡住, 所以考虑使用docker安装

使用 host 网络模式, 表示容器在本机网络中运行, localhost表示宿主机.

docker run -itd --network host --name pgloader_container dimitri/pgloader

编写配置

vim pgloader.load

编辑如下:

LOAD DATABASE
 FROM mysql://root:xxxx@localhost:3306/db
 INTO pgsql://postgres:xxxx@localhost:5432/db
WITH include drop, create tables,disable triggers, create indexes,foreign keys, reset no sequences, workers = 8, concurrency = 1, multiple readers per thread, rows per range = 50000
CAST  type timestamp to timestamp drop default drop not null using zero-dates-to-null
ALTER SCHEMA 'db' RENAME TO 'public';

默认会使用mysql的数据库名称作为pgsql的schema名称, 这里改成默认的public

运行容器

拷贝配置到容器根目录

docker cp pgload.load pgloader_container:/

进入容器, 执行导入, 等待数据转移完成.退出容器:

docker exec -it pgloader_container /bin/bash
pgloader pgloader.load
... ...
exit

如果不再需要, 清除容器和镜像.

docker kill pgloader_container
docker rm pgloader_container
docker image rm  dimitri/pgloader

Views: 6