MySQL日志详细解析

mysql日志

主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;

日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复

错误日志

在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。

错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。

下面我们来定义mysql错误日志的功能:

一般而言,日志级别的定义没有回话变量都只是在全局级别下进行定义。

mysql> SHOW  GLOBAL VARIABLES LIKE '%log%';+-----------------------------------------+-----------------------------------+|  Variable_name                            | Value                              |+-----------------------------------------+-----------------------------------+| back_log                                | 50                                ||  binlog_cache_size                        | 32768                              ||  binlog_direct_non_transactional_updates | OFF                               ||  binlog_format                           | MIXED                             ||  binlog_stmt_cache_size                   | 32768                              ||  expire_logs_days                         | 0                                  || general_log                             | OFF                               ||  general_log_file                         | /mydata/data/stu18.log             ||  innodb_flush_log_at_trx_commit           | 1                                  ||  innodb_locks_unsafe_for_binlog           | OFF                               ||  innodb_log_buffer_size                   | 8388608                            ||  innodb_log_file_size                     | 5242880                            ||  innodb_log_files_in_group                | 2                                  ||  innodb_log_group_home_dir                | ./                                 ||  innodb_mirrored_log_groups               | 1                                  || log                                     |  OFF                               || log_bin                                 | ON                                ||  log_bin_trust_function_creators          | OFF                                || log_error                               |  /mydata/data/stu18.magedu.com.err |定义错误日志| log_output                              | FILE                              ||  log_queries_not_using_indexes            | OFF                                ||  log_slave_updates                        | OFF                                ||  log_slow_queries                        | OFF                               ||  log_warnings                             | 1               是否把警告信息写入错误日志中|  max_binlog_cache_size                    | 18446744073709547520               ||  max_binlog_size                          | 1073741824                         ||  max_binlog_stmt_cache_size               | 18446744073709547520               ||  max_relay_log_size                       | 0                                  || relay_log                               |                                   ||  relay_log_index                          |                                    ||  relay_log_info_file                      | relay-log.info                     ||  relay_log_purge                          | ON                                 ||  relay_log_recovery                       | OFF                                ||  relay_log_space_limit                    | 0                                  ||  slow_query_log                           | OFF                                || slow_query_log_file                     |  /mydata/data/stu18-slow.log       || sql_log_bin                             | ON                                || sql_log_off                             | OFF                               || sync_binlog                             | 0                                 ||  sync_relay_log                           | 0                                  ||  sync_relay_log_info                      | 0                                  |

其中,log_error可以直接定义为文件路径,也可以为ON|OFF;log_warings只能使用1|0来定义开关启动。

更改错误日志位置可以使用log_error来设置形式如下:

[root@stu18 data]#  vim /etc/my.cnf[mysqld]Log_error=DIR/[filename]

解析:其中,DIR参数指定错误日志的路径filename参数是错误日志的名称,没有指定该参数时默认为主机名。重启mysql服务器即可生效。

查看mysql错误日志:

[root@stu18 data]#  tail -20 stu18.magedu.com.err130813  15:30:50  InnoDB: Starting shutdown...130813  15:30:51  InnoDB: Shutdown completed;  log sequence number 1630920130813 15:30:51  [Note] /usr/local/mysql/bin/mysqld: Shutdown complete130813 15:30:52  mysqld_safe mysqld from pid file /mydata/data/stu18.magedu.com.pid ended130813 15:30:53  mysqld_safe Starting mysqld daemon with databases from /mydata/data130813 15:30:54  InnoDB: The InnoDB memory heap is disabled     #禁用了InnoDB memory的堆功能。130813 15:30:54  InnoDB: Mutexes and rw_locks use GCC atomic builtins #Mutexes(互斥量)和rw_locks(行级锁)是GCC编译的是InnoDB内置的。130813 15:30:54  InnoDB: Compressed tables use zlib 1.2.3     #默认压缩工具是zlib130813 15:30:55  InnoDB: Initializing buffer pool, size = 128.0M    #InnoDB引擎的缓冲池(buffer pool)的值大小130813 15:30:55  InnoDB: Completed initialization of buffer pool130813 15:30:55  InnoDB: highest supported file format is Barracuda.130813  15:30:57  InnoDB: Waiting for the  background threads to start130813 15:30:58  InnoDB: 5.5.33 started; log sequence number 1630920130813 15:30:58  [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306130813 15:30:58  [Note]   - '0.0.0.0' resolves to  '0.0.0.0';  #0.0.0.0会反解主机名,这里反解失败130813 15:30:58  [Note] Server socket created on IP: '0.0.0.0'.130813 15:30:58  [Note] Event Scheduler: Loaded 0 events    #事件调度器没有任何事件,因为没有装载。130813 15:30:58  [Note] /usr/local/mysql/bin/mysqld: ready for connections. #mysql启动完成等待客户端的请求。Version:  '5.5.33-log'  socket:  '/tmp/mysql.sock'  port: 3306  Source distribution  #创建一个本地sock用于本地连接。

