سؤال

أنا حاليا على تطوير التطبيق باستخدام قاعدة بيانات MySQL.

قاعدة البيانات-هيكل لا يزال في حالة تغير مستمر و التغيرات في حين أن التنمية تقدم (أغير نسخة محلية ، وترك واحدة على test-server وحده).

هل هناك طريقة لمقارنة اثنين من مثيلات قاعدة البيانات لمعرفة ما إذا كانت هناك أي تغييرات ؟

بينما حاليا ببساطة التخلص من التجارب السابقة خادم قاعدة البيانات على ما يرام ، اختبار يبدأ دخول اختبار البيانات التي يمكن الحصول على صعبة بعض الشيء.
نفس وإن كان أكثر من ذلك لن يحدث مرة أخرى في وقت لاحق في إنتاج...

هل هناك طريقة سهلة تدريجيا إجراء تغييرات على بيانات الإنتاج ، ويفضل أن يكون ذلك عن طريق تلقائيا إنشاء برنامج نصي إلى تعديل ؟


الأدوات المذكورة في الإجابات:

هل كانت مفيدة؟

المحلول

إذا كنت تعمل مع قواعد بيانات صغيرة، فقد وجدت تشغيل mysqldump على كلتا قاعدتي البيانات باستخدام ملحق --skip-comments و --skip-extended-insert خيارات لإنشاء برامج نصية SQL، ثم تشغيل diff على برامج SQL النصية يعمل بشكل جيد.

من خلال تخطي التعليقات، فإنك تتجنب الاختلافات التي لا معنى لها مثل الوقت الذي قمت فيه بتشغيل أمر mysqldump.باستخدام --skip-extended-insert الأمر الذي تتأكد من إدراج كل صف ببيان الإدراج الخاص به.وهذا يلغي الموقف الذي يمكن أن يتسبب فيه سجل واحد جديد أو معدل في حدوث تفاعل متسلسل في جميع عبارات الإدراج المستقبلية.يؤدي تشغيل هذه الخيارات إلى إنتاج مقالب أكبر بدون تعليقات، لذا ربما لا يكون هذا شيئًا تريد القيام به في الاستخدام الإنتاجي ولكن بالنسبة للتطوير يجب أن يكون جيدًا.لقد وضعت أمثلة على الأوامر التي أستخدمها أدناه:

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

نصائح أخرى

الضفدع ل MySQL يحتوي على ميزات مقارنة البيانات والمخططات، وأعتقد أنه سيعمل أيضًا على إنشاء برنامج نصي للمزامنة.وأفضل ما في الأمر أنها مجانية.

أستخدم برنامجًا يسمى نافيكات ل :

  • مزامنة قواعد البيانات المباشرة مع قواعد بيانات الاختبار الخاصة بي.
  • إظهار الاختلافات بين قاعدتي البيانات.

إنه يكلف أموالاً، وهو يعمل بنظامي التشغيل Windows وMac فقط، ويحتوي على واجهة مستخدم غريبة الأطوار، لكني أحبه.

توجد أداة مزامنة المخطط في SQLyog (تجاري) الذي يقوم بإنشاء SQL لمزامنة قاعدتي بيانات.

enter image description here

من قائمة مقارنة الميزات... منضدة MySQL يقدم Schema Diff وSchema Synchronization في إصدار المجتمع الخاص بهم.

هناك طرق عديدة بالتأكيد، لكن في حالتي أفضّل الأمر dump and diff.إذن هنا نص يستند إلى تعليق جاريد:

#!/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

ردود الفعل هي موضع ترحيب :)

dbSolo، إنه مدفوع ولكن قد تكون هذه الميزة هي التي تبحث عنهاhttp://www.dbsolo.com/help/compare.html

وهو يعمل مع Oracle وMicrosoft SQL Server وSybase وDB2 وSolid وPostgreSQL وH2 وMySQLalt text

إذا كنت تحتاج فقط إلى مقارنة المخططات (وليس البيانات)، ولديك إمكانية الوصول إلى لغة Perl، فقد يعمل mysqldiff.لقد استخدمته لأنه يتيح لك مقارنة قواعد البيانات المحلية بقواعد البيانات البعيدة (عبر SSH)، لذلك لا داعي للقلق بشأن تفريغ أي بيانات.

http://adamspiers.org/computing/mysqldiff/

سيحاول إنشاء استعلامات SQL لمزامنة قاعدتي بيانات، لكنني لا أثق به (أو بأي أداة في الواقع).بقدر ما أعرف، لا توجد طريقة موثوقة بنسبة 100% لإجراء هندسة عكسية للتغييرات اللازمة لتحويل مخطط قاعدة بيانات إلى آخر، خاصة عند إجراء تغييرات متعددة.

على سبيل المثال، إذا قمت بتغيير نوع العمود فقط، فيمكن للأداة التلقائية بسهولة تخمين كيفية إعادة إنشاء ذلك.ولكن إذا قمت أيضًا بنقل العمود، وإعادة تسميته، وإضافة أعمدة أخرى أو إزالتها، فإن أفضل ما يمكن أن تفعله أي حزمة برامج هو تخمين ما حدث على الأرجح.وقد ينتهي بك الأمر إلى فقدان البيانات.

