1.错误日志文件
该文件记录了mysql启动,运行,关闭过程进程了记录,mysql dba在遇到问题时应该首先查看该文件,该文件不但记录了错误信息,也记录了一些警告信息或者不正确的信息。通过命令
mysql> show variables like 'log_error';
+---------------+-------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------+
| log_error | /home/service/mysql/data/var/hs_test_42.com.err |
+---------------+-------------------------------------------------+
hs_test_42.com 为主机名,通过hostname命令可以查看
2.慢查询日志
慢查询功能为sql语句优化带来了很好的帮助,可以设置一个阀值,将运行时间超过该值的所有sql语句都记录在慢查询日志文件中,该阀值可以通过long_query_time来设置,默认为10秒
默认情况下,mysql数据库并不启动慢查询日志,需要手工将这个参数设置为on,然后启动。
mysql> show variables like '%long%';
+---------------------------------------------------+----------+
| Variable_name | Value |
+---------------------------------------------------+----------+
| long_query_time | 10.000000 |
ysql> show variables like 'log_slow_queries';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | OFF |
从mysql5.1开始,long_query_time开始以微妙记录sql语句运行的时间,之前仅用秒为单位,这样可以更精确的记录sql运行时间。
另一个和慢查询有关的参数是log_queries_not_using_indexes,如果运行的sql语句没有使用索引,则mysql数据库同样会将这条语句记录到慢查询日志中去,查看是否打开了show variables like 'log_queries_not_using_indexes。
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
mysql服务器运行的时间越长,会有更多的慢查询日志,mysql提供命令mysqldumpslow,更容易分析该文件。
查看锁定时间最长的10条sql语句:
@hs_test_42:/home/service/mysql/data]$/usr/local/mysql/bin/mysqldumpslow -s al -n 10 david.log
从mysql5.1开始可以将慢查询的日志记录放入表slow_log中。
show create table mysql.slow_log;
参数log_output指定了慢查询的输出格式,默认为FILE,你可以设定为TABLE,然后就可以查询mysql框架下的slow_log表了。
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
设置输出格式为TABLE
set global log_output='TABLE';
测试一下:
select sleep(10);
log_output 是动态的,并且是全局的,可以在线修改。
3.查询日志
查询日志记录了所有对mysql数据库请求的信息,不论这些请求是否得到了正确的执行。默认文件名为:主机名.log
同样从mysql5.1开始,可以将查询日志的记录放入mysql架构下的general_log表,该表的使用方法和slow_log基本一样。
4.二进制日志
二进制日志记录了对数据库执行更改的所有操作,但是不包括select,和show这类操作,因为这类操作队数据本身并没有修改。二进制还包括了执行数据库更改操作的时间和执行时间等信息。
二进制日志文件主要有一些作用:
1. 恢复(recovery) 某些数据的恢复需要二进制日志,如当一个数据库全备文件恢复后,我们可以通过二进制日志进行point-in-time的恢复。
2. 复制(replication) 其原理与恢复类似,通过复制和执行二进制日志使得一台远程的mysql数据库(一般称为salve或者standby)与一台Mysql数据库(一般称为master或者primary)进行实时同步。
通过配置参数log-bin[=name] 可以启动二进制日志,如果不指定name,则默认二进制日志文件名为主机名,后缀名为二进制日志的序列号,所在路径为
mysql> show variables like 'datadir';
+---------------+-------------------------------+
| Variable_name | Value |
+---------------+-------------------------------+
| datadir | /home/service/mysql/data/var/ |
+---------------+-------------------------------+
bin_long.index为二进制索引文件,用来存储过往生成的二进制日志序列号。
二进制日志文件在默认情况下是没有启动的,需要手动的指定参数来启动,开启这个是对性能有影响,根据mysql的测试表明,开启日志是性能降低1%。
以下配置影响着二进制日志记录的信息和行为:
1> max_binlog_size
指定单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并且记录到.index文件。mysql5.0开始默认为1GB。
2>binlog_cache_size
当使用事务表的存储引擎(如InnoDB存储引擎)时,所有未提交的二进制日志会被记录到一个缓存中,等该事务 提交时直接将缓存中的二进制日志写入二进制日志文件,而该缓存的打掉由binlog_cache_size决定,默认为32KB,此外binlog_cache_sizes是基于会话的,也就是说,当一个线程开始一个事务时,mysql会自动的分配一个大小为binlog_cache_size的缓存,因此该值的设置需要相当的小心,不能设置过大。当一个事务的记录大于设定的binlog_cache_size时,mysql会把缓存中的日志写入一个临时文件,因此该值不能太小。通过查看binlog_cache_disk_use ,binlog_cache_use 的状态,判断当前的binlog_cache_size设置是否合适。
Binlog_cache_use记录了使用缓存写二进制日志的次数
binlog_cache_disk_use 记录了使用临时文件写二进制日志的次数。
如果binlog_cache_disk_use使用次数过多,说明binlog_cache_size设置的太小了。
该文件记录了mysql启动,运行,关闭过程进程了记录,mysql dba在遇到问题时应该首先查看该文件,该文件不但记录了错误信息,也记录了一些警告信息或者不正确的信息。通过命令
mysql> show variables like 'log_error';
+---------------+-------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------+
| log_error | /home/service/mysql/data/var/hs_test_42.com.err |
+---------------+-------------------------------------------------+
hs_test_42.com 为主机名,通过hostname命令可以查看
2.慢查询日志
慢查询功能为sql语句优化带来了很好的帮助,可以设置一个阀值,将运行时间超过该值的所有sql语句都记录在慢查询日志文件中,该阀值可以通过long_query_time来设置,默认为10秒
默认情况下,mysql数据库并不启动慢查询日志,需要手工将这个参数设置为on,然后启动。
mysql> show variables like '%long%';
+---------------------------------------------------+----------+
| Variable_name | Value |
+---------------------------------------------------+----------+
| long_query_time | 10.000000 |
ysql> show variables like 'log_slow_queries';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | OFF |
从mysql5.1开始,long_query_time开始以微妙记录sql语句运行的时间,之前仅用秒为单位,这样可以更精确的记录sql运行时间。
另一个和慢查询有关的参数是log_queries_not_using_indexes,如果运行的sql语句没有使用索引,则mysql数据库同样会将这条语句记录到慢查询日志中去,查看是否打开了show variables like 'log_queries_not_using_indexes。
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
mysql服务器运行的时间越长,会有更多的慢查询日志,mysql提供命令mysqldumpslow,更容易分析该文件。
查看锁定时间最长的10条sql语句:
@hs_test_42:/home/service/mysql/data]$/usr/local/mysql/bin/mysqldumpslow -s al -n 10 david.log
从mysql5.1开始可以将慢查询的日志记录放入表slow_log中。
show create table mysql.slow_log;
参数log_output指定了慢查询的输出格式,默认为FILE,你可以设定为TABLE,然后就可以查询mysql框架下的slow_log表了。
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
设置输出格式为TABLE
set global log_output='TABLE';
测试一下:
select sleep(10);
log_output 是动态的,并且是全局的,可以在线修改。
3.查询日志
查询日志记录了所有对mysql数据库请求的信息,不论这些请求是否得到了正确的执行。默认文件名为:主机名.log
同样从mysql5.1开始,可以将查询日志的记录放入mysql架构下的general_log表,该表的使用方法和slow_log基本一样。
4.二进制日志
二进制日志记录了对数据库执行更改的所有操作,但是不包括select,和show这类操作,因为这类操作队数据本身并没有修改。二进制还包括了执行数据库更改操作的时间和执行时间等信息。
二进制日志文件主要有一些作用:
1. 恢复(recovery) 某些数据的恢复需要二进制日志,如当一个数据库全备文件恢复后,我们可以通过二进制日志进行point-in-time的恢复。
2. 复制(replication) 其原理与恢复类似,通过复制和执行二进制日志使得一台远程的mysql数据库(一般称为salve或者standby)与一台Mysql数据库(一般称为master或者primary)进行实时同步。
通过配置参数log-bin[=name] 可以启动二进制日志,如果不指定name,则默认二进制日志文件名为主机名,后缀名为二进制日志的序列号,所在路径为
mysql> show variables like 'datadir';
+---------------+-------------------------------+
| Variable_name | Value |
+---------------+-------------------------------+
| datadir | /home/service/mysql/data/var/ |
+---------------+-------------------------------+
bin_long.index为二进制索引文件,用来存储过往生成的二进制日志序列号。
二进制日志文件在默认情况下是没有启动的,需要手动的指定参数来启动,开启这个是对性能有影响,根据mysql的测试表明,开启日志是性能降低1%。
以下配置影响着二进制日志记录的信息和行为:
1> max_binlog_size
指定单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并且记录到.index文件。mysql5.0开始默认为1GB。
2>binlog_cache_size
当使用事务表的存储引擎(如InnoDB存储引擎)时,所有未提交的二进制日志会被记录到一个缓存中,等该事务 提交时直接将缓存中的二进制日志写入二进制日志文件,而该缓存的打掉由binlog_cache_size决定,默认为32KB,此外binlog_cache_sizes是基于会话的,也就是说,当一个线程开始一个事务时,mysql会自动的分配一个大小为binlog_cache_size的缓存,因此该值的设置需要相当的小心,不能设置过大。当一个事务的记录大于设定的binlog_cache_size时,mysql会把缓存中的日志写入一个临时文件,因此该值不能太小。通过查看binlog_cache_disk_use ,binlog_cache_use 的状态,判断当前的binlog_cache_size设置是否合适。
Binlog_cache_use记录了使用缓存写二进制日志的次数
binlog_cache_disk_use 记录了使用临时文件写二进制日志的次数。
如果binlog_cache_disk_use使用次数过多,说明binlog_cache_size设置的太小了。