binlog
μ΄μ§λ‘κ·Έ(binlog)
MySQL λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν° μΆμΆ
SQLμ μ¬μ©ν μ 체 λλ μ¦λΆ μΆμΆ
μ΄μ§ λ‘κ·Έ(binlog) 볡μ (μ€νΈλ¦¬λ° λ°μ΄ν° μμ§μ μννλ νλμ κ²½λ‘)
SQLμ μ¬μ©ν μ 체 λλ μ¦λΆ μΆμΆμ ꡬννκΈ°κ° ν¨μ¬ κ°λ¨νμ§λ§ μμ£Ό λ³κ²½λλ λκ·λͺ¨ λ°μ΄ν°μΈνΈμμλ νμ₯μ±μ΄ λ¨μ΄μ§λλ€.
μ 체 μΆμΆκ³Ό μ¦λΆ μΆμΆ μ¬μ΄μλ νΈλ μ΄λμ€νκ° μμ΅λλ€.
μ΄μ§ λ‘κ·Έ 볡μ λ ꡬνμ΄ λ 볡μ‘νμ§λ§ μλ³Έ ν μ΄λΈμ λ³κ²½λλ λ°μ΄ν° λ³Όλ₯¨μ΄ ν¬κ±°λ MySQL μμ€μμ λ°μ΄ν°λ₯Ό λ μμ£Ό μμ§ν΄μΌ νλ κ²½μ°μ λ μ ν©ν©λλ€.
μ 체 λλ μ¦λΆ MySQL ν μ΄λΈ μΆμΆ
μ¦λΆ μΆμΆμ΄ μ΅μ μ μ±λ₯μ μ΄μμ μ΄μ§λ§ μ΄λ€ ν μ΄λΈμ λν΄μλ κ°λ₯νμ§ μμ μ μλ λͺ κ°μ§ λ¨μ κ³Ό μ΄μ κ° μμ΅λλ€.
μμ λ νμ μΊ‘μ³λμ§ μμ΅λλ€.
μλ³Έ ν μ΄λΈμλ λ§μ§λ§μΌλ‘ μ λ°μ΄νΈλ μκ°μ λν μ λ’°ν μ μλ νμμ€ν¬νκ° μμ΄μΌ ν©λλ€.
MySQL λ°μ΄ν°μ μ΄μ§ λ‘κ·Έ 볡μ
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μ ν΅ν μ€νΈλ¦¬λ° λ°μ΄ν° μμ§
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