प्रौद्योगिकी साझेदारी

MySQL Binlog इत्यस्य विस्तृतव्याख्या: आँकडाधारविश्वसनीयतां सुधारयितुम् कोरप्रौद्योगिकी

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

लेख निर्देशिका

१ परिचयः

१.१ MySQL इति किम् बिन् वृत्त?

MySQL Bin Log(द्विनारी वृत्त, binary log) MySQL दत्तांशकोशस्य एकः log सञ्चिका अस्ति या दत्तांशकोशे कृतानि सर्वाणि परिवर्तनानि अभिलेखयतिDMLऑपरेशन्स् (यथा INSERT, UPDATE, DELETE इत्यादयः), परन्तुSELECT इत्येतत् बहिष्कृतम्प्रतीक्षतुDQL केवलं पठनीयं संचालनम्। Bin Log MySQL कृते प्रतिकृतिं, पुनर्प्राप्तिः, लेखापरीक्षा च प्राप्तुं महत्त्वपूर्णं साधनम् अस्ति । विस्तरेण पश्यन्तु :MySQL मध्ये DDL, DML, DQL तथा DCL

1.2 Bin Log इत्यस्य कार्यस्य अनुप्रयोगस्य च परिदृश्यानि

Bin Log इत्यस्य मुख्यकार्यं भवति: master-slave replication, data recovery, data backup, data subscription च

अनुप्रयोग परिदृश्यकल्पनाविषय
स्वामी-दास प्रतिकृतिमुख्यपुस्तकालयः binlog मध्ये अद्यतनसञ्चालन अभिलेखान् दासपुस्तकालयं प्रति प्रेषयति, तथा च दासपुस्तकालयः binlog पठति SQL कथनानि च निष्पादयति ।ई-वाणिज्यमञ्चः : मुख्यदत्तांशकोशः binlog कृते आदेशसञ्चालनं अभिलेखयति, तथा च सर्वेषां नोड्-सङ्गतिं निर्वाहयितुम् दत्तांशकोशात् आदेशदत्तांशं समन्वययति
आँकडा पुनर्प्राप्तिदत्तांशं पुनः प्राप्तुं SQL कथनानि विपर्ययरूपेण निष्पादयितुं binlog अभिलेखानां उपयोगं कुर्वन्तुवित्तीयप्रणाली : प्रशासकाः आँकडा-अखण्डतां सुनिश्चित्य वित्तीयहानिः परिहरितुं binlog-पार्सिंग् कृत्वा आकस्मिकतया विलोपितान् लेनदेन-अभिलेखान् पुनः प्राप्नुवन्ति ।
data backup इतिBinlog इत्यस्य उपयोगः वृद्धिशील-बैकअप-कृते भवति, बैकअप-समयस्य, स्थानस्य च व्ययस्य रक्षणं करोतिसामाजिकमाध्यममञ्चः : सम्पूर्णदत्तांशकोशस्य पूर्णतया बैकअपं न कृत्वा शीघ्रं नवीनतमस्थितौ पुनर्स्थापनार्थं प्रतिदिनं नियमितरूपेण binlog सञ्चिकानां बैकअपं गृह्यताम्।
दत्तांशसदस्यतावास्तविकसमये आँकडाधार-अद्यतन-सञ्चालनस्य निरीक्षणार्थं binlog इत्यस्य उपयोगं कुर्वन्तुखुदराकम्पनीनां वास्तविकसमये आँकडाविश्लेषणम् : binlog इत्यस्य पार्सिंग् कृत्वा विक्रय-अभिलेख-प्रवेश-सञ्चालनं विक्रय-प्रवृत्ति-विश्लेषणार्थं वास्तविकसमये आँकडा-विश्लेषण-मञ्चे गृहीतं भवति

एतेषां विशिष्टप्रकरणानाम् माध्यमेन वयं व्यावहारिक-अनुप्रयोगेषु MySQL binlog इत्यस्य महत्त्वं विविधतां च अधिकं स्पष्टतया द्रष्टुं शक्नुमः । binlog कार्यस्य सम्यक् उपयोगः प्रणाल्याः विश्वसनीयतां, पुनर्प्राप्तिक्षमतां, व्यावसायिकप्रतिसादवेगं च बहुधा सुधारयितुं शक्नोति ।

2. बिन् लॉग् इत्यस्य मूलभूताः अवधारणाः

२.१ बिन् लॉग् इत्यस्य कार्यसिद्धान्तः