删除错误日志:

在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令的语法如下:mysqladmin –u root –pflush-logs也可以使用登录mysql数据库中使用FLUSHLOGS语句来开启新的错误日志。

在mysql5.5.7之后:服务器将关闭此项功能。只能使用重命名原来的错误日志文件,手动冲洗日志创建一个新的:方式如下:

[root@stu18 data]# mv stu18.magedu.com.err  stu18.magedu.com.err.old [root@stu18 data]#  mysqladmin flush-logs[root@stu18 data]# lshellodb  myclass  mysql-bin.000003  mysql-bin.index           stu18.magedu.com.pid     ibdata1      mysql     mysql-bin.000004  performance_schema    ib_logfile0  mysql-bin.000001  stu18.magedu.com.err           test   ib_logfile1  mysql-bin.000002  stu18.magedu.com.err.old

更多信息请查阅官方文档:http://dev.mysql.com/doc/refman/5.5/en/error-log.html

查询日志:

默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。

查看查询日志是否开启:

mysql> SHOW  GLOBAL VARIABLES LIKE '%log%';+-----------------------------------------+-----------------------------------+|  Variable_name                            | Value                              |+-----------------------------------------+-----------------------------------+| back_log                                | 50                                ||  binlog_cache_size                        | 32768                              ||  binlog_direct_non_transactional_updates | OFF                               ||  binlog_format                           | MIXED                             ||  binlog_stmt_cache_size                   | 32768                              ||  expire_logs_days                         | 0                                  || general_log                             | OFF        #定义查询日志是否开启  |                   |  general_log_file                         | /mydata/data/stu18.log   #定义查询日志的文件地址名称                          ||  innodb_flush_log_at_trx_commit           | 1                                  ||  innodb_locks_unsafe_for_binlog           | OFF                                ||  innodb_log_buffer_size                   | 8388608                            ||  innodb_log_file_size                     | 5242880                            ||  innodb_log_files_in_group               | 2                                 ||  innodb_log_group_home_dir                | ./                                 ||  innodb_mirrored_log_groups               | 1                                  || log                                     |  OFF          #是否开启日志  (若开启则表示开启所有的日志功能)                 || log_bin                                 | ON                                ||  log_bin_trust_function_creators          | OFF                                || log_error                               | /mydata/data/stu18.magedu.com.err  || log_output                              | FILE   #日志的输出的位置          |       |  log_queries_not_using_indexes            | OFF                                ||  log_slave_updates                        | OFF                               ||  log_slow_queries                         | OFF                                ||  log_warnings                             | 1                                  ||  max_binlog_cache_size                    | 18446744073709547520               ||  max_binlog_size                          | 1073741824                         ||  max_binlog_stmt_cache_size               | 18446744073709547520               ||  max_relay_log_size                       | 0                                  || relay_log                               |                                   ||  relay_log_index                          |                                    ||  relay_log_info_file                      | relay-log.info                     ||  relay_log_purge                         | ON                                ||  relay_log_recovery                       | OFF                                ||  relay_log_space_limit                    | 0                                  ||  slow_query_log                           | OFF                                ||  slow_query_log_file                      | /mydata/data/stu18-slow.log        || sql_log_bin                             | ON                                || sql_log_off                             | OFF                               || sync_binlog                             | 0                                 ||  sync_relay_log                           | 0                                  ||  sync_relay_log_info                      | 0                                  |+-----------------------------------------+-----------------------------------+41 rows in set  (0.00 sec)

