mysql5.5-日志配置

1.错误日志

  • 记录mysql服务进程mysqld在启动/关闭或运行过程中遇到的错误信息
[root@mysql ~]# vi /data/3306/my.conf
[mysqld_safe]
log-error=/data/3306/mysql_qb3306.err
mysql> show variables like "%log_error%";
+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| log_error     | /data/3306/mysql_qb3306.err |
+---------------+-----------------------------+
1 row in set (0.00 sec)

2.普通查询日志:

  • 记录客户端连接信息和执行的sql语句信息
mysql> set global general_log = ON ;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%general_log%";
+------------------+---------------------------+
| Variable_name    | Value                     |
+------------------+---------------------------+
| general_log      | ON                        |
| general_log_file | /data/3306/data/mysql.log |
+------------------+---------------------------+

3.慢查询日志

  • 记录执行时间超出指定值(long_query_time)得sql语句
[root@mysql ~]# vi /data/3306/my.conf 
[mysqld]
long_query_time = 1 #超过一秒就记录
log-slow-queries = /data/3306/slow.log #记录的日志文件位置
log_queries_not_using_indexes #没有索引的记录到日志里
mysql> show variables like "%long_q%";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql> show variables like "%log_slow%"; 
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| log_slow_queries | ON    |
+------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "%log_que%";
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON    |
+-------------------------------+-------+
1 row in set (0.00 sec)

4.二进制日志

  • 记录数据被修改的相关信息
[root@mysql ~]# vi /data/3306/my.conf
[mysqld]
log-bin = /data/3306/mysql-bin
mysql> show variables like "%log_bin%"; 
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |#是否打开bin-log
| sql_log_bin                     | ON    |#是否记录临时语句,例如使用bi-log恢复数据时
+---------------------------------+-------+ 如果不想被记录则打开此参数。
3 rows in set (0.00 sec)

4.1bin-log的三种模式

  • a)Row Level 行模式

    • 日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改
    • 优点:在row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条被修改。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。不会出现某些特定的情况下的存储过程或function,以及trigger的调用和触发无法被正确复制的问题
    • 缺点:row level,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,会产生大量的日志内容。
  • b)Statement Level(默认)

    • 每一条会修改数据的sql都会记录到master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行
    • 优点:statement level下的优点首先就是解决了row level下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约IO,提高性能,因为它只需要在Master上锁执行的语句的细节,以及执行语句的上下文的信息。
    • 缺点:由于只记录语句,所以,在statement level下 已经发现了有不少情况会造成MySQL的复制出现问题,主要是修改数据的时候使用了某些定的函数或者功能的时候会出现。
  • c)Mixed 自动模式

    • 在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志格式,也就是在Statement和Row之间选择一种。如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。
  • d)行模式和语句模式的区别

    • 语句模式:
      100万条记录
      只需1条delete * from test;就可以删除100万条记录
    • row模式
      100万条记录
      记录100万条删除命令

4.2配置方法

默认

mysql> show variables like "%binlog_for%";
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

配置文件修改方法

[root@mysql ~]# vi /data/3306/my.conf 
[mysqld]
log-bin = /data/3306/mysql-bin
#binlog_format = "STATEMENT"
#binlog_format = "ROW"
binlog_format = "MIXED"

在线修改立即生效方法

mysql> set session binlog_format = "ROW";###当前用户生效
Query OK, 0 rows affected (0.00 sec)

mysql> set global binlog_format = "ROW"; ###所有用户生效,修改完需要重新登录    
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%binlog_for%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/liang_operations/article/details/82872052