दो MySQL डेटाबेस की तुलना करें [बंद]


368

मैं वर्तमान में एक MySQL डेटाबेस का उपयोग करके एक एप्लिकेशन विकसित कर रहा हूं।

डेटाबेस-संरचना अभी भी प्रवाह में है और विकास की प्रगति के दौरान परिवर्तन होता है (मैं अपनी स्थानीय प्रतिलिपि को बदलता हूं, परीक्षण-सर्वर पर अकेला छोड़ देता हूं)।

क्या डेटाबेस के दो उदाहरणों की तुलना करने का एक तरीका है यह देखने के लिए कि क्या कोई बदलाव हुआ था?

हालांकि वर्तमान में केवल पिछले परीक्षण सर्वर डेटाबेस को छोड़ना ठीक है, क्योंकि परीक्षण परीक्षण डेटा में प्रवेश करना शुरू कर देता है, यह थोड़ा मुश्किल हो सकता है।
वही हालांकि अधिक बाद में उत्पादन में फिर से होगा ...

क्या उत्पादन डेटाबेस में परिवर्तन करने का एक आसान तरीका है, अधिमानतः स्वचालित रूप से इसे संशोधित करने के लिए एक स्क्रिप्ट बनाकर?


उत्तर में उल्लिखित उपकरण:


4
मेरा मानना ​​है कि RedGate के उपकरण SQL सर्वर के लिए ही हैं।
डेव आर।

4
Red Gate में अब एक MySQL संस्करण भी है, जो वर्तमान में मुफ़्त है क्योंकि यह जल्दी पहुंच में है: Red-gate.com/products/MySQL_Compare/index.htm
डेविड एटकिंसन

2
यह एक वास्तविक समस्या है। मैं उत्पादन मशीन के लिए देव से तैनात है और यह हमेशा कुछ टूट जाता है। इस जानकारीपूर्ण पोस्ट के लिए धन्यवाद
हेर

1
Redgate का MySQL टूल अब $ 70 / उपयोगकर्ता है। यहां तक ​​कि उस कीमत पर भी मैं यहां टिप्पणियों का मूल्यांकन और पोस्ट करूंगा।
जेरेमी मैकगी

इसके अलावा अभी इसकी जरूरत थी, एक क्षेत्र का आकार बढ़ाना था। बस इसे बढ़ाना और सब कुछ ठीक था पर संदेह नहीं करना चाहता था। @ जारेड ने सुझाव दिया कि मैंने क्या इस्तेमाल किया।
टास

जवाबों:


210

यदि आप छोटे डेटाबेस के साथ काम कर रहे हैं, तो मैंने SQL स्क्रिप्ट बनाने के लिए --skip-commentsऔर --skip-extended-insertविकल्पों के साथ दोनों डेटाबेस पर mysqldump को चलाने के लिए पाया है , फिर 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

12
कमांड-लाइन साक्षरता के लिए डबल-प्लस अपवोट !!!
dogenpunk

5
डेटा की तुलना करने के लिए , इसके बजाय इसका उपयोग करें; अभी भी कुछ MySQL4 + चरित्र सेट, आदि के बारे में टिप्पणी होmysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
zanlok

41
-d, --no-dataउत्पादन उपयोग की आवश्यकता वाले लोगों के लिए रुचि हो सकती है लेकिन स्कीमा के बारे में केवल देखभाल करें
लुई

7
उपयोग करने के लिए एक बेहतर उपकरण MySQL द्वारा विकसित mysqldbcompare उपयोगिता होगी जिसे आप विंडोज, लिनक्स या मैक पर उपयोग कर सकते हैं - यह डेटा और स्कीमा परिवर्तन दोनों के लिए SQL स्टेटमेंट को भी आउटपुट कर सकता है और एक साधारण कमांड लाइन की तुलना में बहुत अधिक परीक्षण भिन्न होता है। निर्धारण करते हैं।
जसदीप खालसा

4
रंगों की कोशिश के साथ एक अच्छे अंतर के लिएvimdiff
गीताकार

99

MySQL के लिए टॉड के पास डेटा और स्कीमा सुविधाओं की तुलना है, और मुझे विश्वास है कि यह एक सिंक्रनाइज़ेशन स्क्रिप्ट भी बनाएगा। सभी के सर्वश्रेष्ठ, यह फ्रीवेयर है।