拓展解析:日志的输出位置一般有三种方式:file(文件),table(表),none(不保存);其中前两个输出位置可以同时定义,none表示是开启日志功能但是记录日志信息。file就是通过general_log_file |/mydata/data/stu18.log 等方式定义的,而输出位置定义为表时查看日志的内容方式为:

mysql> use  mysql;                    #在此数据库中Database changedmysql> show  tables;+---------------------------+|  Tables_in_mysql           |+---------------------------+|  columns_priv              || db                        || event                     || func                      || general_log               |      #这个就是查询日志的表输出位置|  help_category             ||  help_keyword              ||  help_relation             || help_topic………………                |+---------------------------+

慢查询日志:

慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。

查看慢查询日志的定义:

mysql> SHOW  GLOBAL VARIABLES LIKE '%log%';|  slow_query_log         | OFF    #定义慢查询日志的|  slow_query_log_file    |/mydata/data/stu18-slow.log    #输出方式为file(文件)时定义慢查询日志的位置

启动和设置慢查询日志:

1、通过配置文件my.cnf中的log-slow-queries选项可以开启慢查询日志;形式如下:

[root@stu18 data]#  vim /etc/my.cnf[mysqld]slow_query_log=1log-slow-queries [=  DIR/[filename] ]

其中,DIR参数指定慢查询日志的存储路径;filename参数指定日志的文件名,生成日志文件的完成名称为filename-slow.log。如果不指定存储路径,慢查询日志默认存储到mysql数据库的数据文件下,如果不指定文件名,默认文件名为hostname-slow.log。

2、通过登录mysql服务器直接定义,方式如下:

首先要有全局权限;然后执行mysql>set global slow_query_log=1;

时间默认超过多少的称为慢查询日志?

一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:

mysql> SHOW  GLOBAL VARIABLES LIKE 'long%';+-----------------+-----------+|  Variable_name   | Value     |+-----------------+-----------+| long_query_time  | 10.000000 |+-----------------+-----------+1 row in set (0.04  sec)

注释:其中这个慢查询时间并不是只表示语句自身执行超过10秒还包含由于其他资源被征用造成阻塞的查询执行时间或其他原因等都被记录到慢查询中。所以这个慢查的时长表示从查询开始到查询结束中间包含可能的任何原因所经历的所有时间。

测试是否可以记录日志:

mysql> set globalslow_query_log=1;       #开启慢查询日志Query OK, 0 rowsaffected (0.35 sec)mysql> setsession long_query_time=0.001;     #更改时间(当前session中,退出则重置)Query OK, 0 rowsaffected (0.00 sec)mysql> set globallong_query_time=0.001;      #更改时间(全局中,重启服务则重置)mysql> SHOWVARIABLES LIKE 'long%';          #查询定义时间+-----------------+----------+| Variable_name   | Value   |+-----------------+----------+| long_query_time |0.001000 |+-----------------+----------+1 row in set (0.00sec)mysql> showglobal variables like "%slow%";  #查看慢查询日志开启状态+---------------------+-----------------------------+| Variable_name       | Value                       |+---------------------+-----------------------------+|log_slow_queries    | ON                          ||slow_launch_time    | 2                           ||slow_query_log      | ON                          ||slow_query_log_file | /mydata/data/stu18-slow.log |+---------------------+-----------------------------+4 rows in set (0.03sec)

查看慢查询日志:

mysql> use mysqlmysql> selectuser,host,password from user where user="root";+------+------------------+----------+| user | host             | password |+------+------------------+----------+| root |localhost        |          || root |stu18.magedu.com |          || root |127.0.0.1        |          || root | ::1              |          |+------+------------------+----------+4 rows in set (0.08sec)       #查询时间为0.08mysql> systemmore /mydata/data/stu18_slow.log          #查询慢查询日志记录信息/usr/local/mysql/bin/mysqld,Version: 5.5.33-log (Source distribution). startedwith:Tcp port: 3306  Unix socket: /tmp/mysql.sockTime                 Id Command    Argument>>>>>>>>>>>>>>>>部分已省略>>>>>>>>>>>>>># Time: 13100723:46:33# User@Host:root[root] @ localhost []# Query_time:0.108459  Lock_time: 0.000216 Rows_sent:4  Rows_examined: 6SETtimestamp=1381160793;selectuser,host,password from user where user="root";

事务日志:

事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。

如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。

查看事务日志的定义:

