目录:
1 配置说明
2 my.cnf修改log
3 命令说明
---------------------------------------------------------------------1 配置
my.cnf #find 查找my.cnf /etc/my.cnf
data 目录 1 查看my.cnf搜索datadir
2 phpinfo搜索MYSQL_SOCKET /var/lib/mysql/
------------------mysql 日志
mysql有以下几种日志:
错误日志: log-err
查询日志: log
慢查询日志: log-slow-queries
更新日志: log-update
二进制日志: log-bin
通常, MySQL 的日志是放在它的数据库目录下。
要把日志生成在 /var/log 目录下(是系统日志存放的地方,只有 root 账号有写权限),需要 MySQL 进程对这个目录有读写权限,一般是不这么做的,也考虑到安全问题,包括 MySQL 本身的数据安全,因为对 MySQL 的所有操作,都会记录到常规查询日志。MySQL 的日志就不要用 /var/log/ 目录下。
---------------------------------------------------------------------2 my.cnf
# 在[mysqld] 中輸入
log-bin=/var/lib/mysql/mysql-bin
#expire_logs_days = 10
#max_binlog_size = 100M
log=/var/lib/mysql/mysql.log
log-error=/var/lib/mysql/error.log
#log-update=/var/lib/mysql/update.log 未能成功生成
long_query_time=1
log-slow-queries
log-queries-not-using-indexes
#详细说明
log-bin=/var/lib/mysql/mysql-bin #二进制LOG,mysqlbinlog直接读取二进制日志文件。二进制日志包含所有更新数据的语句 ,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制( Replication )的话,也需要使用二进制日志传送修改情况。log_bin指定日志文件,如果不提供文件名,MySQL将 自己产生缺省文件名。MySQL会在文件名后面自动添加数字索引,每次启动服务时,都会重新生成一个新的二进制文件。
时间长了log bin也会占很大的硬盘空间,所以在my.ini中加上对其的限制。
#expire_logs_days = 10
#max_binlog_size = 100M
---------------------
# show master status;
#mysqlbinlog mysql-bin.000052
-------------格式如下:
flush privileges
/*!*/;
# at 173
#090814 10:09:22 server id 1 end_log_pos 448 Query thread_id=51 exec_tim e=0 error_code=0
use sq_gllutf8/*!*/;
SET TIMESTAMP=1250215762/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@sessio n.collation_server=8/*!*/;
update gll_products set sn_name='休闲裤' ,ch_name='H957-3' ,color='卡其' ,co mposition='60%马棉44' ,huoqi='' ,p_remarks='' ,utime='2009-08-14 10:09:22' , uip='192.168.200.96' WHERE id = '339'
/*!*/;
# at 448
#090814 10:11:14 server id 1 end_log_pos 556 Query thread_id=59 exec_tim e=0 error_code=0
SET TIMESTAMP=1250215874/*!*/;
delete from gll_member WHERE id = '26'
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
-----------------------------------
log=/var/lib/mysql/mysql.log #对所有执行语句进行记录
----------------------------格式如下:
090814 10:11:14 59 Connect sq_szczkj@localhost on
59 Init DB sq_gllutf8
59 Query SET NAMES 'UTF8'
59 Query delete from gll_member WHERE id = '26'
59 Quit
090814 10:11:15 60 Connect sq_szczkj@localhost on
60 Init DB sq_gllutf8
60 Query SET NAMES 'UTF8'
60 Query select * from gll_member ORDER BY id DESC
60 Query select * from gll_member ORDER BY id DESC limit 0,50
60 Quit
61 Connect sq_szczkj@localhost on
61 Init DB sq_gllutf8
61 Query SET NAMES 'UTF8'
61 Query select * from gll_zone ORDER BY id DESC
61 Query select * from gll_zone ORDER BY id DESC limit 0,99
61 Quit
---------------------------------
log-error=/var/lib/mysql/error.log
#log-update=/var/lib/mysql/update.log 未能成功生成
long_query_time=1
log-slow-queries
#--log-slow-queries[=file_name ] 的file_name参数可选,缺省值是host_name -slow.log ,如果指定了file_name参数的话,mysql就会把慢查询的日志记录到file_name所设定的文件中,如果 file_name提供的是一个相对路径,mysql会把日志记录到mysql的data目录中。
log-queries-not-using-indexes #在mysql的启动配置文件或命令行参数中增加--log-queries-not-using-indexes 参数就可以启用未使用索引查询语句了,日志记录的文件就是log-slow-queries对应的文件。
----------------Mysql的log_slow_queries日志文件设置不当错误
log_slow_queries = ON
log_slow_queries=/var/log/slow-queries.log
long_query_time=5
这种容易导致slow-queries.log无法读取的错误(权限问题)。
常见错误提示:
[ERROR] Could not use /var/log/slow-queries.log for
logging (error 13). Turning logging off for the whole duration of the
MySQL server process. To turn it on again: fix the cause, shutdown the
MySQL server and restart it.
2,比较妥当的配置:
log_slow_queries = ON
log_slow_queries=slow-log
long_query_time=5
直接在目录/var/lib/mysql/ 下生成 slow-log 文件
----------------------------测试慢日志
mysql>select sleep(1);
mysql>select sleep(3);
mysql>select * from gll_products;
打开mysql.log和慢日志文件可以 看到
select sleep(3);
select * from gll_products;
---------------------------------------------------------------------3 命令说明
show variables like 'long%'; 查询 long_query_time 的值
mysql>show variables like 'log_%'; 是否启用了日志
mysql> show variables like 'log_%';
+---------------------------------+--------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------+
| log_bin | ON |
| log_bin_trust_function_creators | OFF |
| log_error | /var/lib/mysql/error.log |
| log_queries_not_using_indexes | ON |
| log_slave_updates | OFF |
| log_slow_queries | ON |
| log_warnings | 1 |
+---------------------------------+--------------------------+
mysql> show master logs; 顯示二進制日志數目
mysql>show variables like 'log_bin'; 确认你日志是否启用
mysql> show master status; 怎样知道当前的二进制日志
查看从某一段时间到某一段时间的二进制日志
mysqlbinlog --start-datetime='2008-01-19 00:00:00' --stop-datetime='2008-01-30 00:00:00' /var/lib/ mysql/ mysql-bin.000006 > mysqllog1.log
shell>mysqlbinlog mail-bin.000001 看二进制日志文件用mysqlbinlog
或者shell>mysqlbinlog mail-bin.000001 | tail
flush privileges; 刷新数据库
mysql> SHOW STATUS; 运行下列命令可以获取状态变量的值:
mysql> SHOW STATUS LIKE ‘[匹配模式]’; ( 可以使用%、?等 ) 如果只要检查某几个状态变量,可以使用下列命令:
select version(); 查看 mysql版本