yii 执行指定迁移文件_MySQL迁移PG工具pymysql2pgsql
阅读使人充实,讨论使人敏捷,写作使人精确。
迁移工具简介
今天介绍一个MySQL迁移PostgreSQL的自动化工具py-mysql2pgsql,该工具通过python使用不落地方式,或写出到文件方式(可选),直接将MySQL中的表结构转化到pg,并自动导入数据、自动在pg端创建相关索引。
MySQL迁移PostgreSQL数据类型转化
目前该工具可将以下38种数据类型自动转化为PostgreSQL对应的兼容类型,如需其他类型转化,在配置文件添加即可。
MySQL | PostgreSQL |
---|---|
char | character |
varchar | character varying |
tinytext | text |
mediumtext | text |
text | text |
longtext | text |
tinyblob | bytea |
mediumblob | bytea |
blob | bytea |
longblob | bytea |
binary | bytea |
varbinary | bytea |
bit | bit varying |
tinyint | smallint |
tinyint unsigned | smallint |
smallint | smallint |
smallint unsigned | integer |
mediumint | integer |
mediumint unsigned | integer |
int | integer |
int unsigned | bigint |
bigint | bigint |
bigint unsigned | numeric |
float | real |
float unsigned | real |
double | double precision |
double unsigned | double precision |
decimal | numeric |
decimal unsigned | numeric |
numeric | numeric |
numeric unsigned | numeric |
date | date |
datetime | timestamp without time zone |
time | time without time zone |
timestamp | timestamp without time zone |
year | smallint |
enum | character varying (with check constraint) |
set | ARRAY[]::text[] |
自动化迁移过程
工具运行后,整个过程可以分为三个阶段:
l 在PostgreSQL端自动创建表结构;l 在PostgreSQL端自动loading加载数据;l 在PostgreSQL端自动创建索引、约束。 工具安装及使用例子l 下载源码安装包下载地址
https://pypi.org/project/py-mysql2pgsql/#description
l 解压安装1.需解决的依赖包:python需按照这几个依赖包:termcolor、mysql-python、psycopg2、argparse2.安装mysql2pgsql
[root@dbhost ]# pwd/data/aken/tools/py-mysql2pgsql-0.1.5[root@dbhost ]# python setup.py install
3.验证安装,查看help帮助
[root@dbhost /data/aken/tools/py-mysql2pgsql-0.1.5]# py-mysql2pgsql -husage: py-mysql2pgsql [-h] [-v] [-f FILE] [-V]Tool for migrating/converting data from mysql to postgresql.optional arguments: -h, --help show this help message and exit -v, --verbose Show progress of data migration. -f FILE, --file FILE Location of configuration file (default:mysql2pgsql.yml). If none exists at that path, one will be created for you. -V, --version Print version and exit.https://github.com/philipsoutham/py-mysql2pgsql[root@dbhost /data/aken/tools/py-mysql2pgsql-0.1.5]#
迁移存量数据如下将MySQL中的test.tab_testtext表存量迁移到PostgreSQL中akendb的public下面。l 编辑迁移配置文件vi mysql2pgsql.yml 如下:
#source # if a socket is specified we will use that# if tcp is chosen you can use compressionmysql: hostname: 100.66.66.66 port: 15140 socket: username: dbmgr password: 520DBA database: test compress: falsedestination: # if file is given, output goes to file, else postgres. file: postgres: hostname: 100.88.88.88 port: 11005 username: aken password: aken123 database: akendb# 指定迁移的表,默认迁移database下所有表。if only_tables is given, only the listed tables will be converted. leave empty to convert all tables.only_tables:#- table1#- table2 tab_testtext# 指定排除的表。if exclude_tables is given, exclude the listed tables from the conversion.#exclude_tables:#- table3#- table4# 指定是否只导出表结构,ture表示只迁移dll表结构。if supress_data is true, only the schema definition will be exported/migrated, and not the datasupress_data: false# 指定是否只迁移数据,true表示只迁移数据。if supress_ddl is true, only the data will be exported/imported, and not the schemasupress_ddl: false# 表存在是否清空导入,true表示清空再导入。if force_truncate is true, forces a table truncate before table loadingforce_truncate: false# if timezone is true, forces to append/convert to UTC tzinfo mysql datatimezone: false# if index_prefix is given, indexes will be created whith a name prefixed with index_prefixindex_prefix:
l 执行数据迁移执行导入数据后,自动执行过程分3个阶段:1.自动在PostgreSQL创建表结构;2.自动加载数据(约1w rows/sec);3.自动在PostgreSQL创建索引。
[root@dbhost]# py-mysql2pgsql -v -f mysql2pgsql.yml >>>>>>>>>> STARTING <<<<<<<<<<START CREATING TABLES START - CREATING TABLE tab_testtext FINISH - CREATING TABLE tab_testtextDONE CREATING TABLESSTART WRITING TABLE DATA START - WRITING DATA TO tab_testtext FINISH - WRITING DATA TO tab_testtextDONE WRITING TABLE DATASTART CREATING INDEXES AND CONSTRAINTS START - ADDING INDEXES TO tab_testtext FINISH - ADDING INDEXES TO tab_testtext START - ADDING CONSTRAINTS ON tab_testtext FINISH - ADDING CONSTRAINTS ON tab_testtextDONE CREATING INDEXES AND CONSTRAINTS>>>>>>>>>> FINISHED <<<<<<<<<<
数据对比验证l表结构比对
1.MySQL表结构
MySQL [test]> show create table tab_testtext;+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| tab_testtext | CREATE TABLE `tab_testtext` ( `id` int(11) NOT NULL DEFAULT '0', `name` longtext, `owners` longtext, `parent_id` int(11) DEFAULT NULL, `busid` int(11) DEFAULT NULL, `uid` varchar(255) DEFAULT NULL, `level` int(11) DEFAULT NULL, `update_date` datetime NOT NULL, `create_date` datetime NOT NULL, `limit_load` int(11) DEFAULT '65', `children_count` int(11) DEFAULT '0', `limit_low_load` int(11) DEFAULT '30', `history_load` varchar(255) DEFAULT NULL, `status` int(11) DEFAULT '0', `group_id` int(11) DEFAULT '21576', `_alarm_types` varchar(64) DEFAULT NULL, `star_level` int(11) DEFAULT '0', `remark` text, `enable` tinyint(11) NOT NULL DEFAULT '1', UNIQUE KEY `busid` (`busid`), UNIQUE KEY `uid` (`uid`), KEY `core_business_6be37982` (`parent_id`), KEY `group_id` (`group_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 |+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.01 sec)MySQL [test]>
2.PostgreSQL表结构
akendb=# \d+ tab_testtext Table "public.tab_testtext" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description ----------------+-----------------------------+-----------+----------+---------+----------+--------------+------------- id | integer | | not null | 0 | plain | | name | text | | | | extended | | owners | text | | | | extended | | parent_id | integer | | | | plain | | busid | integer | | | | plain | | uid | character varying(255) | | | | extended | | level | integer | | | | plain | | update_date | timestamp without time zone | | not null | | plain | | create_date | timestamp without time zone | | not null | | plain | | limit_load | integer | | | 65 | plain | | children_count | integer | | | 0 | plain | | limit_low_load | integer | | | 30 | plain | | history_load | character varying(255) | | | | extended | | status | integer | | | 0 | plain | | group_id | integer | | | 21576 | plain | | _alarm_types | character varying(64) | | | | extended | | star_level | integer | | | 0 | plain | | remark | text | | | | extended | | enable | smallint | | not null | 1 | plain | | Indexes: "tab_testtext_busid" UNIQUE, btree (busid) "tab_testtext_uid" UNIQUE, btree (uid) "tab_testtext_group_id" btree (group_id) "tab_testtext_parent_id" btree (parent_id)Access method: heapakendb=#
l数据抽样比对
1.MySQL数据
MySQL [test]> select count(*) from tab_testtext;+----------+| count(*) |+----------+| 4919 |+----------+1 row in set (0.00 sec)MySQL [test]> select id,name from tab_testtext limit 3;+------+--------------------------------------+| id | name |+------+--------------------------------------+| 7306 | [N][测试] || 7307 | [N][数据迁移] || 7308 | [客户端接入][登陆] |+------+--------------------------------------+3 rows in set (0.00 sec)MySQL [test]>
2.PostgreSQL数据
akendb=# select count(*) from tab_testtext; count ------- 4919(1 row)akendb=# select id,name from tab_testtext limit 3; id | name ------+-------------------------------------- 7306 | [N][测试] 7307 | [N][数据迁移] 7308 | [客户端接入][登陆](3 rows)akendb=#
>>>
参考资料
1.https://github.com/philipsoutham/py-mysql2pgsql
往期推荐
1.PostgreSQL等待事件-锁等待分析
2.基于PG亿级毫秒响应实时推荐系统-解决方案探索
------让学习成为一种习惯-Aken
yii 执行指定迁移文件_MySQL迁移PG工具pymysql2pgsql相关推荐
- yii 执行指定迁移文件_Web 云开发 · 云开发数据库迁移指南
云开发数据库 云开发为我们提供了一个 JSON 文档型数据库(NoSQL),并集成了 「增删改查」 等 API,操作方便,简单易懂.并且相比传统数据库而言它具有「高性能的数据库读写服务」,「可以直接在 ...
- yii 执行指定迁移文件_laravel的迁移文件
1. 迁移是什么? 迁移就像是对数据库进行的版本控制,让你的团队能够轻松地去定义和共享程序的数据库结构.迁移通常配合 Laravel 的结构生成器,可以轻松生成应用程序的数据库结构.如果团队中有个成员 ...
- mysql数据库迁移方案_MySQL迁移升级解决方案
原标题:MySQL迁移升级解决方案 任务背景 由于现有业务架构已不能满足当前业务需求,在保证数据完整的前提下,现需要将原有数据库迁移到另外一台单独的服务器上,在保证原有服务正常的情况下,将原有LAMP ...
- linux关机前执行脚本,Linux关机时执行指定脚本
要实现在Linux关机时执行某个脚本的具体思路 1.在文件夹 /etc/init.d/ 下创建关机时需要执行的脚本 file_name; 2.分别在文件夹 /etc/rc0.d/ 和 /etc/rc6 ...
- Ruby on Rails,创建和执行migrations迁移文件
在<Ruby on Rails,rake工具使用和数据库migrations迁移的概念>中,我们知道Rails中进行数据库迁移操作的基本概念和重要性.现在着手进行一个简单的数据库迁移实践吧 ...
- mysql innodb表移植_mysql Innodb引擎独立表空间下通过复制.ibd文件快速迁移数据文件...
假设需求:需要把库test1中的的数据迁移到test2中,并且test2中数据量特别大 硬性条件:1.mysql 使用 Innodb引擎,且开启独立表空间,2.两个库的mysql版本一致(不同版本下未 ...
- Django无法执行迁移文件
前提 前提 前提 : 必须安装了两个底层包 pymysql 和 mysqlclient 今天分享使用用 IDE,pycharm中的Django来对mysql数据库进行生成数据迁移和执 ...
- 【laravel5.4】迁移文件的生成、修改、删除
建议直接去官方文档查看: https://laravel-china.org/docs/laravel/5.4/migrations#creating-columns 1.生成迁移: 主要方式:1.创 ...
- linux如何迁移文件,linux 数据库文件迁移步骤详解
linux 数据库文件迁移步骤详解 linux 数据库文件迁移步骤详解 数据库所有文件(数据文件.日志文件.临时文件.控制文件)迁移步骤: 1. 迁移步骤概述: 1:具体需求 2:保存现有数据文件.控 ...
最新文章
- 用onerror处理图片获取失败问题
- linux查看占用端口号的程序及pid
- 解决Apache/PHP无法启动的问题
- pythonselenium提高爬虫效率_[编程经验] Python中使用selenium进行动态爬虫
- 利用MSFM算法计算程函方程的走时CT胖射线反演法
- 苹果一体机系统恢复_趁双十一大促销,赶紧升级苹果一体机升级SSD固态和液态内存吧...
- mysql使用中文报错,hibernate mysql 插入中文错误
- layui 自动渲染_Layui表格自动渲染
- 'gbk' codec can't encode character解决方法
- 数据助力防疫,疫情密切接触人员追踪算法赛期待你的加入
- 神经网络算法是什么意思,人工神经网络英文缩写
- RMAN-06091: no channel allocated for maintenance (of an appropriate type)
- win10重装系统后出现的0xc0000225问题解决
- 云开发魔都团长头像制作微信小程序源码/带流量主
- 一加 Ace2是直屏还是曲面屏 一加 Ace2有IP68级防水吗
- 45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用
- 涂鸦智能三明治音视频核心板(BK7256)开箱测评
- 可视化网络拓扑:两天之内从零到英雄
- js 计算是今天多少周
- matlab坐标轴标注和特殊字体…
热门文章
- 分类变量如何设置变量值的显示顺序
- python安装pyinstaller库_python pyinstaller安装
- SAP UI5 货币金额显示的格式化逻辑
- SAP Commerce Cloud Spartacus UI 的购物车 Cart 功能
- 内容分发网络 - Content Delivery Network 学习笔记
- 使用CSS属性处理前端开发中长文本造成的内容显示重叠问题
- JavaScript ES6对Proxy的原生支持的一个例子:开发人员学习额外的编程语言
- 程序员工作生活的好帮手,滴答清单,多平台支持
- 使用代码创建SAP BRF ruleset
- CBA - Success function for Create Oppt call