mysql> SHOWGLOBAL VARIABLES LIKE '%log%';+-----------------------------------------+-----------------------------------+| Variable_name                           | Value                             |+-----------------------------------------+-----------------------------------+| innodb_flush_log_at_trx_commit          | 1        #在事务提交时innodb是否同步日志从缓冲到文件中1表示事务以提交就同步不提交每隔一秒同步一次,性能会很差造成大量的磁盘I/O;定义为2表示只有在事务提交时才会同步但是可能会丢失整个事务      ||innodb_locks_unsafe_for_binlog          |OFF                               || innodb_log_buffer_size                  | 8388608                           ||innodb_log_file_size                    |5242880                           || innodb_log_files_in_group               | 2      #至少有两个                ||innodb_log_group_home_dir               |./      #定义innodb事务日志组的位置       ||innodb_mirrored_log_groups              |1    #表示对日志组做镜像          |每个事务日志都是大小为5兆的文件:[root@stu18 data]#ls -lh-rw-rw---- 1 mysqlmysql 5.0M Oct  7 23:36 ib_logfile0-rw-rw---- 1 mysqlmysql 5.0M Aug 12 01:06 ib_logfile1

二进制日志:

二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。

二进制开启状态:

newasp框架2.3.0 newasp框架2.3.0

newasp框架是一个基于 Classic Asp Vbscript Api 框架。全面支持64位,无需修改应用池32位启用,效率更高。 更新日志: 8月2号 – v2.2.9 修复Str.ToString对GetRows二维数组的解析问题 7月26号 – v2.2.8 修复IIS在前端自定义信息头提交下的跨域访问问题 修复路由对跨域OPTIONS发起提交导致的访问问题 修改web.confi

newasp框架2.3.0 5 查看详情 newasp框架2.3.0

mysql> showglobal variables like "%log_bin%";+---------------------------------+-------+| Variable_name                   | Value |+---------------------------------+-------+| log_bin                         | ON    |  #已开启|log_bin_trust_function_creators | OFF   || sql_log_bin                     | ON    |+---------------------------------+-------+

二进制日志相关的参数:

mysql> showglobal variables like "%log%";sql_log_bin ={ON|OFF}     #用于控制会话级别二进制日志功能的开启或关闭。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。binlog_cache_size =32768   #默认值32768 Binlog Cache用于在打开了二进制日志(binlog)记录功能的环境,是MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。同时,我们可以通过binlog_cache_use 以及 binlog_cache_disk_use来分析设置的binlog_cache_size是否足够,是否有大量的binlog_cache由于内存大小不够而使用临时文件(binlog_cache_disk_use)来缓存了。binlog_stmt_cache_size= 32768       #当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句。log_bin = mysql-bin#指定binlog的位置,默认在数据目录下。binlog-format= {ROW|STATEMENT|MIXED}     #指定二进制日志的类型,默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。sync_binlog = 10#设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步max_binlog_cache_size= {4096 .. 18446744073709547520}      #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。max_binlog_stmt_cache_size= {4096 .. 18446744073709547520}    #二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存expire_log_days ={0..99}    #设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。

二进制日志定义方式:

其一、log_bin可以直接定义为文件路径,也可以为ON|OFF。

其二、通过编辑my.cnf中的log-bin选项可以开启二进制日志;形式如下:

[root@stu18 ~]#my.cnf[mysqld]log-bin [=DIR \ [filename]]

其中,DIR参数指定二进制文件的存储路径;filename参数指定二级制文件的文件名,其形式为filename.number,number的形式为000001、000002等。每次重启mysql服务或运行mysql> flush logs;都会生成一个新的二进制日志文件,这些日志文件的number会不断地递增。除了生成上述的文件外还会生成一个名为filename.index的文件。这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。

