>  기사  >  데이터 베이스  >  mysql의 데이터 업데이트 작업은 어떤 로그에 기록됩니까?

mysql의 데이터 업데이트 작업은 어떤 로그에 기록됩니까?

青灯夜游
青灯夜游원래의
2020-11-02 13:56:162339검색

MySQL의 데이터 업데이트 작업은 일반 쿼리 로그와 바이너리 로그에 기록됩니다. 일반 쿼리 로그는 MySQL 서비스 시작 및 종료, 업데이트 명령문, 쿼리 명령문 등을 포함한 모든 사용자 작업을 기록하는 데 사용됩니다. 바이너리 로그는 다양한 데이터베이스 작업을 바이너리 형식으로 기록하지만 쿼리 명령문은 기록하지 않습니다.

mysql의 데이터 업데이트 작업은 어떤 로그에 기록됩니까?

(추천 튜토리얼: mysql 비디오 튜토리얼)

로그는 데이터베이스의 중요한 부분으로 주로 데이터베이스의 실행 상태, 일일 작업 및 오류 정보를 기록하는 데 사용됩니다.

MySQL 일반 쿼리 로그(General Query Log)

일반 쿼리 로그(General Query Log)는 MySQL 서비스 시작 및 종료, 업데이트 문 및 쿼리 문 등을 포함한 모든 사용자 작업을 기록하는 데 사용됩니다.

기본적으로 일반 쿼리 로그 기능은 꺼져있습니다. 다음 명령을 실행하면 일반 쿼리 로그가 켜져 있는지 확인할 수 있습니다.

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+----------------------------------------------------------------+
| Variable_name    | Value                                                          |
+------------------+----------------------------------------------------------------+
| general_log      | OFF                                                            |
| general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log |
+------------------+----------------------------------------------------------------+
2 rows in set, 1 warning (0.01 sec)

결과를 보면 일반 쿼리 로그가 꺼져 있는 것을 확인할 수 있으며,general_log_file 변수는 일반 쿼리 로그 파일의 위치를 ​​지정합니다.

일반 쿼리 로그 시작 및 설정

MySQL에서는 MySQL 구성 파일에 log 옵션을 추가하여 일반 쿼리 로그를 활성화할 수 있습니다. 형식은 다음과 같습니다.

[mysqld]
log=dir/filename

그 중 dir은 다음과 같습니다. 매개변수는 일반 쿼리 로그의 저장 경로를 지정합니다. filename 매개변수는 로그의 파일 이름을 지정합니다. 저장 경로를 지정하지 않으면 일반 쿼리 로그는 기본적으로 MySQL 데이터베이스의 데이터 폴더에 저장됩니다. 파일 이름을 지정하지 않으면 기본 파일 이름은 호스트 이름.log입니다. 여기서 호스트 이름은 호스트 이름을 나타냅니다.

일반 쿼리 로그 보기

사용자의 최근 작업을 알고 싶다면 일반 쿼리 로그를 볼 수 있습니다. 일반 쿼리 로그는 텍스트 파일 형식으로 저장되며, 일반 텍스트 파일을 사용하여 이러한 유형의 로그 내용을 볼 수 있습니다.

예제 1

먼저 일반 쿼리 로그 기능이 켜져 있는지 확인한 후 tb_student 테이블의 레코드를 쿼리합니다. SQL 명령 및 실행 과정은 다음과 같습니다.

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+----------------------------------------------------------------+
| Variable_name    | Value                                                          |
+------------------+----------------------------------------------------------------+
| general_log      | ON                                                             |
| general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log |
+------------------+----------------------------------------------------------------+
2 rows in set, 1 warning (0.02 sec)

mysql> use test;
Database changed
mysql> SELECT * FROM tb_student;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  2 | MySQL  |
|  3 | Python |
+----+--------+

3 행 세트(0.06초)

성공적으로 실행된 후 일반 쿼리 로그를 엽니다. 여기서 로그 이름은 LAPTOP-UHQ6V8KP.log입니다. 다음은 일반 쿼리 로그의 일부입니다.

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe, Version: 5.7.29-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument
2020-05-29T06:43:44.382878Z     7 Quit
2020-05-29T06:44:10.001382Z     8 Connect root@localhost on  using SSL/TLS
2020-05-29T06:44:10.007532Z     8 Query select @@version_comment limit 1
2020-05-29T06:44:11.748179Z     8 Query SHOW VARIABLES LIKE '%general%'
2020-05-29T06:44:25.487472Z     8 Query SELECT DATABASE()
2020-05-29T06:44:25.487748Z     8 Init DB test
2020-05-29T06:44:35.390523Z     8 Query SELECT * FROM tb_student

로그에는 클라이언트의 모든 행동이 매우 명확하게 기록되어 있는 것을 볼 수 있습니다.

MySQL 바이너리 로그(바이너리 로그)

바이너리 로그(바이너리 로그)는 변경 로그(업데이트 로그)라고도 불리며 MySQL에서 매우 중요한 로그입니다. 주로 데이터베이스의 변경 사항, 즉 SQL 문의 DDL 및 DML 문을 기록하는 데 사용되며 데이터 기록 쿼리 작업은 포함되지 않습니다.

