4.6.8.2 mysqlbinlog row 이벤트보기
다음 예는 데이터의 변경을 지정하는 행 이벤트를 mysqlbinlog가 표시하는 방법을 설명하고 있습니다. 이들은 WRITE_ROWS_EVENT
, UPDATE_ROWS_EVENT
및 DELETE_ROWS_EVENT
타입 코드를 가진 이벤트에 대응합니다. --base64-output=DECODE-ROWS
옵션 및 --verbose
옵션을 줄 이벤트 출력에 영향을 미치는 데 사용할 수 있습니다.
서버가 행 기반의 바이너리 로깅을 사용하고 다음 명령문 시퀀스를 실행합니다.
CREATE TABLE t ( id INT NOT NULL, name VARCHAR (20) NOT NULL, date DATE NULL ) ENGINE = InnoDB; START TRANSACTION; INSERT INTO t VALUES (1, 'apple', NULL); UPDATE t SET name = 'pear', date = '2009-01-01'WHERE id = 1; DELETE FROM t WHERE id = 1; COMMIT;
기본적으로 mysqlbinlog 행 이벤트를 BINLOG
문을 사용하여 base-64 문자열로 인코딩하여 표시합니다. 무관 한 행을 생략하면 이전 문 순서에 의해 생성되는 행 이벤트의 출력은 다음과 같이됩니다.
shell> mysqlbinlog log_file
...
# at 218
# 080828 15:03:08 server id 1 end_log_pos 258 Write_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA // 8AQAAAAVhcHBsZQ ==
'/ *! * /;
...
# at 302
# 080828 15:03:08 server id 1 end_log_pos 356 Update_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA //// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/ *! * /;
...
# at 400
# 080828 15:03:08 server id 1 end_log_pos 442 Delete_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA // 4AQAAAARwZWFyIbIP
'/ *! * /;
행 이벤트를 "의사 SQL"문 형식의 주석 표시하려면 mysqlbinlog를 --verbose
옵션 또는 -v
옵션으로 실행합니다. 출력은 ###
로 시작하는 행이 포함됩니다.
shell> mysqlbinlog -v log_file
...
# at 218
# 080828 15:03:08 server id 1 end_log_pos 258 Write_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA // 8AQAAAAVhcHBsZQ ==
'/ *! * /;
### INSERT INTO test.t
### SET
### @ 1 = 1
### @ 2 = 'apple'
### @ 3 = NULL
...
# at 302
# 080828 15:03:08 server id 1 end_log_pos 356 Update_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA //// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/ *! * /;
### UPDATE test.t
### WHERE
### @ 1 = 1
### @ 2 = 'apple'
### @ 3 = NULL
### SET
### @ 1 = 1
### @ 2 = 'pear'
### @ 3 = '2009 : 01 : 01'
...
# at 400
# 080828 15:03:08 server id 1 end_log_pos 442 Delete_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA // 4AQAAAARwZWFyIbIP
'/ *! * /;
### DELETE FROM test.t
### WHERE
### @ 1 = 1
### @ 2 = 'pear'
### @ 3 = '2009 : 01 : 01'
--verbose
또는 -v
를 두 번 지정하면 각 컬럼의 데이터 유형 및 일부 메타 데이터도 표시됩니다. 출력은 각 컬럼의 변경에 따라 추가 의견이 포함됩니다.
shell> mysqlbinlog -vv log_file
...
# at 218
# 080828 15:03:08 server id 1 end_log_pos 258 Write_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA // 8AQAAAAVhcHBsZQ ==
'/ *! * /;
### INSERT INTO test.t
### SET
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 = 'apple'/ * VARSTRING (20) meta = 20 nullable = 0 is_null = 0 * /
### @ 3 = NULL / * VARSTRING (20) meta = 0 nullable = 1 is_null = 1 * /
...
# at 302
# 080828 15:03:08 server id 1 end_log_pos 356 Update_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA //// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/ *! * /;
### UPDATE test.t
### WHERE
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 = 'apple'/ * VARSTRING (20) meta = 20 nullable = 0 is_null = 0 * /
### @ 3 = NULL / * VARSTRING (20) meta = 0 nullable = 1 is_null = 1 * /
### SET
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 = 'pear'/ * VARSTRING (20) meta = 20 nullable = 0 is_null = 0 * /
### @ 3 = '2009 : 01 : 01'/ * DATE meta = 0 nullable = 1 is_null = 0 * /
...
# at 400
# 080828 15:03:08 server id 1 end_log_pos 442 Delete_rows : table id 17 flags : STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA // 4AQAAAARwZWFyIbIP
'/ *! * /;
### DELETE FROM test.t
### WHERE
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 = 'pear'/ * VARSTRING (20) meta = 20 nullable = 0 is_null = 0 * /
### @ 3 = '2009 : 01 : 01'/ * DATE meta = 0 nullable = 1 is_null = 0 * /
--base64-output=DECODE-ROWS
옵션을 사용하여 행 이벤트에 대한 BINLOG
문을 억제하도록 mysqlbinlog에 지시 할 수 있습니다. 이것은 --base64-output=NEVER
과 비슷하지만 행 이벤트가 감지 된 경우 오류로 종료하지 않습니다. --base64-output=DECODE-ROWS
및 --verbose
의 조합으로 줄 이벤트를 SQL 문으로 만 표시하는 편리한 방법을 제공합니다.
shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file
...
# at 218
# 080828 15:03:08 server id 1 end_log_pos 258 Write_rows : table id 17 flags : STMT_END_F
### INSERT INTO test.t
### SET
### @ 1 = 1
### @ 2 = 'apple'
### @ 3 = NULL
...
# at 302
# 080828 15:03:08 server id 1 end_log_pos 356 Update_rows : table id 17 flags : STMT_END_F
### UPDATE test.t
### WHERE
### @ 1 = 1
### @ 2 = 'apple'
### @ 3 = NULL
### SET
### @ 1 = 1
### @ 2 = 'pear'
### @ 3 = '2009 : 01 : 01'
...
# at 400
# 080828 15:03:08 server id 1 end_log_pos 442 Delete_rows : table id 17 flags : STMT_END_F
### DELETE FROM test.t
### WHERE
### @ 1 = 1
### @ 2 = 'pear'
### @ 3 = '2009 : 01 : 01'
mysqlbinlog의 출력을 다시 수행 할 예정이다 경우 BINLOG
문을 억제해야하는 것이 아닙니다.
--verbose
이 줄 이벤트에 의해 생성 된 SQL 문은 해당 BINLOG
문보다 훨씬 쉽게 읽을 수 있습니다. 그러나 이벤트를 생성 한 원래의 SQL 문과 정확히 대응하지 않습니다. 다음 제한 사항이 적용됩니다.
원래 컬럼 이름은 잃어
@
으로 대체됩니다.N
N
은 열 번호입니다.바이너리 로그는 문자 집합 정보를 사용할 수 없습니다. 이것은 문자열 컬럼의 표시에 영향을줍니다.
해당 바이너리 문자열과 비 이진 문자열 사이에 구분하지 않습니다 (
BINARY
와CHAR
,VARBINARY
과VARCHAR
,BLOB
및TEXT
). 출력은 고정 길이 문자열에 대해STRING
가변 길이 문자열에VARSTRING
데이터 형식이 사용됩니다.멀티 바이트 문자 집합은 문자 당 최대 바이트 수는 바이너리 로그에 나타나지 않기 때문에 문자열의 길이는 문자가 아닌 바이트 단위로 표시됩니다. 예를 들어,
STRING(4)
는 다음의 컬럼 형 중 하나의 값의 데이터 형식으로 사용됩니다.CHAR (4) CHARACTER SET latin1 CHAR (2) CHARACTER SET ucs2
UPDATE_ROWS_EVENT
형 이벤트의 스토리지 포맷 때문에UPDATE
문은WHERE
절이SET
절 앞에 표시됩니다.
행 이벤트를 적절히 해석하려면 바이너리 로그의 처음에있는 형식의 계정 정보가 필요합니다. mysqlbinlog는 로그의 나머지 부분에 줄 이벤트가 포함되는지 여부는 미리 알 수 없기 때문에 기본적으로 출력의 첫 부분에 BINLOG
문을 사용하여 형식 설명 이벤트를 표시합니다.
바이너리 로그에 BINLOG
문을 필요로하는 이벤트가 포함되지 않는 것을 알 수있다 (즉 행 이벤트가없는) 경우 --base64-output=NEVER
옵션을 사용하여이 헤더가 기록되는 것을 방지 할 수 합니다.