当前位置:网站首页>Four logs of MySQL server layer

Four logs of MySQL server layer

2022-07-06 03:13:00 Rookie ~ ~

One 、MySQL Server Introduction to layer log

When one MySQL Server Client Initiate a connection request , stay MySQL What the backend has to do :
 Insert picture description here
MySQL The journal is in MySQL server Generated on , No matter which storage engine you change , These logs are needed , Include :

  • Error log : Record mysqld During the operation of the service cordump、error、exception etc.

  • Query log : Record MySQL Server All that you've received SQL. Due to the of online projects SQL That's too much , Open query log IO Too much leads to MySQL inefficiency , We It usually doesn't open , Only start when debugging . For example, by looking at sql Discover hotspot data and cache it :
     Insert picture description here

  • Binary log : Record data changes (insert、update、delete、alter …), It's very important , Can be used for Data recovery , Master slave copy . Master-slave replication technology depends on log_bin, All changes to the main library are recorded in log_bin in , From the library from binlog Read all operations of the main library , Do it again .
     Insert picture description here

  • Slow query log : Records some instances where the execution time exceeds the specified value SQL sentence , Available for developers to analyze SQL, So as to optimize

MySQL There are many global variables defined in to record settings or states , Check is show variables( Global variables ) perhaps show status( state ). View log related variables :
 Insert picture description here

Two 、 Profile parameters

open my.ini, Add the above parameters to the back , Restart after saving mysql Just the service .
 Insert picture description here
adopt set Method can only affect the current session, If you want to The configuration is permanently valid , It needs to be set on the configuration file , And then restart MySQL service , It can take effect forever

linux Next restart mysqld Commands for services :sudo service mysqld restart

Let's look at the configuration file /etc/mysql/my.cnf
 Insert picture description here

  • give log-error The path is open log-error, If not custom log-error The path of , Default in data_dir
  • In the open log-bin=mysql-bin At the same time, add server-id=1( At present MySQL Server The identity of the ), Otherwise, in the linux root Next sudo service mysqld restart The service cannot be restarted
  • Set expiration time expire_log_days, Because one day the disk will be full of this log , Causes the server to become inoperable , After the set time is exceeded, the log file will be deleted

3、 ... and 、 Error log

 Insert picture description here

Four 、 Binary log

Binary log (BINLOG) It records all the DDL( Data definition language ) and DML( Data manipulation language ) sentence , But it does not include data query statements . Statement to “ event ” Form preservation of , It describes the data change process . This log plays an extremely important role in data recovery in case of disaster .

Two important scenes : Master slave copy 、 Data recovery .

see binlog:show binary logs

Binary content cannot be viewed directly , Because it doesn't record plaintext , Because it's a little unsafe to record plaintext , After all, it is the details of database table changes , Unlike slow queries, logs are recorded in clear text .

 Insert picture description here
binlog Default in MySQL Of data_dir Next
 Insert picture description here

1. demonstration binlog Record changes

Let's refresh , Make a new one binlog
 Insert picture description here
Use school Database based user Table :
 Insert picture description here
perform insert and update operation
 Insert picture description here
Look again binlog
 Insert picture description here
We found that the log filesize It's different from just now , Be sure to record the data change operation we just did

If we go straight cat Log view , You will find that it is not in clear text , Unable to view directly
 Insert picture description here
adopt mysqlbinlog Tools (mysql Native tools ) Mind parsing a large number of binlog Log files :

mysqlbinlog --no-defaults --database=school --base64-output=decode-rows -v --start-datetime='2022-03-01 00:00:00' --stop-datetime='2022-03-31 00:00:00' mysql-bin.000001 | more
  • database: Specify to view changes to a library
  • base64-output:binlog Decoding method
  • start-datetime & stop-datetime: Specify to view changes in a certain period of time , If you don't write, view all changes
  • mysql-bin.000001: View the binary log file

Let's take a look at what just changed binlog:
 Insert picture description here
 Insert picture description here
 Insert picture description here

  • @1、@2、@3、@4: Represents the name of the database table 4 A field
  • server id: It means that we are my.cnf Set in the id, Used to identify the current MySQL The identity of the
  • at 565、at679: It refers to the current event in binlog The location of the record , Use when recovering data .

2. demonstration binlog Data recovery

 Insert picture description here
establish mytest database , Create inside user Table and add data
 Insert picture description here
If someone deletes the library now
 Insert picture description here
At this time mytest All tables and data in the library are gone , However, these operations are recorded in the binary log binlog Inside

In theory , It can be downloaded from binlog Recover the lost data . Because the recovery process is also the modification of data , Therefore, the logs generated during the recovery process should also be recorded in binlog in , So in order to prevent us from not knowing where to end the data recovery process , Or we can't tell which binary logs we need to recover and which are newly generated in the recovery , This requires us Appoint binlog Recovery interval

We now know , We build a library 、 Build table 、 The operations of inserting data are recorded in mysql-bin.00003 In file
 Insert picture description here

Let's refresh now , Make a new one binlog, This allows our next data recovery operations to be recorded in mysql-bin.00004 In file , Instead of adding to mysql-bin.00003

 Insert picture description here
So let's look at mysql-bin.00003, Find the interval that needs to be recovered
 Insert picture description here
 Insert picture description here
 Insert picture description here
from mysql-bin.000003 Take out all the operations in the interval , Through the pipe MySQL shell On the implementation
 Insert picture description here
View the current library , You can see mytest Has recovered
 Insert picture description here
Then check the table and data
 Insert picture description here
In this way, all the data will be restored .

We can not only pass binlog The location of the record , Get the interval that needs to be recovered , It can also be done through binlog Record the time to get the interval to be recovered , Parameter is :start-datetimestop-datetime
 Insert picture description here
 Insert picture description here

Pay attention to data recovery in actual use : Because of configuration bin-log It is also configured mysql-bin, Also configured expire_logs_days( The expiration time of the log ), How to recover the data before the expiration time ?

mysql The recovery of data depends on Data backup and binlog Data recovery . The expired log data will be backed up , No expired data can be passed directly through binlog recovery . Generally, data backup is to backup data to sql In the script file , For example, save in ~/data.sql in , And then in mysql with source ~/data.sql perform , Or if it's in linux Of shell Pipes can be used inside :cat ~/data.mysql|mysql -u root -p, We can restore the data we backed up before to mysql In the library table of .

5、 ... and 、 Slow query log

Slow query log details

原网站

版权声明
本文为[Rookie ~ ~]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060309088275.html