[root@stu18 ~]# cd /mydata/data/[root@stu18 data]#ls -lh-rw-rw---- 1 mysqlmysql  14K Aug 13 15:30 mysql-bin.000001-rw-rw---- 1 mysqlmysql  150 Aug 13 17:05 mysql-bin.000002-rw-rw---- 1 mysqlmysql  150 Aug 13 17:06 mysql-bin.000003-rw-rw---- 1 mysqlmysql  150 Aug 13 17:07 mysql-bin.000004-rw-rw---- 1 mysqlmysql  150 Aug 13 17:39 mysql-bin.000005-rw-rw---- 1 mysqlmysql  126 Aug 13 19:03 mysql-bin.000006-rw-rw---- 1 mysqlmysql  126 Aug 13 19:03 mysql-bin.000007-rw-rw---- 1 mysqlmysql  126 Aug 13 19:05 mysql-bin.000008-rw-rw---- 1 mysqlmysql  107 Aug 13 19:05 mysql-bin.000009-rw-rw---- 1 mysqlmysql  353 Oct  7 23:40 mysql-bin.000010-rw-rw---- 1 mysqlmysql  190 Oct  7 20:43 mysql-bin.index[root@stu18 data]#cat mysql-bin.index./mysql-bin.000001./mysql-bin.000002./mysql-bin.000003./mysql-bin.000004./mysql-bin.000005./mysql-bin.000006./mysql-bin.000007./mysql-bin.000008./mysql-bin.000009./mysql-bin.000010

如果说我们向某个表的某个字段插入一个数据而这个数据为当前时间(日期时间型);过段时间将此二进制文件应用到另一台服务器上数据就会变动从而导致数据的不一致性所以说对于这种非确定性的数据使用默认的语句定义并不是可靠的;

二进制日志中常用的定义格式:

1、语句(statement):默认的记录格式;

2、行(row):定义的并非数据本身而是这一行的数据是什么;

3、混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。

其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。

查看二进制日志:

二进制日志的定义方式为二进制格式;使用此格式可以存储更多的信息,并且可以使写入二进制日志的效率更高。但是不能直接使用查看命令打开并查看二进制日志。

mysql> showbinary logs;     #显示当前服务器使用的二进制文件及大小+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| mysql-bin.000001|     13814 || mysql-bin.000002|       150 || mysql-bin.000003|       150 || mysql-bin.000004|       150 || mysql-bin.000005|       150 || mysql-bin.000006|       126 || mysql-bin.000007|       126 || mysql-bin.000008|       126 || mysql-bin.000009|       107 || mysql-bin.000010|       353 |+------------------+-----------+10 rows in set (0.07sec)mysql> showmaster logs;      #显示主服务器使用的二进制文件及大小+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| mysql-bin.000001|     13814 || mysql-bin.000002|       150 || mysql-bin.000003|       150 || mysql-bin.000004|       150 || mysql-bin.000005|       150 || mysql-bin.000006|       126 || mysql-bin.000007|       126 || mysql-bin.000008|       126 || mysql-bin.000009|       107 || mysql-bin.000010|       353 |+------------------+-----------+10 rows in set (0.02sec)mysql> showmaster status;   #当前使用的二进制文件及所处位置+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000010|      353 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.00sec)

小扩展:二进制日志的记录位置:通常为上一个事件执行结束时间的位置,每一个日志文件本身也有自己的元数据所以说对于当前版本的mysql来说二进制的开始位置通常为107;

mysql> flushlogs;Query OK, 0 rowsaffected (0.23 sec)注意:flush logs一般只会滚动中继日志和二进制日志。mysql> showmaster status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000011|      107 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.00sec)

查看当前二进制文件的信息:

mysql> createdatabase yong;Query OK, 1 rowaffected (0.12 sec)mysql> createtable yong.tb1 (id int,name char(20));Query OK, 0 rowsaffected (0.44 sec)mysql> insertinto yong.tb1 values(1,'tom');Query OK, 1 rowaffected (0.14 sec)mysql> showmaster status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000011|      479 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.00sec)

查看二进制日志信息的命令:

SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]mysql> showbinlog events\G         #查看所有的二进制信息***************************87. row ***************************   Log_name: mysql-bin.000001        Pos: 13580 Event_type: Query  Server_id: 1End_log_pos: 13688       Info: use `hellodb`; /*!40000 ALTERTABLE `toc` DISABLE KEYS */***************************88. row ***************************   Log_name: mysql-bin.000001        Pos: 13688 Event_type: Query  Server_id: 1End_log_pos: 13795       Info: use `hellodb`; /*!40000 ALTERTABLE `toc` ENABLE KEYS */***************************89. row ***************************   Log_name: mysql-bin.000001        Pos: 13795 Event_type: Stop  Server_id: 1End_log_pos: 13814       Info:89 rows in set (0.00sec)mysql> showbinlog events in 'mysql-bin.000011';    #查看指定日志的二进制信息+------------------+-----+-------------+-----------+-------------+----------------------------------------------+| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                         |+------------------+-----+-------------+-----------+-------------+----------------------------------------------+| mysql-bin.000011|   4 | Format_desc |         1 |         107 | Server ver: 5.5.33-log, Binlogver: 4        || mysql-bin.000011 |107 | Query       |         1 |         190 | create database yong                         || mysql-bin.000011 |190 | Query       |         1 |         293 | create table yong.tb1 (idint,name char(20)) || mysql-bin.000011 |293 | Query       |         1 |         357 | BEGIN                                        || mysql-bin.000011 |357 | Query       |         1 |         452 | insert into yong.tb1values(1,'tom')         || mysql-bin.000011 |452 | Xid         |         1 |         479 | COMMIT /* xid=103 */                         |+------------------+-----+-------------+-----------+-------------+----------------------------------------------+6 rows in set (0.00sec)mysql> showbinlog events in 'mysql-bin.000011' from 190; #从指定的事件位置开始+------------------+-----+------------+-----------+-------------+----------------------------------------------+| Log_name         | Pos | Event_type | Server_id |End_log_pos | Info                                         |+------------------+-----+------------+-----------+-------------+----------------------------------------------+| mysql-bin.000011 |190 | Query      |         1 |         293 | create table yong.tb1 (idint,name char(20)) || mysql-bin.000011 |293 | Query      |         1 |         357 | BEGIN                                        || mysql-bin.000011 |357 | Query      |         1 |         452 | insert into yong.tb1values(1,'tom')         || mysql-bin.000011 |452 | Xid        |         1 |         479 | COMMIT /* xid=103 */                         |+------------------+-----+------------+-----------+-------------+----------------------------------------------+4 rows in set (0.00sec)mysql> showbinlog events in 'mysql-bin.000011' from 190 limit 3;  #指定偏移量(不是语句,是事件)+------------------+-----+------------+-----------+-------------+----------------------------------------------+| Log_name         | Pos | Event_type | Server_id |End_log_pos | Info                                         |+------------------+-----+------------+-----------+-------------+----------------------------------------------+| mysql-bin.000011 |190 | Query      |         1 |         293 | create table yong.tb1 (idint,name char(20)) || mysql-bin.000011 |293 | Query      |         1 |         357 | BEGIN                                        || mysql-bin.000011 |357 | Query      |         1 |         452 | insert into yong.tb1values(1,'tom')         |+------------------+-----+------------+-----------+-------------+----------------------------------------------+3 rows in set (0.00sec)

命令行下查看二进制日志:

由于无法使用cat等方式直接打开并查看二进制日志;所以必须使用mysqlbinlog命令。但是当正在执行mysql读写操作时建议不要使用此打开正在使用的二进制日志文件;若非要打开可flush logs。mysqlbinlog命令的使用方式:

[root@stu18 data]#mysqlbinlog mysql-bin.000017        #必须在数据目录下/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019 SET@@session.max_insert_delayed_threads=0*/;/*!50003 SET@OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 4       #事件开始处#131009  0:25:59 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.33-log created 131009  0:25:59 # Warning: thisbinlog is either in use or was not closed properly.BINLOG 'FzJUUg8BAAAAZwAAAGsAAAABAAQANS41LjMzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA=='/*!*/;# at 107#131009  0:26:36 server id 1  end_log_pos 192   Query   thread_id=12    exec_time=0 error_code=0     #131009 0:26:36年月日的简写方式;end_log_pos事件结束处;thread_id=12 哪个会话线程创建的此语句;exec_time=0 执行时长单位为秒;error_code=0 错误代码0表示没有SET TIMESTAMP=1381249596/*!*/;      #预设信息(环境设定)

导出此数据库的信息:

[root@stu18 data]#mysqlbinlog mysql-bin.000017 > /tmp/a.sql

导入此数据库的信息:

[root@stu18 data]#mysql < a.sql

删除二进制日志信息:

二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原)。也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。删除二进制文件的方法如下:

1、删除所有的二进制日志(不可效仿):

使用RESET MASTER语句可以删除所有的二进制日志。该语句的形式如下:

mysql> resetmaster;           Query OK, 0 rowsaffected (0.17 sec)mysql> showbinary logs;+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| mysql-bin.000001|       107 |+------------------+-----------+1 row in set (0.04sec)

