014—(非常重要!)Mysql日志管理

mysql日志主要有以下几种:

    错误日志:log_error

    通用查询日志:general_log

    二进制日志:binlog

    慢速查询日志:log_slow_queries

    中继日志:relay_log

    事务日志:innodb_log

由于版本的不同,以下的目录文件目录也有所不同。

 

1、错误日志


 【Windows下】       修改主配置文件my.ini

            [mysqld]

           Error-bin[=dir\[filename]]    

//dir:指定错误日志的存储路径;filename:指定错误文件的文件名

 

删除错误日志:

Mysqladmin -u root -p flush-logs;

 

      【Linux下】

修改主配置文件my.cnf

            [mysqld]

            log-error=mysql_error.log(绝对路径或若直接文件名则会存储到数据目录下)

            log_warnings={on|off|2}:将不将警告信息记录日志

                log_warnings表示警告信息是否记录在错误日志中,10也就是onoff表示记录和不记录,2则表示失败拒绝的连接信息。

        在mysql服务器上查看错误日志的配置:

            mysql> show global variables like '%log%';

 

2、通用查询日志(非常重要!!!)


        mysql所有查询语句都会被记录。

        默认关闭此项记录,一般作调试用,平时开启会记录大量数据占用磁盘空间。

        存储位置:文件,表(tablemysql.general_log

        默认存储在数据目录下。

        Linux环境下,修改主配置文件my.cnf

            [mysqld]

            general_log={on|off}

            general_log_file=mysql_general.log (绝对路径或若直接文件名则会存储到数据目录下)

            log_output={file|table|file,table|none}:日志输出类型

  

在不重启MYSQL服务的情况下,操作通用查询日志:

 

mysql> set global general_log=on;   //开启

 

mysql> set global general_log=off;   //关闭

 

mysql> mysqladmin -u root -p flush-logs   //删除日志(先删除旧的,再创建一个新的)

 

 

3、二进制日志(非常重要!!!)

        1》用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(statement)或改变后的结果(row),也可能是二者混合。

        2》包含了所有更新了的数据或者已经潜在更新了数据的所有语句,记录了数据的更改以及数据更改的事件events和位置position

        3主要目的是在恢复时能够最大可能地恢复数据库,默认开启的。

        4》Linux环境下,修改主配置文件my.cnf

            log_bin=/path/to/bin_log_file

                这是个只读变量,表明存放日志的目录位置,不能在此处写onoff,若不指定路径会存储在数据目录下。

            max_binlog_size=1073741824:

                设置单个二进制文件的最大尺寸,以字节为单位,超过此值大小就会自动滚动。

            sync_binlog={1|0|N}:

                表示每几次事务提交后是否立即将内存中的二进制日志同步到内存(binlog_cache)中。

                1表示立即提交;0则不提交;N可为任意值,表示每N次;值不同对应的性能也不同,01的性能差别可高达5倍之多。写入磁盘的操作是使用fdatasync()函数。

            binlog_format={statement|row|mixed}:

                binlog日志存放的格式

            expire_logs_days=N:

                二进制日志的有效天数

        

        5》可以用mysqlbinlog命令查看二进制日志文件。

            mysqlbinlog:

                 yyyy-mm-dd hh:mm:ss

                 --start-datetime=

                 --stop-datetime=

                 -j, --start-position=#

                  --stop-position=#

                  --user, --host, --password

        8》在mysql中查看二进制

            查看二进制日志文件列表:

                 mysql> show master|binary logs; 

            查看当前正在使用的二进制日志文件:

                mysql> show master status;

            查看二进制日志文件中的事件:

                mysql> show binlog events [in 'log_name'] [from pos] [limit [offset,] row_count]

            查看二进制日志的参数配置

                MariaDB [(none)]> show global variables where variable_name like '%log_bin%' or variable_name like '%binlog%';

           

        9》清除二进制日志

            清除所有日志(不存在主从复制关系)

                mysql> reset master;

            清除指定日志之前的所有日志

                mysql> purge master logs to '日志';

            清除某一时间点前的所有日志

                mysql> purge master logs before '--日 时:分:秒';

            清除 天前的所有日志

                mysql> purge master logs before current_date - interval 10 day;

            由于二进制日志的重要性,请仅在确定不再需要将要被删除的二进制文件,

            或者在已经对二进制日志文件进行归档备份,

            或者已经进行数据库备份的情况下,才进行删除操作,且不要使用 rm 命令删除。

            

        10》暂停二进制日志

 

Set SQL_LOG_BIN=0;     //暂停二进制日志

 

Set SQL_LOG_BIN=1;     //启动二进制日志

 

 

4、慢速查询日志(非常重要!!!)


        记录所有执行时间超过long_query_time秒的sql语句,可用于找到执行时间长的查询,以用于优化。

        默认未开启,开启优先级比查询日志高,默认是超过10的才会被记录。

        存储位置:文件,表(tablemysql.slog_log

        Linux环境下,修改主配置文件/etc/my.cnf,在[mysqld]下添加“long_query_time”和“log-slow-queries=文件路径名”,重启mysqld服务。

            log_slow_queries={on|off}:是否开启慢查询日志(5.5以前)

            slow_query_log={on|off}:是否开启慢查询日志(和上面没有区别,5.6以后)

            slow_query_log_file=xxxx-slom.log:慢查询日志存放位置,默认为“主机名-slow.log”。相对路径的话,默认为数据目录下。

            log_output={file|table|file,table|none}:表示存放日志的方式

            log_query_time=N :表示多长时间的查询被认为慢查询,默认为10秒。   

        mysql自带了对慢查询日志的统计分析工具:mysqldumpslow

        

    操作慢查询日志:

mysql> set global slow_query_log=on;      //开启慢查询日志

 

mysql> set global slow_query_log=off;      //关闭慢查询日志

 

删除慢查询日志:直接删除慢查询日志文件,通过mysqladmin -u root -p flush-logs重新生成一个新的慢查询日志。


猜你喜欢

转载自blog.51cto.com/6854290/2329340
今日推荐