>데이터 베이스 >MySQL 튜토리얼 >mysql에서 실수로 삭제한 데이터를 복구하는 방법

mysql에서 실수로 삭제한 데이터를 복구하는 방법

coldplay.xixi
coldplay.xixi원래의
2020-10-13 17:42:5418739검색

실수로 삭제된 데이터를 검색하는 Mysql 방법: 먼저 binlog에서 잘못된 명령문을 찾은 다음 binlog 로그를 복원하고 마지막으로 데이터베이스에 복원합니다. 코드는 [# mysql -uroot -p -f data.sql]입니다. .

mysql에서 실수로 삭제한 데이터를 복구하는 방법

Mysql에서 실수로 삭제한 데이터를 복구하는 방법:

1.binlog를 찾습니다.

데이터 복구를 위한 전제 조건은 binlog 로그가 켜져 있지 않은 경우입니다. 켜져 있으면 이 문서를 무시하세요. binlog 로그가 활성화되어 있는지 여부는 MySQL 구성 파일을 확인할 수 있습니다. 로그 위치는 일반적으로 /var/lib/mysql 디렉토리 또는 컴파일되고 설치된 날짜 디렉토리에 있습니다. Mysql에 로그인하고 명령을 사용하여 볼 수도 있습니다.

# cat /etc/my.cnf
log_bin=mysql-bin
# mysql -uroot -p
Enter password:
mysql> show variables like'log_bin%';
+---------------------------------+--------------------------------------------------+
| Variable_name                   | Value                                            |
+---------------------------------+--------------------------------------------------+
| log_bin                         | ON                                               |
| log_bin_basename                | /home/programs/mysql-5.6.26/data/mysql-bin       |
| log_bin_index                   | /home/programs/mysql-5.6.26/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                                              |
| log_bin_use_v1_row_events       | OFF                                              |
+---------------------------------+--------------------------------------------------+
5 rows in set (0.00 sec)
# ll /home/programs/mysql-5.6.26/data/mysql-bin*
-rw-rw---- 1 mysql mysql 343629748 Oct 13 22:09 /home/programs/mysql-5.6.26/data/mysql-bin.000001
-rw-rw---- 1 mysql mysql        19 Sep 23 17:11 /home/programs/mysql-5.6.26/data/mysql-bin.index

binlog 로그가 여러 개인 경우 현재 binlog를 보고 Mysql 명령줄에서 binlog 로그를 잘라낼 수도 있습니다. binlog를 잘라서 다시 보면 새 binlog 파일에 새 로그가 기록되는 것을 볼 수 있습니다.

mysql> show master status;
+------------------+-----------+--------------+------------------+-------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 343629748 |              |                  |                   |
+------------------+-----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

2.binlog에서 잘못된 문장 찾기

binlog 로그에서 잘못된 문장이 실행된 시점을 찾아보고, 잘못된 문장 전후의 binlog 로그를 sql로 복원할 수 있습니다. 또한 이 단계를 건너뛰고 전체 binlog 로그를 sql로 직접 복원한 다음 sql 파일을 열고 오류 문을 삭제할 수도 있습니다.

# sudo mysqlbinlog --base64-output=DECODE-ROWS -v -d ids mysql-bin.000001 | grep --ignore-case -A3 -B4 '错误的sql语句'

3. binlog 로그 복원

mysqlbinlog 명령을 사용하면 binlog 로그를 sql 스크립트로 직접 복원할 수 있으며, 시작 및 종료 시간을 지정할 수 있습니다. 마지막 백업부터 복구 시점까지 여러 개의 binlog 로그가 생성된 경우(백업 시 binlog 로그 새로 고치기를 권장), 작은 것부터 큰 것 순서대로 SQL로 내보낸 후 순차적으로 데이터베이스로 가져옵니다.

# sudo mysqlbinlog --base64-output=DECODE-ROWS -v -d ids --start-datetime '2016-10-11 15:22:53' mysql-bin.000001 > /home/stack/data.sql

위 명령에서 -d ids를 사용하여 복원할 데이터베이스를 지정합니다. 테이블 수준 데이터를 복원하려면 해당 데이터를 sql로 내보낸 다음 grep으로 필터링하세요.

# more data.sql | grep --ignore-case -E 'insert|update|delete' | grep table

4. 데이터베이스로 복원

데이터를 복원할 때 중복된 데이터 오류가 발생할 수 있으므로 이를 무시하려면 -f 매개변수를 사용하는 것이 좋습니다.

# mysql -uroot -p -f ids < data.sql

더 많은 관련 무료 학습 권장 사항: mysql 튜토리얼(동영상)

위 내용은 mysql에서 실수로 삭제한 데이터를 복구하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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