binlog

μ΄μ§„λ‘œκ·Έ(binlog)

  • MySQL λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터 μΆ”μΆœ

    • SQL을 μ‚¬μš©ν•œ 전체 λ˜λŠ” 증뢄 μΆ”μΆœ

    • 이진 둜그(binlog) 볡제 (슀트리밍 데이터 μˆ˜μ§‘μ„ μˆ˜ν–‰ν•˜λŠ” ν•˜λ‚˜μ˜ 경둜)

    • SQL을 μ‚¬μš©ν•œ 전체 λ˜λŠ” 증뢄 μΆ”μΆœμ€ κ΅¬ν˜„ν•˜κΈ°κ°€ 훨씬 κ°„λ‹¨ν•˜μ§€λ§Œ 자주 λ³€κ²½λ˜λŠ” λŒ€κ·œλͺ¨ λ°μ΄ν„°μ„ΈνŠΈμ—μ„œλŠ” ν™•μž₯성이 λ–¨μ–΄μ§‘λ‹ˆλ‹€.

    • 전체 μΆ”μΆœκ³Ό 증뢄 μΆ”μΆœ 사이에도 νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μžˆμŠ΅λ‹ˆλ‹€.

    • 이진 둜그 λ³΅μ œλŠ” κ΅¬ν˜„μ΄ 더 λ³΅μž‘ν•˜μ§€λ§Œ 원본 ν…Œμ΄λΈ”μ˜ λ³€κ²½λ˜λŠ” 데이터 λ³Όλ₯¨μ΄ ν¬κ±°λ‚˜ MySQL μ†ŒμŠ€μ—μ„œ 데이터λ₯Ό 더 자주 μˆ˜μ§‘ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— 더 μ ν•©ν•©λ‹ˆλ‹€.

  • 전체 λ˜λŠ” 증뢄 MySQL ν…Œμ΄λΈ” μΆ”μΆœ

    • 증뢄 μΆ”μΆœμ΄ 졜적의 μ„±λŠ₯에 μ΄μƒμ μ΄μ§€λ§Œ μ–΄λ–€ ν…Œμ΄λΈ”μ— λŒ€ν•΄μ„œλŠ” κ°€λŠ₯ν•˜μ§€ μ•Šμ„ 수 μžˆλŠ” λͺ‡ κ°€μ§€ 단점과 μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€.

      • μ‚­μ œλœ 행은 μΊ‘μ³λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

      • 원본 ν…Œμ΄λΈ”μ—λŠ” λ§ˆμ§€λ§‰μœΌλ‘œ μ—…λ°μ΄νŠΈλœ μ‹œκ°„μ— λŒ€ν•œ μ‹ λ’°ν•  수 μžˆλŠ” νƒ€μž„μŠ€νƒ¬ν”„κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • MySQL λ°μ΄ν„°μ˜ 이진 둜그 볡제

    • image

      • https://www.oreilly.com/library/view/mysql-high-availability/9781449341107/ch04.html

    • 이진 λ‘œκ·ΈλŠ” CDC(λ³€κ²½ 데이터 캑처)의 ν•œ ν˜•νƒœλ‘œ λŒ€λΆ€λΆ„μ˜ 원본 데이터 μ €μž₯μ†Œμ—λŠ” μ‚¬μš©ν•  수 μžˆλŠ” CDC ν˜•μ‹μ΄ μžˆμŠ΅λ‹ˆλ‹€.

    • MySQL 이진 λ‘œκ·ΈλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μˆ˜ν–‰λœ λͺ¨λ“  μž‘μ—…μ— λŒ€ν•œ 기둝을 λ³΄κ΄€ν•˜λŠ” 둜그

      • κ΅¬μ„±λœ 방식에 따라 λͺ¨λ“  ν…Œμ΄λΈ”μ˜ 생성 λ˜λŠ” μˆ˜μ • μ‚¬ν•­λΏλ§Œ μ•„λ‹ˆλΌ λͺ¨λ“  INSERT, UPDATE 및 DELETE μž‘μ—…λ„ κΈ°λ‘λ©λ‹ˆλ‹€.

      • 이진 둜그의 μ›λž˜ λͺ©μ μ€ λ‹€λ₯Έ MySQL μΈμŠ€ν„΄μŠ€λ‘œ 데이터λ₯Ό λ³΅μ œν•˜κΈ° μœ„ν•œ κ²ƒμ΄μ§€λ§Œ, 이진 둜그의 λ‚΄μš©μ€ 데이터 μ›¨μ–΄ν•˜μš°μŠ€λ‘œ 데이터λ₯Ό μˆ˜μ§‘ν•˜λ €λŠ” 데이터 μ—”μ§€λ‹ˆμ–΄μ—κ²Œ 맀우 λ§€λ ₯μ μž…λ‹ˆλ‹€.

      • SELECT variable_value as bin_log_status
        FROM performance_schema.global_variables
        WHERE variable_name='log_bin';
    • 이진 λ‘œκΉ… ν˜•μ‹

      • STATEMENT : 이진 λ‘œκ·Έμ— 행을 μ‚½μž…ν•˜κ±°λ‚˜ μˆ˜μ •ν•˜λŠ” 행동듀에 λŒ€ν•΄ SQL λ¬Έ 자체λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€. ν•˜λ‚˜μ˜ MySQL λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ‹€λ₯Έ MySQL λ°μ΄ν„°λ² μ΄μŠ€λ‘œ 데이터λ₯Ό λ³΅μ œν•˜λ €λŠ” 경우 이 ν˜•μ‹μ΄ μœ μš©ν•©λ‹ˆλ‹€.

      • ROW : 주둜 μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ ν˜•μ‹μœΌλ‘œ ν…Œμ΄λΈ”μ˜ 행에 λŒ€ν•œ λͺ¨λ“  λ³€κ²½ 사항이 SQL문이 μ•„λ‹ˆλΌ ν–‰ 자체의 λ°μ΄ν„°λ‘œ 이진 둜그 행에 ν‘œμ‹œλ©λ‹ˆλ‹€.

      • MIXED : 이진 λ‘œκ·Έμ— STATE ν˜•μ‹ λ ˆμ½”λ“œμ™€ ROW ν˜•μ‹ λ ˆμ½”λ“œλ₯Ό λͺ¨λ‘ κΈ°λ‘ν•©λ‹ˆλ‹€. λ‚˜μ€‘μ— ROW λ°μ΄ν„°λ§Œ κ±ΈλŸ¬λ‚Ό μˆ˜λ„ μžˆμ§€λ§Œ, 이진 둜그λ₯Ό λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•œ κ²°κ΅­ λ””μŠ€ν¬ 곡간을 μΆ”κ°€λ‘œ μ‚¬μš©ν•˜κ²Œ 되기 λ•Œλ¬Έμ— MIXEDλ₯Ό ν™œμ„±ν™”ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

      • SELECT variable_value as bin_log_format
        FROM performance_schema.global_variables
        WHERE variable_name = 'binlog_format
    • 이진 λ‘œκ·Έμ—μ„œ κ°€μ Έμ˜¬ ROW ν˜•μ‹ 이벀트의 3κ°€μ§€ μœ ν˜•

      • WRITE_ROWS_EVENT

      • UPDATE_ROWS_EVENT

      • DELETE_ROWS_EVENT

  • μΉ΄ν”„μΉ΄ 및 Debezium을 ν†΅ν•œ 슀트리밍 데이터 μˆ˜μ§‘

    • image

      • https://debezium.io/documentation/reference/stable/architecture.html

    • MySQL 이진 둜그 λ˜λŠ” Postgres WALs와 같은 CDC μ‹œμŠ€ν…œμ„ 톡해 데이터λ₯Ό μˆ˜μ§‘ν•  경우, ν›Œλ₯­ν•œ ν”„λ ˆμž„μ›Œν¬μ˜ 도움이 κΌ­ ν•„μš”ν•©λ‹ˆλ‹€.

    • Debezium은 μ—¬λŸ¬ μ˜€ν”ˆμ†ŒμŠ€ μ„œλΉ„μŠ€λ‘œ κ΅¬μ„±λœ λΆ„μ‚° μ‹œμŠ€ν…œμœΌλ‘œ 일반적인 CDC μ‹œμŠ€ν…œμ—μ„œ ν–‰μˆ˜μ€€ 변경을 μΊ‘μ²˜ν•œ ν›„ λ‹€λ₯Έ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 이벀트둜 슀트리밍 ν•΄μ£ΌλŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

      • μ•„νŒŒμΉ˜ 주킀퍼 : λΆ„μ‚° ν™˜κ²½μ„ κ΄€λ¦¬ν•˜κ³  각 μ„œλΉ„μŠ€μ˜ ꡬ성을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

      • μ•„νŒŒμΉ˜ μΉ΄ν”„μΉ΄ : ν™•μž₯성이 λ›°μ–΄λ‚œ 데이터 νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν•˜λŠ” 데 일반적으둜 μ‚¬μš©λ˜λŠ” λΆ„μ‚° 슀트리밍 ν”Œλž«νΌ

      • μ•„νŒŒμΉ˜ μΉ΄ν”„μΉ΄ 컀λ„₯트

        • 데이터λ₯Ό μΉ΄ν”„μΉ΄λ₯Ό 톡해 μ‰½κ²Œ 슀트리밍 ν•  수 μžˆλ„λ‘ μΉ΄ν”„μΉ΄λ₯Ό λ‹€λ₯Έ μ‹œμŠ€ν…œκ³Ό μ—°κ²°ν•˜λŠ” λ„κ΅¬λ‘œ 컀λ„₯ν„°λŠ” MySQL 및 Postgres와 같은 μ‹œμŠ€ν…œμš©μœΌλ‘œ κ΅¬μΆ•λ˜μ—ˆμœΌλ©° CDC μ‹œμŠ€ν…œ(이진 둜그 및 WAL)의 데이터λ₯Ό μΉ΄ν”„μΉ΄ ν† ν”½μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

        • μΉ΄ν”„μΉ΄ ν΄λŸ¬μŠ€ν„°λ₯Ό 톡해 데이터 베이슀, ν•˜λ‘‘ HDFS, 검색 같은 μ™ΈλΆ€ μ‹œμŠ€ν…œ 및 파일 μ‹œμŠ€ν…œμ— μ—°κ²°ν•˜κ³  데이터λ₯Ό κ°€μ Έμ˜€λŠ”/λ‚΄λ³΄λ‚΄λŠ” ν”„λ ˆμž„μ›Œν¬λ₯Ό 제곡

        • 컀λ„₯ν„°(Connector) : 데이터 베이슀, ν‚€-κ°’ μ €μž₯μ†Œ, 검색 μ—”μ§„, 파일 μ‹œμŠ€ν…œμ— λŒ€ν•œ μ—°κ²° μΈν„°νŽ˜μ΄μŠ€

    • μΉ΄ν”„μΉ΄λŠ” ν† ν”½λ³„λ‘œ μ •λ¦¬λœ λ©”μ‹œμ§€λ₯Ό κ΅ν™˜ν•˜λ©° ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ€ 토픽에 κ²Œμ‹œ(publish)ν•  수 μžˆλŠ” 반면, ν•˜λ‚˜ μ΄μƒμ˜ μ‹œμŠ€ν…œμ€ 토픽을 μ†ŒλΉ„(consume)ν•˜κ±°λ‚˜ ꡬ독(subscribe)ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • Debezium 컀λ„₯ν„°

      • MongoDB

      • MySQL

      • PostgreSQL

      • Microsoft SQL Server

      • Oracle

      • Db2

      • Cassandra

Reference

  • https://www.oreilly.com/library/view/the-self-service-data/9781492075240/

  • https://www.oreilly.com/library/view/data-pipelines-pocket/9781492087823/

  • https://netflixtechblog.com/dblog-a-generic-change-data-capture-framework-69351fb9099b

Last updated