यदा MySQL सर्वरः Bin Log कार्यं सक्षमं करोति तदा दत्तांशकोशस्य सर्वाणि परिवर्तनक्रियाः भविष्यन्तिघटना अभिलेख Bin Log सञ्चिकां प्रति । एतानि घटनानि निष्पादनक्रमेण संगृह्यन्ते, येन निरन्तरं ऑपरेशन लॉग् क्रमः निर्मीयते । एतानि घटनानि पुनः क्रीडितुं शक्यन्ते यदा दत्तांशस्य पुनर्स्थापनं प्रतिलिपिं वा कर्तुं आवश्यकं भवति तदा दत्तांशकोशस्य स्थितिं पुनः निर्मातुं शक्यते ।

२.२ बिन् लॉग् इत्यस्य त्रयः प्रारूपाः

MySQL Bin Log इत्यस्य त्रयः अभिलेखस्वरूपाः सन्ति:
निम्नलिखितम् MySQL Bin Log इत्यस्य त्रयः अभिलेखस्वरूपाः सन्ति ये सारणीरूपेण संगठिताः सन्ति:

अभिलेख प्रारूपवर्णेतुलाभअभावः
कथन-आधारित-लॉगिंग (SBL) 1.1.निष्पादितं SQL कथनं स्वयं अभिलेखयन्तुलॉग् आयतनं लघु भवति तथा च सरल SQL-सञ्चालनानां कृते उपयुक्तम् अस्ति ।केषुचित् सन्दर्भेषु दत्तांशस्य स्थिरतायाः गारण्टी न भवितुं शक्नोति, यथा अनिर्धारितकार्यं (यथा NOW()) ।
पङ्क्ति-आधारित-लॉगिंग (RBL) 1.1.प्रत्येकस्य दत्तांशपङ्क्तेः विशिष्टपरिवर्तनानि अभिलेखयन्तुअधिकं सटीकं, जटिलसञ्चालनार्थं प्रतिलिपिकरणार्थं च उपयुक्तम्बृहत् लॉग् आयतनं, बृहत् डिस्कं तथा नेटवर्क् ओवरहेड्
मिश्रित लॉगिंग (ML) 1.1.विशिष्टपरिस्थित्यानुसारं Statement तथा ​​Row मोड् मध्ये स्विच् कुर्वन्तु ।उभयोः लाभं गृहीत्वाकार्यान्वयनार्थं प्रबन्धनार्थं च तुल्यकालिकरूपेण जटिलम्

3. Bin Log विन्यस्तं प्रबन्धयन्तु च

3.1 Bin Log सक्षमं कुर्वन्तु

mysql> show variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
6 rows in set, 1 warning (0.00 sec)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Bin Log सक्षमीकरणाय, भवद्भिः MySQL विन्याससञ्चिकां विन्यस्तुं आवश्यकम् (प्रायःmy.cnfवाmy.ini) तथा निम्नलिखितविन्यासं कुर्वन्तु : १.

[mysqld]
log-bin=mysql-bin
server-id=1
  • 1
  • 2
  • 3

विन्यासं परिवर्तयित्वा mysql पुनः आरभत ।हेतिSHOW VARIABLES LIKE 'log_bin'; Value मूल्यं ON अस्ति ।

mysql> show variables like "%log_bin%";
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***

