2009-05-07 7 views
16

मेरे पास एक स्ट्रिंग है जो एकाधिक कॉलम, रिकॉर्ड्स और टेबल पर हजारों बार वर्डप्रेस इंस्टॉल (सर्वर का नाम) के अंदर निहित है।किसी डेटाबेस के भीतर किसी स्ट्रिंग के सभी उदाहरणों को कैसे खोजें और बदलें?

मैं इसे किसी अन्य सर्वर के स्थान से अपडेट करना चाहता हूं - हम सामग्री को आगे बढ़ा रहे हैं।

तो स्रोत http://my-server1/some/link/to/something जैसा कुछ होगा, और मैं इसे http://my-other-server/some/link/to/something से बदलना चाहता हूं। मैं अनिवार्य रूप से http://my-server1 के प्रत्येक उदाहरण के लिए इस प्रक्रिया को दोहराना चाहता हूं।

क्या MySQL में ऐसा करने का कोई आसान तरीका है? एक उपकरण? या क्या मुझे दुख की बात है कि हर रिकॉर्ड को समस्याग्रस्त रूप से अपडेट करना है?

धन्यवाद,

+0

डेटा इस तरह के (डेटा कम से कम absoute पथ होना चाहिए) होने डेटाबेस में एक बहुत बुरा विचार है क्योंकि जब आप स्थानांतरित होते हैं तो आपको इसे बदलने की आवश्यकता होती है। वैसे भी वर्डप्रेस इंस्टॉल में साइट का यूआरएल क्यों है? केवल एक ही, वैश्विक साइट pref होना चाहिए। –

उत्तर

34

एक कच्चे (लेकिन प्रभावी) कर रही है कि यह एक फ़ाइल में स्कीमा डंप करने के लिए किया जाएगा की तरह, ध्यान से खोज एवं प्रतिस्थापन और फिर पुन: आयात लागू होते हैं।

तथ्य की बात के रूप में मुझे लगता है कि आज :)

+0

खुशी है कि यह मदद करता है। बस सुनिश्चित करें कि आप प्रतिस्थापन सावधानी से लागू करें और केवल वही बदलें जो आप वास्तव में चाहते हैं। – cherouvim

+0

स्थिति के बारे में जब मुझे कम से कम 2000 की बजाय प्रतिस्थापन करना है? क्या आप मदद कर सकतें है? – SachinKRaj

+0

@SachinKRaj: मैं 2000 'sed' कथन के साथ एक खोल स्क्रिप्ट लिखना बहुत सावधानी से लिखूंगा। – cherouvim

1

भी एक Wordpress प्लगइन है, जो grep खोज चल रहा है और डेटाबेस भर की जगह की अनुमति देता है Search Regex कहा जाता है था।

14

Google खोज में इस पर आया, लेकिन इससे कुछ लोगों की मदद मिल सकती है। // oldsite: आप तालिकाओं और स्तंभों पता है

अद्यतन TABLE_NAME सेट स्तंभ = REPLACE (स्तंभ, 'http (आप इस phpMyAdmin में वाइल्डकार्ड खोज का उपयोग कर मिल सकता है),। कॉम ',' http://newsite.com ');

बोल्ड अपने आप के साथ भागों को बदलें।

यदि आपके पास एक बड़ा डेटाबेस था तो आप इसे एक स्क्रिप्ट में लागू कर सकते हैं जो प्रत्येक तालिका और कॉलम के माध्यम से लूप कर सकता है।

+0

'रेप्लेस()' serialized सरणी डेटा पर भी काम करेगा? –

9

यदि आप पूरे डेटाबेस को दोबारा आयात करने में प्रसन्न हैं तो MySQL डंप विधि सबसे अच्छी शर्त होगी। किसी भी व्यक्ति के लिए जो ऐसा नहीं करना चाहता - वर्डप्रेस कोर इंस्टॉलेशन में केवल 11 टेबल होते हैं, जिनमें से कुछ सामग्री कॉलम होते हैं, इसलिए कॉलम द्वारा प्रतिस्थापित करना उतना ही आसान होगा। आप यह मानते हुए अपने लिंक या स्ट्रिंग संदर्भित यह आपके एसक्यूएल होगा प्लगइन टेबल का भार नहीं है:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
UPDATE wp_comments SET comment_content = REPLACE(comment_content,'xcurrentx','xreplacementx'); 
UPDATE wp_links SET link_description = REPLACE(link_description,'xcurrentx','xreplacementx'); 
UPDATE wp_options SET option_value = REPLACE(option_value,'xcurrentx','xreplacementx'); 
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_content = REPLACE(post_content,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_title = REPLACE(post_title,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_excerpt = REPLACE(post_excerpt,'xcurrentx','xreplacementx'); 
UPDATE wp_term_taxonomy SET description = REPLACE(description,'xcurrentx','xreplacementx'); 
UPDATE wp_usermeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
+0

यह वास्तव में बेहतर जवाब है। मुझे नहीं पता कि अन्य उत्तर सही क्यों चुना गया है, और इतने सारे वोट हैं – Parag

2

आपका प्रश्न 2009 को और उस वर्ष के दौरान नियुक्त किया गया है एक और पुरुष एक के लिए खोज करने के लिए एक बुनियादी php उपकरण विकसित एक निश्चित डेटाबेस की सभी तालिकाओं में स्ट्रिंग। वैकल्पिक रूप से आप अपनी सभी घटनाओं को एक अलग स्ट्रिंग के साथ भी बदल सकते हैं।

अभी भी 5 साल (लिखने के समय) के बाद इस उपकरण का उपयोग वर्डप्रेस इंस्टॉलेशन के खिलाफ प्रभावी है और मेरी राय में एक mysql डंप का उपयोग करने से कहीं अधिक आसान है (हालांकि आप चलने से पहले एक डंप भी बनाना चाहते हैं बैकअप उद्देश्यों के लिए स्क्रिप्ट)।

आप उसके लेखक Eric Amundson के ब्लॉग में और परियोजना MySQL Search & Replace

की लॉन्चपैड के पृष्ठ में और अधिक जानकारी मैं आप अभी भी यह सब समय के बाद एक जवाब के लिए देख रहे हैं पर विश्वास नहीं है पा सकते हैं, लेकिन मैं करने का निर्णय लिया मेरे संकेत को भी पोस्ट करें, उम्मीद है कि यह भविष्य में यहां किसी और को इस मुद्दे के समाधान की खोज में मदद कर सकता है।

0

Addittionally ब्रैड लार्सन के जवाब देने के लिए - जैसे चर सेट करने के लिए:

SET @what_to_be_replaced = "what_to_be_replaced", @to_be_replaced_by = "to_be_replaced_by"; 

और फिर इसका इस्तेमाल इस प्रकार है:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, @what_to_be_replaced, @to_be_replaced_by); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^