2
उल्लिखित सभी उपकरण अच्छे लगते हैं। मैं अब तक मनमाने ढंग से टॉड का चयन कर रहा हूं जब तक कि मैं कुछ और शोध नहीं कर सकता।
विन्सेन्ट रामधनी

64
मैं इस उपकरण के बारे में तब तक उत्साहित था जब तक मुझे एहसास नहीं हुआ कि यह विंडोज़ में चलता है, न कि लिनक्स में। वापस खोज करने के लिए ...
jdias

2
मेरे लिए शानदार काम किया। क्या मुझे ऐसा करने के लिए सब कुछ चाहिए और बदले हुए रिकॉर्ड के लिए हाइलाइट की गई कोशिकाओं ने यह देखना आसान बना दिया कि क्या बदला है।
टेम्स

4
--run-all-tests --difftype sql --disable-binary-loggingविकल्पों के साथ mysqldbcompare लगभग एक ही काम कर सकता है (आउटपुट को छोड़कर टिप्पणी के साथ मिलाया जाता है, और स्ट्रिंग में विशेष वर्ण बच नहीं जाते हैं)।
स्कीमैक्स

4
@ ऐसन स्मिथ क्या आप मुझे लिनक्स के लिए विकल्प बता सकते हैं?
विश्रुत

20

मैं Navicat नामक सॉफ्टवेयर के एक टुकड़े का उपयोग करता हूं :

  • मेरे परीक्षण डेटाबेस में लाइव डेटाबेस सिंक करें।
  • दो डेटाबेस के बीच अंतर दिखाएं।

यह पैसा खर्च करता है, यह केवल विंडोज़ और मैक है, और इसे एक अजीब यूआई मिला है, लेकिन मुझे यह पसंद है।


यह लिनक्स पर चलता है। मेरे पास इस समय एक और डेस्कटॉप पर खुला है। स्कीमा सिंक संरचना को देव-परिवर्तन से धकेलने की सुविधा है-> परीक्षण-> लाइव केवल लाइसेंस शुल्क के लायक है।
कर्नल स्पॉन्ज

2
अच्छी पकड़, मुझे यह भी नहीं पता था कि इसमें वे विशेषताएं थीं। यह मैक पर अब तक की सबसे अच्छी बात है।
हेन्द्र उज़िया

यह केवल उन डेटाबेस की तुलना करता है जो सर्वर पर रहते हैं, न कि देशी एसक्यूएल फाइलें
AlxVallejo

@seanyboy, आपको अजीब यूआई क्यों पसंद है?
पचेरियर

17

SQLyog (वाणिज्यिक) में एक स्कीमा सिंक्रोनाइज़ेशन टूल है जो दो डेटाबेस को सिंक्रनाइज़ करने के लिए SQL उत्पन्न करता है।

यहां छवि विवरण दर्ज करें


1
हां यह मेरे लिए अब तक का सबसे अच्छा समाधान है, ठीक एसक्यूएल सिंक क्वेरी प्रदान करता है ताकि आप इसे कभी भी, कहीं भी अपडेट कर सकें ..
अनुपम

अधिक महंगा और भारी, इस तथ्य के बाद के पैचिंग के लिए अच्छा नहीं है
zanlok

1
बहुत धीमी गति से, और किसी कारण से यह बहुत सारी विदेशी कुंजियों को छोड़ देता है और फिर से बना देता है, जबकि इसकी आवश्यकता नहीं है। प्रगति का अनुसरण करने का कोई तरीका नहीं।
आर्टेम गाउटसोल

13

फीचर तुलना सूची से ... MySQL वर्कबेंच उनके सामुदायिक संस्करण में स्कीमा डिफ और स्कीमा सिंक्रोनाइज़ेशन प्रदान करता है।


7
बहुत अच्छा काम करता है! और यह मुफ़्त है, धन्यवाद। उन लोगों के लिए जो इसे नहीं पा सकते (मेरी तरह)। यह यहाँ है: डेटाबेस -> रिवर्स इंजीनियर -> MySQL मॉडल या ईईआर आरेख में -> डेटाबेस -> किसी भी स्रोत के साथ सिंक्रनाइज़ करें
बेंटज़ी

यह अच्छा काम करता है। हालाँकि आप केवल एक ही नाम के डेटाबेस की तुलना कर सकते हैं। मेरे पास कई (मल्टी-टेनेंट क्लाइंट) डेटाबेस हैं जो मैं एक ही होस्ट पर "मास्टर" संस्करण से सिंक करना चाहता हूं। इसलिए मुझे सिंक्रनाइज़ेशन से पहले प्रत्येक क्लाइंट डीबी से मिलान करने के लिए मास्टर का नाम बदलना होगा। वरना अच्छा!
scipilot

