MySQL binlog설정

brody·2020년 8월 27일
0
  • mysql binlog설정위치

    server-id={서버아이디} 마스터와 슬레이브의 서버는 달라야함
    log-bin={빈로그 쌓이는 곳}
    binlog_format = ROW {유형} //STATEMENT, ROW, MIXED
    max_binlog_size = 1G {롤링할 크기}
    expire_logs_days = 2 {보관 기간}
    relay_log={슬레이브의 로그가 쌓이는 곳}
    • binlog_format

      이 옵션을 사용해서 디폴트 포맷을 지정하면, 모든 리플리케이션 슬레이브는 이벤트를 지정 포맷으로 읽게 된다.
      ROW — 열 기반 리플리케이션을 디폴트로 설정한다.
      STATEMENT — 명령문 기반 리플리케이션을 디폴트로 설정한다.
      MIXED — 혼합 기반 리플리케이션을 디폴트로 설정한다.
  • binlog 읽기 위한 권한

    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO  {ID}@'{IP}'  IDENTIFIED BY '{PWD}';

    GRANT REPLICATION SLAVE : Enable the user to ask where master or slave servers are
    REPLICATION CLIENT : Enable replication slaves to read binary log events from the master

  • binlog 파일 읽기

    • 파일 원문으로 떨구기
     mysqlbinlog /{경로}/mysql-bin.000004 > binlog.sql
  • binlog 특정 날짜 원문으로 보기

    mysqlbinlog --verbose --database=DB이름 --start-datetime="{시작시간}" --stop-datetime="{종료시간}" "{binlog경로}" > binlog.sql
    
    ex)./mysqlbinlog --verbose --database=iofficemetadb --start-datetime="2020-08-20 18:00:00" --stop-datetime="2020-08-20 20:00:00" "/mysqldata/3406/log/blog/mysql-bin.002185" >/home/ioffice/temp/binlog.sql
    
    /home/ioffice/temp
    
  • 특정 포지션을 원문으로 보기

    mysqlbinlog --verbose --database=testdb --start-position=1 --stop-position=100000 {binlog경로} > binlog.sql
  • 로컬에 mysql설치 후 빈로그 파일

    #window local test
    mysqlbinlog.exe -v --base64-output=DECODE-ROWS --stop-never --read-from-remote-server --user=root --password=root binlog.000003
    
    mysqlbinlog: Error writing file '' (Errcode: 2 - No such file or directory)
    
    #보니깐 해당 로그를 파일로 써야되나보다 그냥 나는 cmd창에서 계속 보고싶던건데...
    mysqlbinlog.exe -v --base64-output=DECODE-ROWS --stop-never --read-from-remote-server --user=root --password=root binlog.000005 > ./binlog000005.txt
    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
    SET @@SESSION.GTID_NEXT= '273990e1-e37e-11ea-9449-988389a1841d:13'/*!*/;
    # at 1718
    #200826 17:52:36 server id 1  end_log_pos 1803 CRC32 0x55fae6e5 	Query	thread_id=3	exec_time=0	error_code=0
    SET TIMESTAMP=1598431956/*!*/;
    BEGIN
    /*!*/;
    # at 5308
    #200827 13:02:44 server id 1  end_log_pos 5545 CRC32 0x8ab098af 	Table_map: `{db명}`.`{테이블명}` mapped to number 113
    # at 5545
    #200827 13:02:44 server id 1  end_log_pos 6614 CRC32 0x1b7d9757 	Update_rows: table id 113 flags: STMT_END_F
    ### UPDATE `iofficeefss0001`.`tb_file_f`
    ### WHERE
    ###   @1=133900000002300000
    ###   @2='181128_1339-배치테스트용_변경금지 - 01-(물리없음)-133900000002300000'
    ###   @3='TXT'
    ###   @4='대용량 테스트용 파일'
    ###   @5='111'
    ###   @6='001'
    ###   @7=1540660923
    ###   @8=147999346801600097
    ###   @9=NULL
    ###   @10=NULL
    ###   @11=1545941252
    ###   @12=NULL
    ###   @13=1111
    ###   @14=10
    ###   @15=147999346801600097
    ###   @16=1535390523
    ###   @17=1
    ###   @18=133900000002300110
    ###   @19=NULL
    ###   @20=NULL
    ###   @21='181128_1339-배치테스트용_변경금지 - 01-(물리없음)-133900000002300000'
    ###   @22=133900000000100000
    ###   @23=154337031460200427
    ###   @24='015'
    ###   @25=147927667597500027
    ###   @26='1132000000'
    ###   @27='Y'
    ###   @28='050'
    ###   @29=1556385723
    ###   @30='N'
    ###   @31='N'
    ###   @32='TAG,INFO,VAL'
    ###   @33=NULL
    ###   @34='EDTDEL'
    ###   @35=NULL
    ###   @36=NULL
    ###   @37=154337033663200430
    ###   @38='015'
    ###   @39=133900000000100000
    ###   @40=154597309410300287
    ###   @41=123456789012345670
    ###   @42=147927667597500027
    ###   @43=NULL
    ###   @44=NULL
    ###   @45=NULL
    ###   @46=NULL
    ###   @47='1132000000'
    ###   @48='050'
    ###   @49=1556385723
    ###   @50=NULL
    ###   @51=NULL
    ###   @52='W0'
    ###   @53='9'
    ###   @54='Y'
    ###   @55='0123456789'
    ###   @56='N'
    ###   @57='DOCT_NO'
    ###   @58='N'
    ###   @59='REG_DSTCT'
    ###   @60='TAG,INFO,VAL'
    ###   @61=NULL
    ###   @62=NULL
    ###   @63=NULL
    ###   @64='EDTDEL'
    ###   @65='PRSRV_RSN_CONTENT'
    ###   @66='IF_TGT_SYS'
    ###   @67=NULL
    ###   @68=NULL
    ###   @69='EFDSC10'
    ###   @70='Y'
    ###   @71=1543339323
    ###   @72=147999346801600097
    ###   @73=1545941252
    ###   @74=147999356147300023
    ### SET
    ###   @1=133900000002300000
    ###   @2='ioffice'
    ###   @3='TXT'
    ###   @4='대용량 테스트용 파일'
    ###   @5='111'
    ###   @6='001'
    ###   @7=1540660923
    ###   @8=147999346801600097
    ###   @9=NULL
    ###   @10=NULL
    ###   @11=1598500964
    ###   @12=NULL
    ###   @13=1111
    ###   @14=10
    ###   @15=147999346801600097
    ###   @16=1535390523
    ###   @17=1
    ###   @18=133900000002300110
    ###   @19=NULL
    ###   @20=NULL
    ###   @21='181128_1339-배치테스트용_변경금지 - 01-(물리없음)-133900000002300000'
    ###   @22=133900000000100000
    ###   @23=154337031460200427
    ###   @24='015'
    ###   @25=147927667597500027
    ###   @26='1132000000'
    ###   @27='Y'
    ###   @28='050'
    ###   @29=1556385723
    ###   @30='N'
    ###   @31='N'
    ###   @32='TAG,INFO,VAL'
    ###   @33=NULL
    ###   @34='EDTDEL'
    ###   @35=NULL
    ###   @36=NULL
    ###   @37=154337033663200430
    ###   @38='015'
    ###   @39=133900000000100000
    ###   @40=154597309410300287
    ###   @41=123456789012345670
    ###   @42=147927667597500027
    ###   @43=NULL
    ###   @44=NULL
    ###   @45=NULL
    ###   @46=NULL
    ###   @47='1132000000'
    ###   @48='050'
    ###   @49=1556385723
    ###   @50=NULL
    ###   @51=NULL
    ###   @52='W0'
    ###   @53='9'
    ###   @54='Y'
    ###   @55='0123456789'
    ###   @56='N'
    ###   @57='DOCT_NO'
    ###   @58='N'
    ###   @59='REG_DSTCT'
    ###   @60='TAG,INFO,VAL'
    ###   @61=NULL
    ###   @62=NULL
    ###   @63=NULL
    ###   @64='EDTDEL'
    ###   @65='PRSRV_RSN_CONTENT'
    ###   @66='IF_TGT_SYS'
    ###   @67=NULL
    ###   @68=NULL
    ###   @69='EFDSC10'
    ###   @70='Y'
    ###   @71=1543339323
    ###   @72=147999346801600097
    ###   @73=1598500964
    ###   @74=147999356147300023
    # at 6614
    #200827 13:02:44 server id 1  end_log_pos 6645 CRC32 0x4b5d9a7a 	Xid = 833
    COMMIT/*!*/;
    SET @@SESSION.GTID_NEXT= '273990e1-e37e-11ea-9449-988389a1841d:13'/*!*/;

    gtid_mode의 설정이 'ON'일때만 위 GTID가 찍힘

  • MASTER의 빈로그 파일과 최종 Position

    SHOW MASTER STATUS;
    	{
    			"File": "binlog.000009",
    			"Position": 5800,
    			"Binlog_Do_DB": "",
    			"Binlog_Ignore_DB": "",
    			"Executed_Gtid_Set": "273990e1-e37e-11ea-9449-988389a1841d:1-43"
    		}
  • 이벤트 쿼리로 보기

    SHOW BINLOG EVENTS 
    IN 'binlog.000009' 
    FROM 4873 LIMIT 10;

    FROM값이 정확히 BINLOG EVENTS의 Pos와 맞지 않으면 조회되지 않는다.

    아래와같이 SHOW MASTER STATUS에서 조회한 Position의 값이 최종 End_log_pos인 것을 알 수 있다.

