समाधान: sql_log_bin = 0 सेट करना
वर्तमान सत्र के लिए बाइनरी लॉगिंग को अक्षम करने के लिए SET sql_log_bin = 0 का उपयोग करें। इससे बाद के स्टेटमेंट बाइनरी लॉग में लिखे नहीं जाएंगे और स्लेव पर रिप्लिकेट नहीं होंगे।
सिंटैक्स
SET sql_log_bin = 0; -- रिप्लिकेट नहीं होने वाले स्टेटमेंट चलाएं SET sql_log_bin = 1; -- पुनः सक्षम करें
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE SQLStatementsDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20)
-> );
mysql> INSERT INTO SQLStatementsDemo(UserName) VALUES
-> ('John'), ('Carol'), ('Bob'), ('Mike'), ('Sam'), ('David');
रिप्लिकेशन रोककर अद्यतन करना
mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE SQLStatementsDemo SET UserName = 'Maxwell' WHERE UserId = 6;
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO SQLStatementsDemo(UserName) VALUES('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> DELETE FROM SQLStatementsDemo WHERE UserId = 7;
Query OK, 1 row affected (0.10 sec)
mysql> SET sql_log_bin = 1;
Query OK, 0 rows affected (0.00 sec)
परिणाम
मास्टर पर टेबल में 7 पंक्तियाँ (UserId 6 अब Maxwell, Chris डाला गया फिर हटाया गया)।
स्लेव पर: मूल 6 पंक्तियाँ अपरिवर्तित (UserId 6 अभी भी David)।
महत्वपूर्ण विचार
- सुपर विशेषाधिकार आवश्यक: sql_log_bin बदलने के लिए SUPER विशेषाधिकार चाहिए
- सत्र-स्तरीय: केवल वर्तमान कनेक्शन को प्रभावित करता है
- खतरा: भूलकर sql_log_bin = 1 न करने पर डेटा हानि/असंगति
- GTID मोड: GTID-आधारित रिप्लिकेशन में अलग व्यवहार हो सकता है
उपयोग के मामले
- बड़े डेटा लोड/सफाई जो स्लेव पर आवश्यक नहीं
- अस्थायी टेबल रखरखाव
- बेंचमार्किंग/परीक्षण क्वेरी
- मास्टर-ओनली टेबल अद्यतन
बेहतर विकल्प (MySQL 5.6+)
SET SESSION sql_log_bin = OFF; -- कार्य करें SET SESSION sql_log_bin = ON;
अधिक स्पष्ट सिंटैक्स।