इस पर अतिरिक्त जानकारी इस लिंक
स्टीवन रिससर्ट

13

कई तरीके निश्चित रूप से हैं, लेकिन मेरे मामले में मैं डंप और डिफरेंट कमांड पसंद करता हूं। तो यहाँ एक स्क्रिप्ट है जो जेरेड की टिप्पणी पर आधारित है:

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

प्रतिक्रिया का स्वागत है :)


12

dbSolo, यह भुगतान किया जाता है, लेकिन यह सुविधा वह हो सकती है जिसे आप http://www.dbsolo.com/help/compre.html के लिए देख रहे हैं

यह Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 और MySQL के साथ काम करता है वैकल्पिक शब्द


यह ठीक वही है जिसकी मुझे तलाश थी! बहुत बढ़िया!
जोश नानकिन

11

यदि आपको केवल स्कीमा (डेटा नहीं) की तुलना करने की आवश्यकता है, और पर्ल तक पहुंच है, तो mysqldiff काम कर सकता है। मैंने इसका उपयोग किया है क्योंकि यह आपको स्थानीय डेटाबेस की तुलना दूरस्थ डेटाबेस (SSH के माध्यम से) करने देता है, इसलिए आपको किसी भी डेटा को डंप करने से परेशान होने की आवश्यकता नहीं है।

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

यह दो डेटाबेस को सिंक्रनाइज़ करने के लिए SQL क्वेरी जनरेट करने का प्रयास करेगा, लेकिन मुझे इस पर (या वास्तव में कोई टूल) भरोसा नहीं है। जहां तक ​​मुझे पता है, एक डेटाबेस स्कीमा को दूसरे में बदलने के लिए जरूरी बदलावों को रिवर्स-इंजीनियर करने के लिए कोई 100% विश्वसनीय तरीका नहीं है, खासकर जब कई बदलाव किए गए हों।

उदाहरण के लिए, यदि आप केवल एक कॉलम का प्रकार बदलते हैं, तो एक स्वचालित उपकरण आसानी से अनुमान लगा सकता है कि इसे कैसे पुनः बनाया जाए। लेकिन अगर आप कॉलम को आगे बढ़ाते हैं, तो उसका नाम बदलें, और अन्य कॉलम जोड़ें या निकालें, सबसे अच्छा सॉफ्टवेयर पैकेज जो भी कर सकता है वह अनुमान लगा सकता है कि संभवतः क्या हुआ है। और आप डेटा खो सकते हैं।

मेरा सुझाव है कि आपके द्वारा विकास सर्वर में किए गए किसी भी स्कीमा परिवर्तन पर नज़र रखने के लिए, फिर उन बयानों को लाइव सर्वर पर हाथ से चलाना (या उन्हें अपग्रेड स्क्रिप्ट या माइग्रेशन में रोल करना)। यह अधिक थकाऊ है, लेकिन यह आपके डेटा को सुरक्षित रखेगा। और जब तक आप अंतिम उपयोगकर्ताओं को आपकी साइट तक पहुंच की अनुमति देना शुरू करते हैं, क्या आप वास्तव में लगातार भारी डेटाबेस परिवर्तन करने जा रहे हैं?


दोनों प्रदान करने के लिए मत भूलना --hostNऔर --userNयह चुपचाप विफल हो जाएगा।
ज़्नर्कस

मुझे ओरेकल के mysqldbcompare टूल के साथ अनुक्रमणिका पर बग उत्पन्न करने, और समान फ़ील्ड में फेरबदल करने की समस्या थी। Mysqldiff टूल ने त्रुटिपूर्ण रूप से काम किया और समय की एक अच्छी बचत की।
रॉबर्ट के


6

check: http://schemasync.org/ स्कीमास्क्यूइन टूल मेरे लिए काम करता है, यह एक कमांड लाइन टूल है, जो linux कमांड लाइन में आसानी से काम करता है


1
अगर आपको इसे मैक पर इंस्टॉल करने में कोई समस्या हो रही है, तो मैं केवल होमब्रे का उपयोग करके mysql और अजगर को स्थापित करने में सक्षम था, जिसमें कोई फायदा नहीं हुआ।
बिजौ ट्रोवेल्ले जुले


3

