mysql日志
一、日志:
1.错误日志
--记录mysqld启动和停止时的错误信息,
参数 --log-error[=file_name],未给定filename时使用host_name.err
执行flush logs错误日志会用-old重命名并重建新的空文件,未指定filename不重命名
2.通用查询日志
--记录所有sql查询,参数 --log[=file_name]或 -l [file_name],未给定时为host_name.log
服务器重新启动和日志刷新不会产生新的日志文件,unix中可以通过以下命令重命名文件并创建新文件:
shell> mv hostname.log hostname-old.log
shell> mysqladmin flush-logs
shell> cp hostname-old.log to-backup-directory
shell> rm hostname-old.log
3.二进制日志
--包含所有更新了数据或者已经潜在更新了数据(没有影响数据的delete)的所有语句,描述数据更改
--它还包含了每个更新数据库语句的执行时间,不包含没有修改任何数据的语句(使用通用查询日志)
--可用于在主复制服务器上记录所有将发送给从服务器的语句
--启用二进制日志会使数据库服务器慢大约1%,但用于恢复及允许复制显然更有用
--使用--log-bin[=file_name]启动时,mysqld写入包含所有更新数据的sql命令的日志文件,未给出filename时使用-bin后接主机名,给出文件名未指定路径则写入数据目录
--mysqld在每个日志名后面加数字扩展名,每次启动服务器或刷新日志时数字增加,
--如果当前日志大小达到max_binlog_size会自动创建新的二进制日志,使用大的事务时二进制日志可能超过max_binlog_size:把事务写入同一个二进制日志中,不要写入不同的二进制日志文件
--可用RESET MASTER语句删除所有二进制文件或用PURGE MASTER LOGS删除部分二进制文件
--可用--binlog-do-db=db_name 来指定只将某个dbname的更新记录到二进制日志中,其它忽略
--可用--binlog-ignore-db=db_name 来指定不记录某个数据库的更新日志
--可以使用mysqlbinlog工具检查二进制文件,可以重新处理日志上的语句
shell> mysqlbinlog log-file | mysql -h server_name
--在查询结束后、锁定被释放前或提交完成后则立即记入二进制日志,
对非事务的更新执行完毕后立即保存到二进制日志中,
对事务表如BDB,InnoDB表所有更改表的更新被缓存直到接到commit语句,执行完commit之前mysql将事务写入二进制日志
处理事务线程启动时为缓冲查询分配binlog_cache_size大小的内存,如果语句大于该值则线程打开临时文件保存事务
Binlog_cache_use状态变量显示该缓冲区内保存的语句的事务的数量,Binlog_cache_disk_use状态变量显示这此事务中实际有多少必须使用临时文件,两个变量用于将binlog_cache_size调节到足够在的值避免使用临时文件
max_binlog_cache_size 限制用来缓存多语句事务的缓冲区总大小,如果事务大于该值则失败并回滚
当mysql服务器或系统崩溃时,有可能会有二进制日志中最后的执行语句丢失的情况,可使用sync_binlog全局变量使二进制日志在每N次写后后同步到硬盘(1最安全,但影响性能)
--innodb-safe-binlog 可以防止记录日志后执行事务间出现崩溃造成数据不一致
4.慢查询日志
--log-slow_queries[=file_name]
当该选项启动时,mysqld写一个包含所有执行时间超过long_query_time 秒的sql语句的日志文件,获得初始表锁定的时间不算在执行时间内
没有给出file_name时默认为主机名,后缀为-slow.log,不是绝对路径时写入数据目录
--log-short-format 可防止不使用索引的慢查询记入慢查询日志
--log-slow-admin-statements 可以将慢管理语句如OPTIMIZE TABLE,ANALYZE TABLE,ALTER TABLE写入慢查询日志
指定恢复时间,通过--start-date ,--stop-date指定起止时间:
mysqlbinlog --start-date='2011-01-01 00:00:00' --stop-date='2012-01-01 00:00:00' binlog.xxxx | mysql -uuser -ppwd