V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Livid
V2EX  ›  MySQL

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

  •  
  •   Livid · 2011-03-30 03:04:45 +08:00 · 13157 次点击
    这是一个创建于 5005 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在快速迭代开发的过程中,有的时候可能会需要比较本地开发机器上的 MySQL 数据库和远程服务器上的有什么结构上的不同。

    大家有什么好的工具或是方法推荐么?
    16 条回复    2016-10-27 21:12:57 +08:00
    bruce
        1
    bruce  
       2011-03-30 08:23:20 +08:00 via Android
    导出 diff
    flytwokites
        2
    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
        3
    TheOnly92  
       2011-03-30 09:12:10 +08:00
    @flytwokites 何时开始 export old schema?这个方法挺不错,想学学看。
    muxi
        4
    muxi  
       2011-03-30 10:11:32 +08:00
    Navicat
    muxi
        5
    muxi  
       2011-03-30 10:12:28 +08:00
    @flytwokites 求完整脚本
    flytwokites
        6
    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
        7
    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
        8
    Livid  
    MOD
    OP
       2011-03-30 18:28:49 +08:00
    @aligo 刚刚下载了最新版本的 MySQL Workbench 试了试。果然很强大。

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

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

    不过 Ruby on Rails 搞的不怕这个问题, Migration 完美解决!
    e6nian
        14
    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
        15
    e6nian  
       2011-03-30 23:41:05 +08:00
    @huacnlee 我打了一大段的文字,被你抢楼了-。-
    JiaFeiX
        16
    JiaFeiX  
       2016-10-27 21:12:57 +08:00 via iPhone
    到了 2016 年,大家有什么新的推荐和最佳实践吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:02 · PVG 16:02 · LAX 00:02 · JFK 03:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.