Saat ini saya sedang mengembangkan aplikasi menggunakan database MySQL.
Struktur basis data masih dalam fluks dan berubah sementara pengembangan berlangsung (saya mengubah salinan lokal saya, meninggalkan yang ada di server-test sendirian).
Apakah ada cara untuk membandingkan dua contoh dari database untuk melihat apakah ada perubahan?
Meskipun saat ini hanya membuang database server pengujian sebelumnya baik-baik saja, karena pengujian mulai memasukkan data pengujian, ini bisa menjadi sedikit rumit.
Hal yang sama meskipun lebih akan terjadi lagi nanti dalam produksi ...
Apakah ada cara mudah untuk secara bertahap membuat perubahan pada basis data produksi, lebih disukai dengan secara otomatis membuat skrip untuk memodifikasinya?
Alat yang disebutkan dalam jawaban:
- Skema MySQL & Perbandingan Data Red-Gate (Komersial)
- Maatkit (sekarang Percona)
- liquibase
- Kodok
- Bandingkan Database Nob Hill (Komersial)
- MySQL Diff
- SQL EDT (Komersial)
Jawaban:
Jika Anda bekerja dengan database kecil saya telah menemukan menjalankan mysqldump pada kedua database dengan
--skip-comments
dan--skip-extended-insert
opsi untuk menghasilkan skrip SQL, kemudian menjalankan diff pada skrip SQL berfungsi dengan baik.Dengan melewatkan komentar, Anda menghindari perbedaan yang tidak berarti seperti saat Anda menjalankan perintah mysqldump. Dengan menggunakan
--skip-extended-insert
perintah, Anda memastikan setiap baris dimasukkan dengan pernyataan sisipannya sendiri. Ini menghilangkan situasi di mana satu catatan baru atau modifikasi dapat menyebabkan reaksi berantai dalam semua pernyataan penyisipan masa depan. Menjalankan dengan opsi-opsi ini menghasilkan kesedihan yang lebih besar tanpa komentar sehingga ini mungkin bukan sesuatu yang ingin Anda lakukan dalam penggunaan produksi tetapi untuk pengembangan itu harus baik-baik saja. Saya telah memberikan contoh perintah yang saya gunakan di bawah ini:sumber
mysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
-d
,--no-data
mungkin menarik bagi mereka yang membutuhkan penggunaan produksi tetapi hanya peduli dengan skemavimdiff
Kodok untuk MySQL memiliki fitur perbandingan data dan skema, dan saya yakin itu akan membuat skrip sinkronisasi. Yang terbaik dari semuanya, ini freeware.
sumber
--run-all-tests --difftype sql --disable-binary-logging
opsi dapat melakukan pekerjaan yang hampir sama (kecuali output dicampur dengan komentar, dan karakter khusus dalam string tidak lolos).Saya menggunakan perangkat lunak yang disebut Navicat untuk:
Harganya uang, hanya untuk Windows dan Mac, dan UInya bagus, tapi saya suka.
sumber
Ada Alat Sinkronisasi Skema di SQLyog (komersial) yang menghasilkan SQL untuk menyinkronkan dua database.
sumber
Dari daftar perbandingan fitur ... MySQL Workbench menawarkan Skema Diff dan Skema Sinkronisasi dalam edisi komunitas mereka.
sumber
Ada banyak cara tentu saja, tetapi dalam kasus saya, saya lebih suka perintah dump dan diff. Jadi ini skrip berdasarkan komentar Jared:
Umpan balik diterima :)
sumber
dbSolo, dibayar tetapi fitur ini mungkin yang Anda cari http://www.dbsolo.com/help/compare.html
Ia bekerja dengan Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 dan MySQL
sumber
Jika Anda hanya perlu membandingkan skema (bukan data), dan memiliki akses ke Perl, mysqldiff mungkin berfungsi. Saya telah menggunakannya karena memungkinkan Anda membandingkan basis data lokal dengan basis data jauh (melalui SSH), jadi Anda tidak perlu repot membuang data apa pun.
http://adamspiers.org/computing/mysqldiff/
Ini akan berusaha untuk menghasilkan query SQL untuk menyinkronkan dua database, tapi saya tidak percaya itu (atau alat apa pun, sebenarnya). Sejauh yang saya tahu, tidak ada cara yang dapat diandalkan 100% untuk merekayasa balik perubahan yang diperlukan untuk mengubah satu skema basis data ke skema lainnya, terutama ketika banyak perubahan telah dibuat.
Misalnya, jika Anda hanya mengubah jenis kolom, alat otomatis dapat dengan mudah menebak cara membuatnya kembali. Tetapi jika Anda juga memindahkan kolom, mengganti nama, dan menambah atau menghapus kolom lain, paket perangkat lunak terbaik yang bisa dilakukan adalah menebak apa yang mungkin terjadi. Dan Anda mungkin kehilangan data.
Saya sarankan untuk melacak setiap perubahan skema yang Anda buat ke server pengembangan, kemudian menjalankan pernyataan tersebut secara langsung di server langsung (atau mengubahnya menjadi skrip pemutakhiran atau migrasi). Ini lebih membosankan, tetapi itu akan menjaga data Anda aman. Dan pada saat Anda mulai mengizinkan pengguna akhir mengakses situs Anda, apakah Anda benar-benar akan membuat perubahan database berat yang konstan?
sumber
--hostN
dan--userN
atau itu akan gagal secara diam-diam.Lihat http://www.liquibase.org/
sumber
periksa: http://schemasync.org/ alat schemasync bekerja untuk saya, itu adalah alat baris perintah bekerja dengan mudah di baris perintah linux
sumber
Ada alat command-line mysql-diff open source lainnya:
http://bitbucket.org/stepancheg/mysql-diff/
sumber
Ada alat yang berguna ditulis menggunakan perl yang disebut Maatkit . Ini memiliki beberapa perbandingan database dan alat sinkronisasi antara lain.
sumber
SQL Bandingkan dengan RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy untuk membantu manajemen perubahan basis data secara otomatis http://dbdeploy.com/
sumber
Untuk saya sendiri, saya akan mulai dengan membuang kedua database dan membedakan dump, tetapi jika Anda ingin skrip gabungan yang dibuat secara otomatis, Anda akan ingin mendapatkan alat nyata.
Pencarian Google sederhana muncul alat berikut:
sumber
Lihatlah dbForge Data Compare untuk MySQL . Ini adalah shareware dengan masa uji coba 30 hari gratis. Ini adalah alat MySQL GUI yang cepat untuk perbandingan dan sinkronisasi data, pengelolaan perbedaan data, dan sinkronisasi yang dapat disesuaikan.
sumber
Setelah berjam-jam mencari di web untuk alat sederhana, saya menyadari saya tidak mencari di Ubuntu Software Center. Ini adalah solusi gratis yang saya temukan: http://torasql.com/ Mereka mengklaim memiliki versi untuk Windows juga, tapi saya hanya menggunakannya di Ubuntu.
Sunting: 2015-Feb-05 Jika Anda memerlukan alat Windows, TOAD sempurna dan gratis: http://software.dell.com/products/toad-for-mysql/
sumber
Pustaka komponen zeta apache adalah pustaka tujuan umum dari komponen yang digabungkan secara longgar untuk pengembangan aplikasi berbasis PHP 5.
Komponen eZ - DatabaseSchema memungkinkan Anda untuk:
Anda dapat memeriksa tutorialnya di sini: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
sumber
Alat perbandingan dan sinkronisasi yang sangat mudah digunakan:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp
Keuntungan:
Kekurangan:
sumber
Saya pikir Navicat untuk MySQL akan membantu untuk kasus ini. Ini mendukung Sinkronisasi Data dan Struktur untuk MySQL.
sumber
Untuk bagian pertama dari pertanyaan, saya hanya melakukan dump keduanya dan diff mereka. Tidak yakin tentang mysql, tetapi postgre pg_dump memiliki perintah untuk hanya membuang skema tanpa isi tabel, sehingga Anda dapat melihat apakah Anda telah mengubah skema apa pun.
sumber
Saya bekerja dengan tim Pemasaran Nob Hill, saya ingin memberi tahu Anda bahwa saya akan senang mendengar pertanyaan Anda, saran atau apa pun, jangan ragu untuk menghubungi saya.
Kami awalnya memutuskan untuk membuat alat kami dari awal karena sementara ada produk lain di pasaran, tidak ada yang melakukan pekerjaan dengan benar. Sangat mudah untuk menunjukkan kepada Anda perbedaan antara database. Ini benar-benar lain untuk benar-benar membuat satu database seperti yang lain. Migrasi yang lancar, baik skema dan data, selalu menjadi tantangan. Ya, kita sudah mencapainya di sini.
Kami sangat yakin bahwa ini dapat memberi Anda migrasi yang lancar, daripada jika tidak - jika skrip migrasi yang dihasilkannya tidak cukup mudah dibaca atau tidak akan berfungsi untuk Anda, dan kami tidak dapat memperbaikinya dalam lima hari kerja - Anda akan mendapatkan salinan gratis Anda sendiri!
http://www.nobhillsoft.com/NHDBCompare.aspx
sumber