4.6.8.3 바이너리 로그 파일의 백업을위한 mysqlbinlog 사용
기본적으로 mysqlbinlog 바이너리 로그 파일을 읽고 그 내용을 텍스트 형식으로 표시합니다. 이렇게하면 파일의 이벤트가 조사 쉬워 (예를 들어 출력을 mysql의 입력으로 사용하여) 그들을 다시 실행할 수 있습니다. mysqlbinlog은 로컬 파일 시스템에서 직접 로그 파일을 읽거나 --read-from-remote-server
옵션에서 서버에 연결하여 해당 서버에서 바이너리 로그의 내용을 요청할 수 있습니다. mysqlbinlog은 텍스트 출력을 표준 출력 또는 --result-file=
옵션이 지정된 경우 그 값으로 지명 된 파일로 내보낼 수 있습니다. file_name
MySQL 5.6에서는 mysqlbinlog 바이너리 로그 파일을 읽고, 같은 내용, 즉 텍스트 형식이 아닌 바이너리 형식의 내용을 포함하는 새로운 파일로 내보낼 수 있습니다. 이 기능은 바이너리 로그를 쉽게 원래의 형식으로 백업 할 수 있습니다. mysqlbinlog는 로그 파일 세트의 백업을 실행하고 마지막 파일의 끝에 도달했을 때 정지하여 정적 백업을 만들 수 있습니다. 또한 마지막 로그 파일의 끝에 도달했을 때 서버와의 연결을 유지하고 새로운 이벤트가 생성 될 때마다 복사본을 계속하여 지속적인 ( "라이브") 백업을 만들 수 있습니다 . 지속적인 백업 작업은 mysqlbinlog는 연결이 끝날 때까지 (예를 들어 서버가 종료 할 때 등) 또는 mysqlbinlog가 강제로 종료 될 때까지 실행됩니다. 연결이 종료 될 때 슬레이브 복제 서버와는 달리, mysqlbinlog은 대기하고 다시 연결을 시도하지 않습니다. 서버 재부팅 후 라이브 백업을 계속하려면 mysqlbinlog도 다시 시작해야합니다.
바이너리 로그 백업은 mysqlbinlog를 적어도 두 가지 옵션을 사용하여 시작해야합니다.
--read-from-remote-server
(또는-R
) 옵션은 mysqlbinlog 서버에 연결하고 바이너리 로그를 요구하도록 지시합니다. (이것은 마스터 서버에 연결하는 슬레이브 복제 서버와 동일합니다.)--raw
옵션은 mysqlbinlog 텍스트 출력이 아닌 원시 (이진) 출력을 내보내도록 지시합니다.
--read-from-remote-server
옵션과 함께 다음 옵션을 지정하는 것이 일반적입니다. --host
는 서버가 실행되는 위치를 표시, --user
및 --password
등의 연결 옵션도 필요할 수 있습니다.
--raw
함께 사용하면 유용한 옵션이 외에도 여러 가지가 있습니다.
--stop-never
: 마지막 로그 파일의 끝에 도달 한 뒤, 서버와의 연결을 유지하고 새로운 이벤트 읽기를 계속합니다.--stop-never-slave-server-id=
:id
--stop-never
가 사용되는 경우 mysqlbinlog가 보고서 서버 ID. 기본값은 65535입니다. 이것은 슬레이브 서버 또는 다른 mysqlbinlog 프로세스의 ID와의 충돌을 피하기 위해 사용할 수 있습니다. 섹션 4.6.8.4 "mysqlbinlog 서버 ID 지정" 을 참조하십시오.--result-file
: 나중에 설명하도록 출력 파일 이름의 접두어.
mysqlbinlog에서 서버의 바이너리 로그 파일을 백업 할 서버에 실제로 존재하는 파일 이름을 지정해야합니다. 이름을 모르는 경우 서버에 연결되어 SHOW BINARY LOGS
문을 사용하여 현재 이름을 표시합니다. 이 명령문 다음 출력이 생성된다고합니다.
mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000130 | 27459 |
| binlog.000131 | 13719 |
| binlog.000132 | 43268 |
+---------------+-----------+
이 정보는 mysqlbinlog를 사용하여 다음과 같이 바이너리 로그를 현재 디렉토리에 백업 할 수 있습니다 (명령은 한 줄에 하나씩 입력합니다).
binlog.000130
에서binlog.000132
까지의 정적 백업하려면 다음 명령 중 하나를 사용합니다.mysqlbinlog --read-from-remote-server --host =
host_name
--raw binlog.000130 binlog.000131 binlog.000132 mysqlbinlog --read-from-remote-server --host =host_name
--raw --to-last-log binlog.000130첫 번째 명령은 모든 파일 이름을 명시 적으로 지정합니다. 두 번째는 첫 번째 파일 만 지명하고
--to-last-log
를 사용하여 끝까지 읽습니다. 이러한 명령의 차이점은 mysqlbinlog가binlog.000132
의 끝에 도달하기 전에 서버가binlog.000133
을 열 때 첫 번째 명령은 그것을 읽기 없지만 두 번째 명령은 읽을 점 입니다.mysqlbinlog가
binlog.000130
에서 기존 로그 파일의 사본을 시작한 후 연결을 유지하여 서버가 새로운 이벤트를 생성하면서 그들을 복사하는 라이브 백업하려면 :mysqlbinlog --read-from-remote-server --host =
host_name
--raw --stop-never binlog.000130--stop-never
를 사용하면--to-last-log
옵션은 암시되어 있기 때문에 마지막 로그 파일까지 읽을 수 있도록이 옵션을 지정할 필요가 없습니다.
출력 파일의 이름
--raw
을 사용하지 않으면 mysqlbinlog은 텍스트 출력을 생성하고 --result-file
옵션이 주어진 경우, 모든 출력이 기록되는 단일 파일의 이름을 지정합니다. --raw
를 사용하면 mysqlbinlog는 서버로부터 전송되는 각 로그 파일에 대해 하나의 바이너리 출력 파일을 내 보냅니다. 기본적으로 mysqlbinlog 파일을 현재 디렉토리에 원래 로그 파일과 동일한 이름으로 내 보냅니다. 출력 파일 이름을 변경하려면 --result-file
옵션을 사용합니다. --raw
도 지정되어있는 경우 --result-file
옵션 값은 출력 파일 이름을 변경하는 접두어로 처리됩니다.
서버에 현재 binlog.000999
이상의 이름의 바이너리 로그 파일이 있다고합니다. mysqlbinlog --raw을 사용하여 파일을 백업하는 경우 --result-file
옵션은 다음 표와 같이 출력 파일 이름을 생성합니다. --result-file
의 값을 디렉토리 경로에서 시작하게하여 파일을 특정 디렉토리로 내보낼 수 있습니다. --result-file
의 값이 디렉토리 이름만으로 구성되는 경우, 그 값은 경로 구분 문자로 끝나지 않으면 안됩니다. 출력 파일이 있으면 덮어 씁니다.
--result-file 옵션 | 출력 파일 이름 |
---|---|
--result-file=x | xbinlog.000999 이상 |
--result-file=/tmp/ | /tmp/binlog.000999 이상 |
--result-file=/tmp/x | /tmp/xbinlog.000999 이상 |
예 : mysqldump와 mysqlbinlog를 맞게 백업 및 복원을 할
다음의 예는 mysqldump와 mysqlbinlog를 함께 사용하여 서버의 데이터와 바이너리 로그를 백업 방법 및 데이터 손실이 발생한 경우 백업을 사용하여 서버에 복원하는 방법을 보여주는 간단한 시나리오를 설명하고 있습니다. 예를 들어, 서버는 호스트 host_name
에서 실행하고 첫 번째 바이너리 로그 파일의 이름은 binlog.000999
하다고합니다. 명령은 한 줄에 하나씩 입력합니다.
mysqlbinlog를 사용하여 바이너리 로그의 백업을 지속적으로 만듭니다.
mysqlbinlog --read-from-remote-server --host = host_name
--raw
--stop-never binlog.000999
mysqldump를 사용하여 서버의 데이터 스냅 샷으로 덤프 파일을 만듭니다. --all-databases
, --events
및 --routines
을 사용하여 모든 데이터를 백업하고 --master-data=2
를 사용하여 현재의 바이너리 로그 좌표를 덤프 파일에 포함됩니다.
mysqldump --host = host_name
--all-databases --events --routines --master-data = 2> dump_file
필요에 따라 mysqldump 명령을 정기적으로 실행하여 새 스냅 샷을 만듭니다.
데이터 손실이 발생한 경우 (예를 들어 서버 충돌 등), 최근의 덤프 파일을 사용하여 데이터를 복원합니다.
mysql --host = host_name
-u 루트 -p < dump_file
다음 바이너리 로그 백업을 사용하여 덤프 파일에 나열되어있는 좌표보다 나중에 기록 된 이벤트를 다시 실행합니다. 파일의 좌표가 다음과 같이되어 있다고합니다.
- CHANGE MASTER TO MASTER_LOG_FILE = 'binlog.001002', MASTER_LOG_POS = 27284;
최근에 백업 된 로그 파일이 binlog.001004
라는 이름의 경우 다음과 같이 로그 이벤트를 다시 실행합니다.
mysqlbinlog --start-position = 27284 binlog.001002 binlog.001003 binlog.001004
| mysql --host = host_name
-u 루트 -p
복원 작업을보다 쉽게 수행하기 위해, 또는 MySQL 원격 root
액세스가 허용되지 않는 경우, 백업 파일 (덤프 파일 및 바이너리 로그 파일)을 서버 호스트에 복사하는 것이 쉬운 경우도 있습니다.