解析:首先不建议在生产环境下使用此操作;删除所有的二进制日志后,Mysql将会重新创建新的二进制日志。新二进制日志的编号从000001开始。

2、根据文件或时间点来删除二进制日志:

语法形式:

mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

其中TO’log_name’表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr指定把哪个时间之前的二进制文件删除了。

mysql> PURGEBINARY LOGS TO 'mysql-bin.000007';Query OK, 0 rowsaffected (0.11 sec)mysql> showbinary logs;+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| mysql-bin.000007|       150 || mysql-bin.000008|       150 || mysql-bin.000009|       150 || mysql-bin.000010|       150 || mysql-bin.000011|       150 || mysql-bin.000012|       150 || mysql-bin.000013|       150 || mysql-bin.000014|       150 || mysql-bin.000015|       150 || mysql-bin.000016|       150 || mysql-bin.000017|       483 |+------------------+-----------+11 rows in set (0.04sec)[root@stu18 data]#cat mysql-bin.index./mysql-bin.000007./mysql-bin.000008./mysql-bin.000009./mysql-bin.000010./mysql-bin.000011./mysql-bin.000012./mysql-bin.000013./mysql-bin.000014./mysql-bin.000015./mysql-bin.000016./mysql-bin.000017

由此可以看出这种清理二进制日志文件的方式是非常合理的,不会导致数据库的错误发生。

mysql> PURGEBINARY LOGS BEFORE '13-10-19 10:26:36'; #使用时间来删除二进制日志Query OK, 0 rowsaffected (0.05 sec)

到此关于二进制的知识就解析完了,其中若有错误不足之处请指出!谢谢!注意二进制日志和错误日志很重要重点学之!!

相关推荐:

MySQL日志设置及查看方法详解

我们都很熟悉MySQL日志,本文主要介绍了MySQL日志设置及查看方法,需要的朋友可以……

MYSQL日志与备份还原详解

本文主要为大家详细介绍了MYSQL日志与备份还原问题,具有一定的参考价值,感兴趣的……

mysql日志文件在哪 如何修改MySQL日志文件位置

MySQL日志文件相信大家都有很多的了解,MySQL日志文件一般在:/var/log/mysqld.log,下面介绍如何修改MySQL日志文件……

以上就是MySQL日志详细解析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/893133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 15:58:41
下一篇 2025年11月28日 15:59:03