एक उपयोगी उपकरण है जो पर्ल का उपयोग करके लिखा जाता है जिसे माटकिट कहा जाता है । इसमें अन्य चीजों के बीच कई डेटाबेस तुलना और सिंक्रनाइज़िंग टूल हैं।


मुझे इस प्रोजेक्ट के बारे में पता नहीं था! धन्यवाद, ऐसा लगता है कि इसमें कुछ उपकरण हैं जो बहुत उपयोगी होंगे।
विन्सेन्ट रामधनी 13

2
मुझे माटकिट में स्कीमा तुलना उपकरण नहीं मिले हैं।
सौतेला भाई

मुझे न तो - जहां उपकरण में हम यह मिल सकता है?
जर्जर कपड़ा

मुझे नहीं लगता कि इसमें स्कीमा की तुलना है। मैं एमके-टेबल-चेकसम और एमके-टेबल-सिंक का उपयोग करते हुए डेटा तुलना और सिंकिंग की बात कर रहा था
जैरोड इलियट

यह प्रक्रिया कोड पर है।
Googlep

3

SQL RedGate http://www.red-gate.com/products/SQL_Compare/index.htm द्वारा तुलना करें

DBDeploy एक स्वचालित फैशन में डेटाबेस परिवर्तन प्रबंधन में मदद करने के लिए http://dbdeploy.com/


1
Red Gate उपकरण SQL Server के अलावा किसी अन्य चीज़ का समर्थन नहीं करते।
रितामिस

2
रेड गेट के पास एक MySQL वर्जन है, साथ ही साथ शुरुआती पहुँच में भी मुफ्त: red-gate.com/products/MySQL_Compare/index.htm
डेविड एटकिंसन

OSX के लिए उपलब्ध नहीं है
AlxVallejo

3

खुद के लिए, मैं दोनों डेटाबेसों को डंप करने और डंप को अलग करने के साथ शुरू करूंगा, लेकिन यदि आप स्वचालित रूप से मर्ज स्क्रिप्ट बनाना चाहते हैं, तो आप एक वास्तविक टूल प्राप्त करना चाहते हैं।

एक साधारण Google खोज ने निम्नलिखित टूल चालू किए:


3

पर एक नजर डालें MySQL के लिए की तुलना करें dbForge डेटा । यह 30-दिनों के नि: शुल्क परीक्षण अवधि के साथ एक शेयरवेयर है। यह डेटा तुलना और सिंक्रनाइज़ेशन, डेटा अंतरों के प्रबंधन और अनुकूलन योग्य सिंक्रनाइज़ेशन के लिए एक तेज़ MySQL GUI उपकरण है।

dbForge डाटा MySQL के लिए तुलना करें


3

सरल टूल के लिए वेब पर घंटों खोज करने के बाद, मुझे एहसास हुआ कि मैं Ubuntu सॉफ्टवेयर सेंटर में नहीं देखा था। यहाँ एक मुफ्त समाधान है जो मैंने पाया: http://torasql.com/ वे विंडोज के लिए भी एक संस्करण का दावा करते हैं, लेकिन मैं केवल उबंटू के तहत इसका उपयोग कर रहा हूं।

संपादित करें: 2015-Feb-05 यदि आपको विंडोज टूल की आवश्यकता है, तो TOAD एकदम सही और मुफ्त है: http://software.dell.com/products/toad-for-mysql/


2
इस उपकरण का विकास रुक गया और अब पेरकोना
mrmuggles

2

अपाचे ज़ेटा घटक पुस्तकालय PHP 5 पर आधारित अनुप्रयोगों के विकास के लिए शिथिल युग्मित घटकों का एक सामान्य उद्देश्य पुस्तकालय है।

eZ घटक - DatabaseSchema आपको इसकी अनुमति देता है:

   .Create / एक डेटाबेस स्कीमा परिभाषा सहेजें;
   .Compase डेटाबेस स्कीमा;
   । सिंक्रनाइज़ेशन प्रश्नों को फिर से शुरू करें;

आप यहाँ ट्यूटोरियल देख सकते हैं: http://incubator.apache.org/zetacompords/documentation/trunk/DatabaseSchema/tutorial.html


2

तुलना और सिंक टूल का उपयोग करना बहुत आसान है:
डेटाबेस तुलना http://www.clevercompenders.com/products/dbcomparer/index.asp

लाभ:

  • तेज
  • प्रयोग करने में आसान
  • लागू करने के लिए परिवर्तनों का चयन करना आसान है