+---------------------------------+--------------------------------------------------------------------------+
| Variable_name                   | Value                                                                    |
+---------------------------------+--------------------------------------------------------------------------+
| log_bin                         | ON                                                                       |
| log_bin_basename                | C:UsershiszmMySQL5.7.26databinlog       |
| log_bin_index                   | C:UsershiszmMySQL5.7.26databinlog.index |
| log_bin_trust_function_creators | OFF                                                                      |
| log_bin_use_v1_row_events       | OFF                                                                      |
| sql_log_bin                     | ON                                                                       |
+---------------------------------+--------------------------------------------------------------------------+
6 rows in set, 1 warning (0.01 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3.2 Bin Log पैरामीटर्स् विन्यस्तं कुर्वन्तु

सामान्यं Bin Log विन्यासमापदण्डेषु अन्तर्भवति:

  • log_bin: Bin Log सक्षमं कुर्वन्तु।
  • server_id: सर्वर अद्वितीयपरिचयः, प्रतिकृतिकृते उपयुज्यते ।
  • binlog_format: Bin Log (STATEMENT, ROW, MIXED) इत्यस्य प्रारूपं सेट् कुर्वन्तु ।
  • expire_logs_days: Bin Log सञ्चिकानां स्वचालितसमाप्तेः विलोपनस्य च दिवससङ्ख्यां सेट् कुर्वन्तु ।
  • max_binlog_size: एकस्य Bin Log सञ्चिकायाः ​​अधिकतमं आकारं सेट् कुर्वन्तु ।

3.3 Bin Log सञ्चिकानां प्रबन्धनं कुर्वन्तु

Bin Log सञ्चिकानां प्रबन्धनार्थं सामान्याः आदेशाः :

  • Bin Log सञ्चिकासूचीं पश्यन्तु

    SHOW BINARY LOGS;
    
    • 1
  • Bin Log सञ्चिकायाः ​​आकारं पश्यन्तु

    SHOW MASTER STATUS;
    
    • 1
  • पुरातन Bin Log सञ्चिकाः विलोपयन्तु

    PURGE BINARY LOGS TO 'mysql-bin.000010';
    
    • 1

    वा:

    PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
    
    • 1

3.4 Bin Log सामग्रीं पश्यन्तु


-- 创建一个名为 'simple_table' 的表
CREATE TABLE `simple_table` (
  `item_id` int(11) NOT NULL,  -- 项目编号
  `value` int(11) DEFAULT NULL,  -- 值
  `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  -- 最后更新时间
  PRIMARY KEY (`item_id`),  -- 设置项目编号为主键
  KEY `value_index` (`value`),  -- 为值字段创建索引
  KEY `update_time_index` (`last_updated`)  -- 为最后更新时间字段创建索引
) ENGINE=InnoDB;  -- 使用InnoDB存储引擎

-- 插入数据,将日期设置为当前日期
insert into `simple_table` values(1, 1, '2024-07-07');
insert into `simple_table` values(2, 2, '2024-07-07');
insert into `simple_table` values(3, 3, '2024-07-07');
insert into `simple_table` values(4, 4, '2024-07-07');
insert into `simple_table` values(5, 5, '2024-07-07');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Bin Log इत्यस्य सामग्रीं द्रष्टुं mysqlbinlog साधनस्य उपयोगं कुर्वन्तु:

mysql> show binary logs;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    4
Current database: *** NONE ***

+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |      2411 |
+---------------+-----------+
1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

यदि भवन्तः प्रत्यक्षतया उद्घाटयन्ति तर्हि तत् विकृतं भविष्यति।

mysql> show binlog events in 'binlog.000001' from 0 limit 0,4G;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    6
Current database: *** NONE ***

*************************** 1. row ***************************
   Log_name: binlog.000001
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 123
       Info: Server ver: 5.7.26-log, Binlog ver: 4
*************************** 2. row ***************************
   Log_name: binlog.000001
        Pos: 123
 Event_type: Previous_gtids
  Server_id: 1
End_log_pos: 154
       Info:
*************************** 3. row ***************************
   Log_name: binlog.000001
        Pos: 154
 Event_type: Anonymous_Gtid
  Server_id: 1
End_log_pos: 219
       Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************
   Log_name: binlog.000001
        Pos: 219
 Event_type: Query
  Server_id: 1
End_log_pos: 765
       Info: use `d`; -- 创建一个名为 'simple_table' 的表
CREATE TABLE `simple_table` (
  `item_id` int(11) NOT NULL,  -- 项目编号
  `value` int(11) DEFAULT NULL,  -- 值
  `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  -- 最后更新时间
  PRIMARY KEY (`item_id`),  -- 设置项目编号为主键
  KEY `value_index` (`value`),  -- 为值字段创建索引
  KEY `update_time_index` (`last_updated`)  -- 为最后更新时间字段创建索引
) ENGINE=InnoDB
4 rows in set (0.01 sec)

ERROR:
No query specified

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

3.5 mysqlbinlog साधनस्य उपयोगः

mysqlbinlog इति आदेशपङ्क्तिसाधनं Bin Log सञ्चिकानां विश्लेषणार्थं उपयुज्यते । सामान्यविकल्पाः सन्ति- १.

  • --start-datetime: यदा पार्सिंग् आरभ्यते तदा समयं निर्दिशन्तु।
  • --stop-datetime: यदा पार्सिंग् समाप्तं भवति तदा समयं निर्दिशन्तु।
  • --start-position: यत्र पार्सिंग् आरभ्यते तत्र स्थानं निर्दिशन्तु ।
  • --stop-position: यत्र पार्सिंग् समाप्तं भवति तत् स्थानं निर्दिशन्तु ।

यथा, विशिष्टसमयावधिपर्यन्तं Bin Log द्रष्टुं :

mysqlbinlog --start-datetime="2024-07-01 00:00:00" --stop-datetime="2024-07-01 12:00:00" binlog.000001
  • 1

३.६ Bin Log इत्यस्य पार्सिंग् पुनः प्ले करणं च

Bin Log घटनाः आँकडापुनर्प्राप्त्यर्थं MySQL सर्वरे पुनः प्ले कर्तुं शक्यन्ते:

mysqlbin logbinlog.000001 | mysql -u root -p
  • 1

4. प्रतिकृतिषु Bin Log इत्यस्य अनुप्रयोगः

४.१ स्वामी-दासप्रतिकृतिसिद्धान्तः

MySQL master-slave replication इत्यस्य मूलभूतः सिद्धान्तः अस्ति यत् master database Bin Log इति अभिलेखयति, तथा च slave database इत्यनेन data synchronization प्राप्तुं एतान् logs पठति पुनः प्ले च क्रियते विशिष्टानि पदानि निम्नलिखितरूपेण सन्ति ।

  1. मुख्यपुस्तकालयः लेखनक्रियाः करोति तथा च एतानि कार्याणि Bin Log इत्यत्र अभिलेखयति ।
  2. दासपुस्तकालयः मुख्यपुस्तकालयेन सह सम्बद्धः भवति, Bin Log पठति, स्वस्य दत्तांशेषु च प्रयोजयति ।

4.2 master-slave प्रतिकृतिं विन्यस्यताम्

  1. मुख्यपुस्तकालयं विन्यस्यताम्

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    
    • 1
    • 2
    • 3
  2. दासपुस्तकालयं विन्यस्यताम्

    [mysqld]
    server-id=2
    relay-log=relay-bin
    
    • 1
    • 2
    • 3
  3. प्राथमिकदत्तांशकोशे प्रतिकृतिप्रयोक्तारं रचयन्तु

    CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
    
    • 1
    • 2
  4. दासदत्तांशकोशे प्रतिकृतिं विन्यस्यताम्

    CHANGE MASTER TO
        MASTER_HOST='主库IP',
        MASTER_USER='replica',
        MASTER_PASSWORD='password',
        MASTER_LOG_FILE='binlog.000001',
        MASTER_LOG_POS=0;
    START SLAVE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  5. प्रतिकृतिस्थितिं पश्यन्तु

    SHOW SLAVE STATUSG
    
    • 1

४.३ प्रतिकृतिनिरीक्षणं प्रबन्धनं च

प्रतिकृतिस्थितिः निम्नलिखित-आदेशेन निरीक्षितुं शक्यते ।

SHOW SLAVE STATUSG
  • 1

सामान्यस्थितिक्षेत्रव्याख्यानानि : १.

  • Slave_IO_Running: IO सूत्रस्य स्थितिः।
  • Slave_SQL_Running:SQL धागा स्थितिः।
  • Seconds_Behind_Master: दासपुस्तकालयः यदा मुख्यपुस्तकालयात् पृष्ठतः भवति।

४.४ वृद्धिशीलः बैकअपः

इन्क्रीमेण्टल् बैकअप इत्यस्य अर्थः अस्ति यत् अन्तिमस्य पूर्ण बैकअप अथवा अन्तिम इन्क्रीमेण्टल् बैकअप इत्यस्मात् सर्वेषां परिवर्तनानां बैकअप करणम् । Bin Log इत्यस्य उपयोगेन वृद्धिशीलं बैकअपं प्राप्तुं शक्यते ।

  1. पूर्णं बैकअपं कुर्वन्तु

    mysqldump --all-databases --master-data=2 > full_backup.sql
    
    • 1
  2. वर्तमान Bin Log स्थानं अभिलेखयन्तु

    पूर्णे बैकअप सञ्चिकायां निम्नलिखितपङ्क्तयः अन्वेष्टुम् ।

    -- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=12345;
    
    • 1
  3. बैकअप बिन लॉग

    mysqlbinlog --start-position=12345 binlog.000001 > incremental_backup.sql
    
    • 1

४.५ बिन् लॉग-आधारितं पुनर्प्राप्तिः

  1. पूर्णं बैकअपं पुनःस्थापयन्तु

    mysql < full_backup.sql
    
    • 1
  2. वृद्धिशीलं बैकअपं प्रयोजयन्तु

    mysql < incremental_backup.sql
    
    • 1

5. अन्ते लिखत

MySQL Bin Log इदं एकं शक्तिशाली साधनं यत् दत्तांशपुनर्प्राप्तिः, प्रतिकृतिः, लेखापरीक्षा च इत्यादिषु परिदृश्येषु व्यापकरूपेण उपयुज्यते ।सम्यक् विन्यस्तं कृत्वा उपयोगेन चBin Log , यत् MySQL-दत्तांशकोशस्य विश्वसनीयतां उपलब्धतां च बहुधा सुधारयितुं शक्नोति । व्यावहारिक-अनुप्रयोगेषु, आँकडाधार-प्रशासकानाम् विकासकानां च कृते Bin Log इत्यस्य उपयोग-कौशलं अनुकूलन-विधिषु च निपुणतां प्राप्तुं महत्त्वपूर्णम् अस्ति ।