相关推荐

  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 使用 SVG 如何实现自定义宽度、间距和半径的虚线边框?

    使用 svg 实现自定义虚线边框 如何实现一个具有自定义宽度、间距和半径的虚线边框是一个常见的前端开发问题。传统的解决方案通常涉及使用 border-image 引入切片图片,但是这种方法存在引入外部资源、性能低下的缺点。 为了避免上述问题,可以使用 svg(可缩放矢量图形)来创建纯代码实现。一种方…

    2025年12月24日
    100
  • 如何让“元素跟随文本高度,而不是撑高父容器?

    如何让 元素跟随文本高度,而不是撑高父容器 在页面布局中,经常遇到父容器高度被子元素撑开的问题。在图例所示的案例中,父容器被较高的图片撑开,而文本的高度没有被考虑。本问答将提供纯css解决方案,让图片跟随文本高度,确保父容器的高度不会被图片影响。 解决方法 为了解决这个问题,需要将图片从文档流中脱离…

    2025年12月24日
    000
  • 为什么 CSS mask 属性未请求指定图片?

    解决 css mask 属性未请求图片的问题 在使用 css mask 属性时,指定了图片地址,但网络面板显示未请求获取该图片,这可能是由于浏览器兼容性问题造成的。 问题 如下代码所示: 立即学习“前端免费学习笔记(深入)”; icon [data-icon=”cloud”] { –icon-cl…

    2025年12月24日
    200
  • 如何利用 CSS 选中激活标签并影响相邻元素的样式?

    如何利用 css 选中激活标签并影响相邻元素? 为了实现激活标签影响相邻元素的样式需求,可以通过 :has 选择器来实现。以下是如何具体操作: 对于激活标签相邻后的元素,可以在 css 中使用以下代码进行设置: li:has(+li.active) { border-radius: 0 0 10px…

    2025年12月24日
    100
  • 如何模拟Windows 10 设置界面中的鼠标悬浮放大效果?

    win10设置界面的鼠标移动显示周边的样式(探照灯效果)的实现方式 在windows设置界面的鼠标悬浮效果中,光标周围会显示一个放大区域。在前端开发中,可以通过多种方式实现类似的效果。 使用css 使用css的transform和box-shadow属性。通过将transform: scale(1.…

    2025年12月24日
    200
  • 为什么我的 Safari 自定义样式表在百度页面上失效了?

    为什么在 Safari 中自定义样式表未能正常工作? 在 Safari 的偏好设置中设置自定义样式表后,您对其进行测试却发现效果不同。在您自己的网页中,样式有效,而在百度页面中却失效。 造成这种情况的原因是,第一个访问的项目使用了文件协议,可以访问本地目录中的图片文件。而第二个访问的百度使用了 ht…

    2025年12月24日
    000
  • 如何用前端实现 Windows 10 设置界面的鼠标移动探照灯效果?

    如何在前端实现 Windows 10 设置界面中的鼠标移动探照灯效果 想要在前端开发中实现 Windows 10 设置界面中类似的鼠标移动探照灯效果,可以通过以下途径: CSS 解决方案 DEMO 1: Windows 10 网格悬停效果:https://codepen.io/tr4553r7/pe…

    2025年12月24日
    000
  • 使用CSS mask属性指定图片URL时,为什么浏览器无法加载图片?

    css mask属性未能加载图片的解决方法 使用css mask属性指定图片url时,如示例中所示: mask: url(“https://api.iconify.design/mdi:apple-icloud.svg”) center / contain no-repeat; 但是,在网络面板中却…

    2025年12月24日
    000
  • 如何用CSS Paint API为网页元素添加时尚的斑马线边框?

    为元素添加时尚的斑马线边框 在网页设计中,有时我们需要添加时尚的边框来提升元素的视觉效果。其中,斑马线边框是一种既醒目又别致的设计元素。 实现斜向斑马线边框 要实现斜向斑马线间隔圆环,我们可以使用css paint api。该api提供了强大的功能,可以让我们在元素上绘制复杂的图形。 立即学习“前端…

    2025年12月24日
    000
  • 图片如何不撑高父容器?

    如何让图片不撑高父容器? 当父容器包含不同高度的子元素时,父容器的高度通常会被最高元素撑开。如果你希望父容器的高度由文本内容撑开,避免图片对其产生影响,可以通过以下 css 解决方法: 绝对定位元素: .child-image { position: absolute; top: 0; left: …

    2025年12月24日
    000
  • CSS 帮助

    我正在尝试将文本附加到棕色框的左侧。我不能。我不知道代码有什么问题。请帮助我。 css .hero { position: relative; bottom: 80px; display: flex; justify-content: left; align-items: start; color:…

    2025年12月24日 好文分享
    200
  • 前端代码辅助工具:如何选择最可靠的AI工具?

    前端代码辅助工具:可靠性探讨 对于前端工程师来说,在HTML、CSS和JavaScript开发中借助AI工具是司空见惯的事情。然而,并非所有工具都能提供同等的可靠性。 个性化需求 关于哪个AI工具最可靠,这个问题没有一刀切的答案。每个人的使用习惯和项目需求各不相同。以下是一些影响选择的重要因素: 立…

    2025年12月24日
    000
  • 如何用 CSS Paint API 实现倾斜的斑马线间隔圆环?

    实现斑马线边框样式:探究 css paint api 本文将探究如何使用 css paint api 实现倾斜的斑马线间隔圆环。 问题: 给定一个有多个圆圈组成的斑马线图案,如何使用 css 实现倾斜的斑马线间隔圆环? 答案: 立即学习“前端免费学习笔记(深入)”; 使用 css paint api…

    2025年12月24日
    000
  • 如何使用CSS Paint API实现倾斜斑马线间隔圆环边框?

    css实现斑马线边框样式 想定制一个带有倾斜斑马线间隔圆环的边框?现在使用css paint api,定制任何样式都轻而易举。 css paint api 这是一个新的css特性,允许开发人员创建自定义形状和图案,其中包括斑马线样式。 立即学习“前端免费学习笔记(深入)”; 实现倾斜斑马线间隔圆环 …

    2025年12月24日
    100

发表回复

登录后才能评论
关注微信