أقترح عليك تتبع أي تغييرات في المخطط تجريها على خادم التطوير، ثم تشغيل هذه البيانات يدويًا على الخادم المباشر (أو تحويلها إلى برنامج نصي للترقية أو الترحيل).إنها عملية شاقة أكثر، لكنها ستحافظ على أمان بياناتك.وبحلول الوقت الذي تبدأ فيه السماح للمستخدمين النهائيين بالوصول إلى موقعك، هل ستقوم بالفعل بإجراء تغييرات كبيرة ومستمرة على قاعدة البيانات؟

القي نظرة على http://www.liquibase.org/

يفحص: http://schemasync.org/ تعمل أداة schemasync بالنسبة لي، وهي أداة سطر أوامر تعمل بسهولة في سطر أوامر Linux

هناك أداة أخرى لسطر أوامر mysql-diff مفتوحة المصدر:

http://bitbucket.org/stepancheg/mysql-diff/

هناك أداة مفيدة مكتوبة باستخدام بيرل تسمى معتكيت.يحتوي على العديد من أدوات مقارنة قواعد البيانات والمزامنة من بين أشياء أخرى.

مقارنة SQL بواسطة RedGatehttp://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy للمساعدة في إدارة تغيير قاعدة البيانات بطريقة آليةhttp://dbdeploy.com/

بالنسبة لي، سأبدأ بالتخلص من قاعدتي البيانات وتمييز عمليات التفريغ، ولكن إذا كنت تريد إنشاء نصوص برمجية مدمجة تلقائيًا، فستحتاج إلى الحصول على أداة حقيقية.

بسيط بحث جوجل ظهرت الأدوات التالية:

نلقي نظرة على مقارنة بيانات dbForge لـ MySQL.إنه برنامج تجريبي مع فترة تجريبية مجانية مدتها 30 يومًا.إنها أداة MySQL GUI سريعة لمقارنة البيانات ومزامنتها وإدارة اختلافات البيانات والمزامنة القابلة للتخصيص.

dbForge Data Compare for MySQL

بعد ساعات من البحث على الإنترنت عن أداة بسيطة أدركت أني لم أنظر في مركز برامج أوبونتو.هنا هو الحل الحرة وجدت:http://torasql.com/ هم يدعون أن لديهم نسخة ويندوز أيضا ، ولكن أنا فقط استخدامه تحت أوبونتو.

تحرير:2015 فبراير 05 إذا كنت بحاجة إلى أداة ويندوز ، العلجوم هو الكمال مجانا:http://software.dell.com/products/toad-for-mysql/

مكتبة مكونات اباتشي زيتا هي مكتبة ذات أغراض عامة من المكونات المقترنة بشكل فضفاض لتطوير التطبيقات على أساس PHP 5.

مكونات eZ - مخطط قاعدة البيانات يسمح لك ب:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

يمكنك التحقق من البرنامج التعليمي هنا:http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html

أداة المقارنة والمزامنة سهلة الاستخدام للغاية:
مقارن قاعدة البيانات http://www.clevercomponents.com/products/dbcomparer/index.asp

مزايا:

  • سريع
  • سهل الاستخدام
  • من السهل تحديد التغييرات لتطبيقها

سلبيات:

  • لا يقوم بمزامنة الطول مع ints الصغيرة
  • لا يقوم بمزامنة أسماء الفهرس بشكل صحيح
  • لا يقوم بمزامنة التعليقات

أظن Navicat لـ MySQL سيكون مفيدا لهذه الحالة.وهو يدعم مزامنة البيانات والبنية لـ MySQL. enter image description here

بالنسبة للجزء الأول من السؤال، قمت فقط بتفريغ كليهما والفرق بينهما.لست متأكدًا من MySQL، ولكن postgres pg_dump لديه أمر لتفريغ المخطط بدون محتويات الجدول، حتى تتمكن من معرفة ما إذا كنت قد قمت بتغيير المخطط أم لا.

أنا أعمل مع فريق التسويق في نوب هيل، أردت أن أخبرك أنني سأكون سعيدًا بسماع أسئلتك أو اقتراحاتك أو أي شيء آخر، فلا تتردد في الاتصال بي.

لقد قررنا في الأصل إنشاء أداتنا من الصفر لأنه على الرغم من وجود منتجات أخرى مماثلة في السوق، إلا أن أياً منها لا يؤدي المهمة بشكل صحيح.من السهل جدًا أن تظهر لك الاختلافات بين قواعد البيانات.إن إنشاء قاعدة بيانات واحدة مثل الأخرى أمر مختلف تمامًا.لقد كان الترحيل السلس لكل من المخطط والبيانات يمثل تحديًا دائمًا.حسنًا، لقد حققنا ذلك هنا.
نحن واثقون جدًا من أنه يمكن أن يوفر لك ترحيلًا سلسًا، مما لو لم يحدث ذلك - إذا كانت البرامج النصية للترحيل التي ينشئها غير قابلة للقراءة بدرجة كافية أو لن تعمل معك، ولا يمكننا إصلاحها في خمسة أيام عمل - سوف تحصل على نسختك المجانية!

http://www.nobhillsoft.com/NHDBCompare.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top