Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MYSQL किसी लेन-देन में सभी या कुछ भी नहीं डंपफाइल फिर से चलाता है

ध्यान दें:निम्नलिखित का केवल मोटे तौर पर परीक्षण किया जाता है, आपके डेटाबेस के आधार पर डंपिंग करते समय विचार करने के लिए और चीजें हो सकती हैं।

यह कुछ खास परिस्थितियों में ही संभव है।

पहली विफलता यह है कि लेन-देन एक सत्र के लिए बाध्य है। चूंकि आप rollback जारी करने के लिए फिर से कनेक्ट होते हैं , rollback रोलबैक के लिए कोई लेन-देन नहीं होने के कारण इसका कोई फायदा नहीं है। वह दूसरे सत्र में था।

दूसरी विफलता यह है कि आमतौर पर एक mysqldump में कई कथन होते हैं जो एक अंतर्निहित commit डालते हैं और इसलिए लेनदेन समाप्त करें। इसमें सभी डीडीएल स्टेटमेंट शामिल हैं (डेटा परिभाषा भाषा, इसमें drop शामिल है) , alter , create और इसी तरह) और साथ ही (un)lock tables .
इसलिए, एक ही लेन-देन में अपने डंपफ़ाइल को निष्पादित करने के लिए, डंप कुछ इस तरह बनाया जाना चाहिए था:

mysqldump -uuser -ppw database --no-create-info --skip-add-locks --skip-disable-keys --skip-triggers >dumpfiles

--no-create-info mysqldump सभी drop table ...; create table ...; बयान।

--skip-add-locks mysqldump को सभी lock table ...; unlock table ...; बयान।

--skip-disable-keys mysqldump को सभी alter table ... disable keys; alter table ...enable keys; बयान।

--skip-triggers mysqldump सभी को छोड़ देता है create trigger ...; बयान।

एक --single-transaction . भी है विकल्प, लेकिन यह विकल्प केवल एकल तालिकाओं पर लागू होगा।

तीसरी (संभव) विफलता यह है कि एक लेन-देन केवल पूरी तरह से रोलबैक किया जा सकता है, यदि इसमें शामिल सभी टेबल लेनदेन करने में सक्षम हैं, जैसे कि InnoDB या BDB। यदि आपके पास यानी MyISAM टेबल हैं, तो insert बयान वापस नहीं लिए जाएंगे।

निम्नलिखित विफल रहता है, कारण source संग्रहित प्रक्रिया में कमांड की अनुमति नहीं है, बल्कि यह mysql क्लाइंट का हिस्सा है।

यदि उस पर विचार किया गया है, तो आप इसे इस तरह कर सकते हैं:

पहले इस तरह की एक प्रक्रिया बनाएं:

DELIMITER $$
CREATE PROCEDURE sp_exec_dumpfile()
BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN 
  ROLLBACK;
END ;

START TRANSACTION;

SOURCE '/path/to/dumpfile.sql';

COMMIT;
END $$
DELIMITER ;

फिर इसे अपनी स्क्रिप्ट में इस तरह निष्पादित करें:

mysql -uuser -ppw -hhost databasename -e "CALL sp_exec_dump()"

या निश्चित रूप से आप डंपफाइल नाम के साथ प्रक्रिया को पैरामीटर करते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएचपी और माईएसक्यूएल:सबसे हाल की तारीख और सीमा के अनुसार आदेश 10

  2. ज़ेंड फ्रेमवर्क के तहत MySQL को कैसे कॉन्फ़िगर करें?

  3. वैकल्पिक WHERE पैरामीटर के साथ संग्रहित प्रक्रिया

  4. मैनुअल का उपयोग करते हुए कई अद्यतन शर्तों के साथ कोडनिर्देशक मॉडल जहां कथन

  5. क्या mysql_real_escape_string () पूरी तरह से SQL इंजेक्शन से बचाव करता है?