>  기사  >  데이터 베이스  >  MySQL 로그를 복원하는 방법

MySQL 로그를 복원하는 방법

coldplay.xixi
coldplay.xixi원래의
2020-10-09 15:25:433105검색

Mysql 로그 복구 방법: 먼저 복구 시간을 지정하고 코드는 [mysqlbinlog --stop-date=""]이며 복구 위치를 지정합니다. 코드는 [mysqlbinlog --start-date="2020-10-입니다. 09 9: 55:00"].

MySQL 로그를 복원하는 방법

Mysql 로그 복구 방법:

바이너리 로그에서 데이터를 복구하려면 현재 바이너리 로그 파일의 경로와 파일 이름을 알아야 합니다. 경로는 일반적으로 옵션 파일(예: 시스템에 따라 my.cnf 또는 my.ini)에서 찾을 수 있습니다. 옵션 파일에 포함되어 있지 않은 경우 서버 시작 시 명령줄에서 옵션으로 제공할 수 있습니다. 바이너리 로깅을 활성화하는 옵션은 --log-bin입니다. 현재 바이너리 로그 파일의 파일 이름을 확인하려면 다음 MySQL 문을 입력하세요.

SHOW BINLOG EVENTS /G

명령줄에서 다음을 입력할 수도 있습니다.

mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS /G'

비밀번호 my_pwd를 서버의 루트 비밀번호로 바꾸세요.

1. 복구 시간 지정

MySQL 4.1.4의 경우 mysqlbinlog 문에서 --start-date 및 --stop-date 옵션을 통해 DATETIME 형식으로 시작 및 종료 시간을 지정할 수 있습니다. 예를 들어, 오늘 아침 10시(오늘은 2006년 4월 20일)에 SQL 문을 실행하여 큰 테이블을 삭제한다고 가정합니다. 테이블과 데이터를 복원하려면 전날 밤의 백업을 복원하고 다음을 입력하면 됩니다.

mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd

이 명령은 --stop-date 옵션에 지정된 날짜 및 시간까지의 모든 데이터를 DATETIME 형식으로 복원합니다. 몇 시간 후에도 잘못된 SQL 문이 입력되지 않은 경우 나중에 발생한 활동을 재개할 수 있습니다. 이를 바탕으로 날짜와 시간을 사용하여 mysqlbinlog를 다시 실행할 수 있습니다:

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /

이 줄에서는 오전 10시 1분부터 기록된 SQL 문이 실행됩니다. 실행 전날 밤의 덤프 파일과 mysqlbinlog의 두 줄을 결합하면 오전 10시 이전의 1초로 모든 데이터를 복원할 수 있습니다. 시간이 정확한지 확인하려면 로그를 확인해야 합니다. 다음 섹션에서는 이를 수행하는 방법을 설명합니다.

2. 복구 위치 지정

날짜와 시간을 지정하지 않고 mysqlbinlog 옵션 --start-position 및 --stop-position을 사용하여 로그 위치를 지정할 수도 있습니다. 로그에서 위치 번호를 제공한다는 점을 제외하면 시작 및 종료 날짜 옵션과 동일한 효과가 있습니다. 특히 파괴적인 SQL 문으로 인해 많은 트랜잭션이 동시에 발생하는 경우 로그 위치를 사용하는 것이 보다 정확한 복구 방법입니다. 위치 번호를 확인하려면 mysqlbinlog를 실행하여 예기치 않은 트랜잭션이 수행된 시간 범위를 찾을 수 있지만 검사를 위해 결과를 텍스트 파일로 리디렉션할 수 있습니다. 작업 방법은 다음과 같습니다.

mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

이 명령은 /tmp 디렉터리에 작은 텍스트 파일을 생성하고 잘못된 SQL 문이 실행될 때 SQL 문을 표시합니다. 텍스트 편집기로 파일을 열고 반복하고 싶지 않은 문장을 찾아보세요. 복구 작업을 중지하고 계속하는 데 사용되는 경우 바이너리 로그의 위치 번호에 주석을 달아야 합니다. 위치를 표시하려면 log_pos와 숫자를 사용하세요. 포지션 번호를 이용하여 이전 백업 파일을 복원한 후 명령줄에 다음을 입력해야 합니다.

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /

위 1번째 줄은 중지된 지점까지의 모든 트랜잭션을 복원합니다. 다음 줄은 주어진 시작 위치부터 바이너리 로그 끝까지 모든 트랜잭션을 복원합니다. mysqlbinlog의 출력에는 각 SQL 문이 기록되기 전에 SET TIMESTAMP 문이 포함되어 있으므로 복구된 데이터 및 관련 MySQL 로그에는 원래 트랜잭션 실행 시간이 반영됩니다.

1. MySQL 데이터베이스에는 증분 백업 메커니즘이 없습니다. 데이터 양이 너무 많으면 백업이 큰 문제가 됩니다. 다행스럽게도 mysql 데이터베이스는 실제로 마스터 데이터베이스의 모든 데이터를 백업 데이터베이스에 동시에 쓰는 마스터-슬레이브 백업 메커니즘을 제공합니다. mysql 데이터베이스의 핫 백업을 구현합니다.

2. 이중 머신 핫 백업을 구현하려면 먼저 마스터-슬레이브 데이터베이스 서버의 버전 요구 사항을 이해해야 합니다. 상시 대기를 위해서는 MySQL 버전이 3.2 이상이어야 하며, 또 다른 기본 원칙은 슬레이브 데이터베이스의 데이터베이스 버전이 마스터 서버 데이터베이스 버전보다 높을 수는 있지만 마스터 서버 데이터베이스 버전보다 낮을 수는 없다는 것입니다.

3. 메인 데이터베이스 서버 설정:

a 먼저 메인 서버 버전이 핫 스탠바이를 지원하는지 확인하세요. 그런 다음 my.cnf(unix-like) 또는 my.ini(windows)의 mysqld 구성 블록에 log-bin(데이터베이스 변경 로그 기록)이 있는지 확인합니다. 왜냐하면 mysql의 복제 메커니즘은 로그 기반 복제 메커니즘이기 때문입니다. , 주 서버는 변경 로그에 대한 지원이 필요합니다. 그런 다음 로그를 기록할 데이터베이스와 로그를 기록하지 않을 데이터베이스를 설정합니다. 이렇게 하면 관심 있는 데이터베이스의 변경 사항만 데이터베이스 로그에 기록됩니다.

server-id=1 //데이터베이스 ID는 기본적으로 1이어야 하며 변경할 필요가 없습니다.

log-bin=log_name //로그 파일 이름을 지정할 수 있습니다. 설정하지 않으면 기본 호스트 이름이 사용됩니다.

binlog-do-db=db_name //로그를 기록하는 데이터베이스

binlog-ignore-db=db_name //기록하지 않는 데이터베이스

위의 데이터베이스가 여러 개인 경우 ","를 사용하여 구분한 다음 동기화 데이터베이스에 대한 사용자 계정을 설정합니다.

mysql> GRANT REPLICATION SLAVE ON *.*

-> 'repl'@'%.mydomain.com']'repl'@'%.mydomain .com'[/email]

IDENTIFIED BY 'slavepass'; 

4.0.2 以前的版本, 因为不支持 REPLICATION 要使用下面的语句来实现这个功能 

mysql> GRANT FILE ON *.* 

-> TO 

[email='repl'@'%.mydomain.com']'repl'@'%.mydomain.com'[/email] 

IDENTIFIED BY 'slavepass'; 

设置好主服务器的配置文件后重新启动数据库 

b.锁定现有的数据库并备份现在的数据 

锁定数据库 

mysql> FLUSH TABLES WITH READ LOCK;

备份数据库有两种办法一种是直接进入到 mysql 的 data 目录然后打包你需要备份数据库的文件夹,第二种是使用 mysqldump 的方式来备份数据库但是要加上"--master-data " 这个参数,建议使用第一种方法来备份数据库.

解除表的锁定的方法:

unlock tables;

c.查看主服务器的状态 

mysql> show master statusG; 

+---------------+----------+--------------+------------------+ 

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

+---------------+----------+--------------+------------------+ 

| mysql-bin.003 | 73 | test | manual,mysql | 

+---------------+----------+--------------+------------------+ 

记录 File 和 Position 项目的值,以后要用的。

相关免费学习推荐:mysql数据库(视频)

위 내용은 MySQL 로그를 복원하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.