关于 MySQL 数据库结构比较工具

2011-03-30 03:04:45 +08:00
 Livid
在快速迭代开发的过程中,有的时候可能会需要比较本地开发机器上的 MySQL 数据库和远程服务器上的有什么结构上的不同。

大家有什么好的工具或是方法推荐么?
13013 次点击
所在节点    MySQL
16 条回复
bruce
2011-03-30 08:23:20 +08:00
导出 diff
flytwokites
2011-03-30 09:04:49 +08:00
我用的脚本片断:

dump_schema() {
mysqldump -uroot --skip-opt --no-data --skip-add-drop-table --skip-comments $2 | grep -v -e '^/\*!' >$1
}

dump_schema "$new_db.schema.sql" $new_db
dump_schema "$old_db.schema.sql" $old_db

meld "$new_db.schema.sql" "$old_db.schema.sql"
TheOnly92
2011-03-30 09:12:10 +08:00
@flytwokites 何时开始 export old schema?这个方法挺不错,想学学看。
muxi
2011-03-30 10:11:32 +08:00
Navicat
muxi
2011-03-30 10:12:28 +08:00
@flytwokites 求完整脚本
flytwokites
2011-03-30 11:28:20 +08:00
FILE: dbup
==========
#!/bin/bash

new_db=${1:?miss db name}
old_db=${new_db}_old
old_db_dumpfile=${new_db}_old.$2.sql

# load old db
if [ -f "$old_db_dumpfile" ]; then
mysql -uroot <<SQL
drop database if exists $old_db;
create database $old_db charset utf8;
SQL

echo "loading old db..."
mysql -uroot $old_db <$old_db_dumpfile || exit 1

echo "upgrading..."
./upgrade || exit 1
fi

# compare
dump_schema() {
mysqldump -uroot --skip-opt --no-data --skip-add-drop-table --skip-comments $2 | grep -v -e '^/\*!' >$1
}

dump_schema "$new_db.schema.sql" $new_db
dump_schema "$old_db.schema.sql" $old_db

sleep 1s
meld "$new_db.schema.sql" "$old_db.schema.sql" &

============
用法:
先把原先的数据库导出为dbname_old..sql,可以含数据,然后写一个upgrade脚本(改数据库结构/迁移数据),然后就
$ ./dbup dbname
如果发现upgrade写得不对,改了后再次运行直到没问题,然后把upgrade传上服务器上运行。
aligo
2011-03-30 18:11:53 +08:00
用常用的mysql gui工具就可以干这个啊,例如mysql workbench啊navicat啊(一般用它)

如果要比较简单的:
http://dbsynch.g6.cz/ (在线)
https://github.com/dsyph3r/php-mysql-diff/ (php)
https://bitbucket.org/stepancheg/mysql-diff/ (scala)
楼上那个用meld也不错
Livid
2011-03-30 18:28:49 +08:00
@aligo 刚刚下载了最新版本的 MySQL Workbench 试了试。果然很强大。

最早 MySQL 的各种 GUI 在 03/04 年出来的时候,还十分简陋,当时试过之后就没有再用了。不过现在看来 Workbench 确实相当靠谱。

有介绍 Workbench 比较好的书么?大家推荐几本吧。感谢。
iugo
2011-03-30 18:32:39 +08:00
不是放弃PHP了吗?
Livid
2011-03-30 18:36:59 +08:00
@iugo MySQL 不是 PHP 的专用数据库吧?
iugo
2011-03-30 19:14:51 +08:00
@Livid 嗯。只是 PHP+MySQL 的组合多一些。我下意识地以为 L 看到了什么特别的东西从而又去鼓捣 PHP 了。
cluries
2011-03-30 22:48:05 +08:00
SQLYog~~
很好用的说..
huacnlee
2011-03-30 23:29:45 +08:00
以前Windows里面的时候我用过 SQL Delta 非常给力.不过是 SQL Server 的,结构数据,完美处理.不知现在有没有 MySQL 的.

不过 Ruby on Rails 搞的不怕这个问题, Migration 完美解决!
e6nian
2011-03-30 23:39:38 +08:00
@Livid 官方文档就足够了http://dev.mysql.com/doc/index-gui.html
mysql在macosx下的管理工具除了Navicat和workbench之外还有一个sequelpro
http://www.sequelpro.com/

此外最靠谱的mysqlschema管理还是需要有类似Rails的migration的机制

php中也有 https://github.com/davejkiger/mysql-php-migrations 以前是在 http://code.google.com/p/mysql-php-migrations/
此外 http://www.yiiframework.com/ 现在也集成了migration操作,也可以单独拿出来用。

以前我们用mysql-php-migration
现在用yii的migration
e6nian
2011-03-30 23:41:05 +08:00
@huacnlee 我打了一大段的文字,被你抢楼了-。-
JiaFeiX
2016-10-27 21:12:57 +08:00
到了 2016 年,大家有什么新的推荐和最佳实践吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/10663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX