Synchronize two databases schema in MySQL

前端 未结 6 1743
灰色年华
灰色年华 2021-02-02 15:12

I was looking for a portable script or command line program that can synchronize two MySQL databases schema. I am not looking for a GUI based solution because that can\'t be aut

相关标签:
6条回答
  • 2021-02-02 15:50

    check this one is codeigniter database diff script generator

    https://github.com/vaimeo/ci-database-diff-generator

    0 讨论(0)
  • 2021-02-02 15:58

    I know it's an old question but it was the first result on google for what I was searching for (exact same thing as the initial question)

    I found the answer still here but I don't remember the URL it's a script that started from:

    mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
    mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
    diff file1.sql file2.sql
    

    and ended up more like this

    #!/bin/sh
    
    echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"
    
    dump () {
      up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
      mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
    }
    
    rm -f /tmp/db.diff
    
    # Compare
    up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
    for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
      if [ "`echo $3 | grep $table`" = "" ]; then
        echo "Comparing '$table'..."
        dump $1 /tmp/file1.sql
        dump $2 /tmp/file2.sql
        diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
      else
        echo "Ignored '$table'..."
      fi
    done
    less /tmp/db.diff
    rm -f /tmp/file1.sql /tmp/file2.sql
    
    0 讨论(0)
  • 2021-02-02 16:00

    For a long-term, professional solution, you should keep an eye on Schemamatic (http://versabanq.com/products/schemamatic.php). This link shows a GUI app but all it does is manipulate a command-line software. In this page there is link to its google code site where the C# .Net version of Schemamatic can be found. Your perfect solution would be to add support for MySQL to Schemamatic. For SQL Server, it's perfect and does exactly what you mentioned.

    Now, for a short-term solution I would suggest dumping the data you want with MySQL's command-line tools like: mysqldump -A -c -uroot -ppassword >bkpmysql.sql

    And play with it, although it should take quite some time to achieve what you want. Schemamatic really seems to me your best choice. Let me know if you need any clarification when/if trying Schemamatic.

    0 讨论(0)
  • 2021-02-02 16:03

    Have you considered using MySQL replication ?

    0 讨论(0)
  • 2021-02-02 16:03

    SQLyog does that and it is awesome. We use it in production often.

    0 讨论(0)
  • 2021-02-02 16:06

    You might want to look at some tools such as dbdeploy (this is a java or a .net version) and liquidbase and others.

    Although most of these I think will apply sets of changes to a DB in a controlled manner. Don't know if they can reverse engineer from existing schemas and compare.

    E.

    0 讨论(0)
提交回复
热议问题