Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL रिप्लिकेशन: विशिष्ट SQL स्टेटमेंट को स्लेव पर रिप्लिकेट होने से अस्थायी रूप से रोकना

समाधान: 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;

अधिक स्पष्ट सिंटैक्स।

  1. - MySQL में विशिष्ट सेल की सामग्री कैसे अपडेट करें

    उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2029 VALUES (4, John, Brown); विशिष्ट सेल अपडेट करें Id=4 वाली पंक्ति का FirstName और LastName बदलें: WHERE Id = 4; परिणाम +------+-----------+----------+ | Id | FirstName | LastName | +------+-----------+----------+ | 1 | Chris |

  1. - MySQL कमांड-लाइन क्लाइंट (mysql): अवलोकन और उपयोग

    mysql एक सरल SQL शेल है जिसमें इनपुट लाइन संपादन क्षमता है। इंटरैक्टिव और नॉन-इंटरैक्टिव दोनों उपयोग समर्थित। आउटपुट प्रारूप इंटरैक्टिव: ASCII टेबल प्रारूप। नॉन-इंटरैक्टिव (फिल्टर/पाइप): टैब-सेपरेटेड प्रारूप। --quick विकल्प: बड़े परिणाम सेट के लिए मेमोरी बफरिंग से बचने के लिए पंक्ति-दर-पंक्ति प्रा

  1. - MySQL क्लाइंट पर टेक्स्ट फ़ाइल से SQL स्टेटमेंट निष्पादित करना

    mysql क्लाइंट आमतौर पर इंटरैक्टिव उपयोग होता है, लेकिन SQL स्टेटमेंट फ़ाइल से भी निष्पादित कर सकते हैं। विधि 1: शेल रीडायरेक्शन mysql db_name < text_file यदि फ़ाइल में पहली स्टेटमेंट USE db_name है, तो कमांड लाइन पर डेटाबेस नाम देना अनावश्यक: mysql < text_file विधि 2: mysql प्रॉम्प्ट के अंदर \.