नुकसान:

  • छोटे ints में लंबाई सिंक नहीं करता है
  • इंडेक्स नामों को ठीक से सिंक नहीं करता है
  • टिप्पणियों को सिंक नहीं करता है

सच है, उन्होंने 5 वर्षों में कुछ छोटे बदलावों के साथ एक सतही अद्यतन किया है। लेकिन इसे सक्रिय रूप से विकसित नहीं किया जा रहा है।
आर्टेम गाउटसॉल

1

मुझे लगता है कि MySQL के लिए Navicat इस मामले के लिए मददगार होगा। यह MySQL के लिए डेटा और स्ट्रक्चर सिंक्रोनाइज़ेशन का समर्थन करता है। यहां छवि विवरण दर्ज करें


0

सवाल के पहले भाग के लिए, मैं सिर्फ दोनों का एक डंप करता हूं और उन्हें अलग करता हूं। Mysql के बारे में निश्चित नहीं है, लेकिन पोस्टग्रेज pg_dump के पास टेबल सामग्री के बिना स्कीमा को डंप करने के लिए एक कमांड है, इसलिए आप देख सकते हैं कि क्या आपने स्कीमा को बदल दिया है।


MySQL में एक समान कमांड mysql_dump है। यह एक समाधान हो सकता है अगर मैं इसे एक परिनियोजन प्रक्रिया में एकीकृत कर सकता हूं। धन्यवाद।
विन्सेन्ट रामधनी

इसके अलावा, अधिक उपयोगकर्ता के अनुकूल अनुभव के लिए, आप phpMyAdmin का उपयोग करके समान प्राप्त कर सकते हैं - MySQL उपयोगकर्ताओं के लिए एक वास्तविक हत्यारा!
शिणोर्थ

पहचान स्कीमा आसानी से विभिन्न स्कीमा डंप में परिणाम कर सकते हैं। Mysql क्लाइंट के विभिन्न संस्करण थोड़े अलग डंप (एक समस्या यदि आप दो अलग-अलग मशीनों से स्कीमा की तुलना कर रहे हैं) का उत्पादन कर सकते हैं, और विदेशी कुंजी और बाधाओं जैसी चीजों को एक अलग क्रम में डंप किया जा सकता है।
मार्क ई। हासे

0

मैं नोब हिल की मार्केटिंग टीम के साथ काम कर रहा हूं, मैं आपको बताना चाहता था कि मुझे आपके सवाल, सुझाव या कुछ और सुनने में खुशी होगी, कृपया मुझसे संपर्क करने में संकोच न करें।

हमने मूल रूप से अपने उपकरण को खरोंच से बनाने का फैसला किया क्योंकि बाजार में ऐसे अन्य उत्पाद हैं, उनमें से कोई भी काम सही नहीं है। आपको डेटाबेस के बीच अंतर दिखाना काफी आसान है। यह वास्तव में दूसरे की तरह एक डेटाबेस बनाने के लिए काफी अन्य है। स्कीमा और डेटा दोनों का स्मूथ माइग्रेशन, हमेशा एक चुनौती रहा है। खैर, हमने इसे यहां हासिल किया है।
हम इतने आश्वस्त हैं कि यह आपको एक सहज प्रवास प्रदान कर सकता है, यदि ऐसा नहीं है - यदि यह माइग्रेशन स्क्रिप्ट उत्पन्न करता है तो यह पर्याप्त रूप से पठनीय नहीं है या आपके लिए काम नहीं करेगा, और हम इसे पांच व्यावसायिक दिनों में ठीक नहीं कर सकते हैं - आप अपनी खुद की मुफ्त प्रति प्राप्त करेंगे!

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


यह एक वादा है? मैंने इसे आज़माया और यह कुछ त्रुटियों के साथ खत्म हो गया, कम से कम यह नहीं है कि जब एक फ़ंक्शन को माइग्रेट करता है तो यह मूल डेटाबेस के समान मालिक का उपयोग करने का प्रयास करता है
क्रूचन

हाँ इसका एक वादा है। ज्यादातर लोगों के लिए उपकरण ठीक काम कर रहा है। हम किसी भी बग के लिए जीवन के लिए एक लाइसेंस का वादा करते हैं जो आपको मिलता है और हम 5 व्यावसायिक दिनों के भीतर ठीक नहीं कर सकते हैं। कृपया हमारी सहायता टीम से संपर्क करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.