MySQL 데이터베이스가 예기치 않게 중지된 경우 바이너리 로그 파일을 사용하여 사용자가 수행한 작업과 데이터베이스 서버 파일에 어떤 수정이 이루어졌는지 확인한 다음 바이너리 로그의 기록을 기반으로 데이터베이스 서버를 복원할 수 있습니다. 파일.

기본적으로 바이너리 로그 기능은 꺼져있습니다. 다음 명령어를 실행하면 바이너리 로그가 켜져 있는지 확인할 수 있습니다.

mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set, 1 warning (0.02 sec)

결과에서 알 수 있듯이 바이너리 로그가 꺼져 있습니다.

바이너리 로그 시작 및 설정

MySQL에서는 구성 파일에 log-bin 옵션을 추가하여 바이너리 로그를 활성화할 수 있습니다. 형식은 다음과 같습니다.

[mysqld]
log-bin=dir/[filename]

그 중 dir 매개변수는 바이너리 파일의 저장 경로, filename 매개변수는 바이너리 파일의 파일 이름을 filename.number 형식으로 지정하고 번호는 000001, 000002 등의 형식으로 지정합니다.

MySQL 서비스가 다시 시작될 때마다 새로운 바이너리 로그 파일이 생성됩니다. 이러한 로그 파일의 파일 이름 부분은 변경되지 않으며 숫자는 계속 증가합니다.

dir 및 filename 매개변수가 없는 경우 바이너리 로그는 기본적으로 데이터베이스의 데이터 디렉터리에 저장됩니다. 기본 파일 이름은 호스트 이름-bin.number입니다. 여기서 호스트 이름은 호스트 이름을 나타냅니다.

my.ini 파일의 [mysqld] 그룹에 다음 명령문을 추가하세요.

log-bin

MySQL 서버를 다시 시작하면 MySQL 데이터베이스의 데이터 디렉터리에 LAPTOP-UHQ6V8KP-bin.000001 파일이 보입니다. LAPTOP-UHQ6V8KP-bin.index 파일도 생성되었습니다. 여기서 MySQL 서버의 호스트 이름은 LAPTOP-UHQ6V8KP입니다.

my.ini 파일의 [mysqld] 그룹에서 다음과 같이 수정할 수도 있습니다.

log-bin=C:log\mylog

MySQL 서비스를 다시 시작하면 C:log 폴더에 mylog.000001 파일과 mylog.index 파일이 보입니다.

바이너리 로그 보기

1. 바이너리 로그 파일 목록 보기

다음 명령을 사용하여 MySQL에 있는 바이너리 로그 파일을 볼 수 있습니다.

mysql> SHOW binary logs;
+----------------------------+-----------+
| Log_name                   | File_size |
+----------------------------+-----------+
| LAPTOP-UHQ6V8KP-bin.000001 |       177 |
| LAPTOP-UHQ6V8KP-bin.000002 |       154 |
+----------------------------+-----------+
2 rows in set (0.00 sec)

2. being writing

다음 명령어를 사용하면 현재 MySQL에 작성되고 있는 바이너리 로그 파일을 볼 수 있습니다.

mysql> SHOW master status;
+----------------------------+----------+--------------+------------------+-------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| LAPTOP-UHQ6V8KP-bin.000002 |      154 |              |                  |                   |
+----------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3. 바이너리 로그 파일의 내용 보기

바이너리 로그는 바이너리 형식으로 저장되며 직접 열어 볼 수 없습니다. 바이너리 로그를 보려면 mysqlbinlog 명령을 사용해야 합니다.

mysqlbinlog 命令的语法形式如下:

mysqlbinlog filename.number

mysqlbinlog 命令只在当前文件夹下查找指定的二进制日志,因此需要在二进制日志所在的目录下运行该命令,否则将会找不到指定的二进制日志文件。

例 1

下面使用 mysqlbinlog 命令,来查看 C:\log 目录下的 mylog.000001 文件,代码执行如下:

C:\Users\11645>cd C:\log
C:\log>mysqlbinlog mylog.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200527  9:33:37 server id 1  end_log_pos 123 CRC32 0x69738cfd  Start: binlog v 4, server v 5.7.29-log created 200527  9:33:37 at startup
......

由于日志内容较长,这里只展示了 mylog 中的部分内容。

使用 mysqlbinlog 命令时,可以指定二进制文件的存储路径。这样可以确保 mysqlbinlog 命令可以找到二进制文件。上面例子中的命令可以变为如下形式:

mysqlbinlog C:\log\mylog.000001

这样,mysqlbinlog 命令就会到 C:\log 目录下去查找 mylog.000001 文件。如果不指定路径,mysqlbinlog 命令将在当前目录下查找 mylog.000001 文件。

除了 filename.number 文件,MySQL 还会生成一个名为 filename.index 的文件,这个文件存储着所有二进制日志文件的列表,可以用记事本打开该文件。

小技巧:实际工作中,二进制日志文件与数据库的数据文件不放在同一块硬盘上,这样即使数据文件所在的硬盘被破坏,也可以使用另一块硬盘上的二进制日志来恢复数据库文件。两块硬盘同时坏了的可能性要小得多,这样可以保证数据库中数据的安全。

更多编程相关知识,请访问:编程入门!!

위 내용은 mysql의 데이터 업데이트 작업은 어떤 로그에 기록됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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