{
			"Log_name": "binlog.000009", #빈로그 파일명
			"Pos": 4873, # 시작 위치
			"Event_type": "Anonymous_Gtid",#이벤트 타입
			"Server_id": 1, 
			"End_log_pos": 4938, # 끝나는 위치
			"Info": "SET @@SESSION.GTID_NEXT= 'ANONYMOUS'" # 빈로그에 at {Pos} 다음에 오는 end위치 다음 정보 한단어

		},
# at 4873
#200831 18:30:30 server id 1  end_log_pos 4938 CRC32 0xc0d6daa3 	Anonymous_GTID	last_committed=5	sequence_number=6	rbr_only=yes
{
	"table": "LIMIT",
	"rows":
	[
		{
			"Log_name": "binlog.000009",
			"Pos": 4873,
			"Event_type": "Anonymous_Gtid",
			"Server_id": 1,
			"End_log_pos": 4938,
			"Info": "SET @@SESSION.GTID_NEXT= 'ANONYMOUS'"
		},
		{
			"Log_name": "binlog.000009",
			"Pos": 4938,
			"Event_type": "Query",
			"Server_id": 1,
			"End_log_pos": 5023,
			"Info": "BEGIN"
		},
		{
			"Log_name": "binlog.000009",
			"Pos": 5023,
			"Event_type": "Table_map",
			"Server_id": 1,
			"End_log_pos": 5260,
			"Info": "table_id: 108 (iofficeefss0002.tb_file_f)"
		},
		{
			"Log_name": "binlog.000009",
			"Pos": 5260,
			"Event_type": "Update_rows",
			"Server_id": 1,
			"End_log_pos": 5769,
			"Info": "table_id: 108 flags: STMT_END_F"
		},
		{
			"Log_name": "binlog.000009",
			"Pos": 5769,
			"Event_type": "Xid",
			"Server_id": 1,
			"End_log_pos": 5800,
			"Info": "COMMIT /* xid=302 */"
		}
	]
}
profile
일하며 하는 기록

0개의 댓글