Skip to main content

一款轻量级数据库对比工具,同时支持新增表的默认数据导入!

Project description

  **mysqldiff是一个能够方便于大家在实际项目中快速生成不同版本数据库之间的差异SQL,同时还能够自动将新版中新增表中默认数据一并导入到旧版本中。**

### 1\. 主要功能 ###
mysql虽然提供了mysqldiff工具,但实际使用中还有些不满足要求的地方,且在Linux下一般都带有python环境,所以用python写了一个。
* 比对两个数据库的差异;
* 比对两张表的差异;
* 支持外键的处理;
* 自动忽略表字段的顺序差异;
* 支持表或列的重命名;
* 支持同步新增表中数据;
* 支持旧表中的数据导入到新增表中;
* 将生成的差异sql保存到文件或者自动执行;
* 记录错误日志,出错时方便排查。

### 2\. 使用方法
  **mysqldiff.py**用[web.py](http://webpy.org/ "web.py")作为连接数据库的工具,因此在使用之前要确保环境中已经安装web.py模块,如果没有安装,可以使用下面的命令进行安装:
```
pip install web.py
```
**命令格式:**
```
python mysqldiff.py [param1] [param2] { [param3]....}
```
**参数说明:**
*  -x
自动执行差异SQL语句,默认不执行。
*  -c
是否插入新增表中的默认数据
*  s=[user]:[pass]@[host]:[port]
当两个数据库的连接配置相同时可以用该参数,否则用下面的sn和so分别指明。
    user:用户名
    pass:密码
    host:ip地址
    port:端口
*  so=[user]:[pass]@[host]:[port]
数据库配置。
*  sn=[user]:[pass]@[host]:[port]
被参照的数据库配置。
*  [db_new]{.[table_name]}:[db_old]{.[table_name]}
数据库名.表名,不指名表名时对比整个数据库。
*  file=[diff_file]
差异化sql保存位置,默认保存在diff.sql文件中。

**示例:**
对比db_new和db_old两个数据库中的表结构差异,并将sql语句保存到diff.sql中,同时直接执行sql语句:
```
python mysqldiff.py -x s=comclay:123456@192.168.16.122:3306 db_new:db_old file=diff.sql
```
### 3\. `map.config`映射关系配置 ###
map.config文件中包含重命名和数据导入的配置
重命名配置用`->`表示:
```
# 重命名
# oldtable -> newtable
# oldtable.oldcol -> newtable.newcol
# oldtable.[oldcol1, oldcol12, oldcol3 ......] -> newtable.[newcol1, newcol2, newcol3 ......]

course_old -> course
user.name -> user_new.username
```
数据导入配置用`=>`表示:
```
# 数据导入
# oldtable => newtable
# oldtable.[oldcol1, oldcol12, oldcol3 ......] => newtable.[newcol1, newcol2, newcol3 ......]

course_old.[id, user_id] => user_course.[course_id, user_id]
```
### 4\. 数据库对比 ###
db_old数据库中只包含user表:
![](https://i.imgur.com/YJfklRk.png)
db_new数据库中新增了course,并添加了一个外键约束:
![](https://i.imgur.com/Yq2AQa5.png)
![](https://i.imgur.com/Z2uUhiv.png)
使用下方命令进行差异化对比:
```
python mysqldiff.py -c s=comclay:123456@192.168.18.149:3306 db_new:db_old
```
生成的diff.sql如下:
```sql
/****************************** 关闭外键约束 ******************************/
SET FOREIGN_KEY_CHECKS=0;

/****************************** course ******************************/
CREATE TABLE `course` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`course` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`grade` int(11) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `fk` (`user_id`),
CONSTRAINT `fk` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO course (grade, course, user_id, id) VALUES
(60, 'english', 1, 1);

/****************************** 开启外键约束 ******************************/
SET FOREIGN_KEY_CHECKS=1;

```
### 5\. 联系方式 ###
微信:
![](https://i.imgur.com/1wmotfT.jpg)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mysqldiff.py-2.0.0.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

mysqldiff.py-2.0.0-py2-none-any.whl (9.6 kB view details)

Uploaded Python 2

File details

Details for the file mysqldiff.py-2.0.0.tar.gz.

File metadata

  • Download URL: mysqldiff.py-2.0.0.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/2.7.14

File hashes

Hashes for mysqldiff.py-2.0.0.tar.gz
Algorithm Hash digest
SHA256 9a99f5196cfb79859900670d29024f0ec8f5f8057aa85a5566316bdf36e75249
MD5 bc9d6585a4a2150c3ecca8e968d7ba21
BLAKE2b-256 a386cf021d46b15b0bf38041fb235acba0d0baf59b66619f6c7cb1674a3ab0e8

See more details on using hashes here.

File details

Details for the file mysqldiff.py-2.0.0-py2-none-any.whl.

File metadata

  • Download URL: mysqldiff.py-2.0.0-py2-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/2.7.14

File hashes

Hashes for mysqldiff.py-2.0.0-py2-none-any.whl
Algorithm Hash digest
SHA256 63f7ae08d9108b5180e1a5434ced161fc8c8bb9e5933558c458c204606bbc4f0
MD5 b5c2eda93d2ed20a51c8fb27a7e671b6
BLAKE2b-256 660239e2984549c5c871f3c5719c0777eeef13a44ec3368b585fd56bb46adfd7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page