mysql 日志

xiaoxiao2025-01-31  6

:shock: 测试版本mysql5.0.22+redhat el5 vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). # old_passwords=1 table_cache = 300 default-character-set = utf8 log = /var/lib/mysqllog/mysql.log log-bin = /var/lib/mysqllog/log-bin log-slow-queries = /var/lib/mysqllog/slowquery.log long_query_time=2 [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 其中黑体的内容为增加的。斜体的log-error=/var/log/mysqld.log原有的 mysql有以下几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 我的这个版本已经不用了,update的操作也记入查询日志中。设置上后错误日志中会有一条错误信息,不过不影响使用 二进制日志: -log-bin 附录: //显示所有本机上的二进制日志 mysql> SHOW MASTER LOGS; //删除所有本机上的二进制日志 mysql> RESET MASTER; //删除所有创建时间在binary-log.xxx之前的二进制日志 mysql> PURGE MASTER LOGS TO 'binary-log.xxx'; //只保留最近6天的日志,之前的都删掉 find /var/intra -type f -mtime +6 -name "*.log" -exec rm -f {} \; //用键盘左上角(也就是Esc下面)那个键包围起来,说明是命令。-1d是昨天,以此类推-1m是上个月等等 day=`/bin/date -v -1d +%Y%m%d`; //给文件改名 mv xxx.log xxx-${day}.log; //这里还要加上数据库的用户名密码,作用是更新日志(包括二进制日志和查询日志等等) mysqladmin flush-logs 打开mysql的慢查询日志记录 mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢? 其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上如下代码: log-slow-queries=/var/lib/mysql/slowquery.log long_query_time=2 注: log-slow-queries设置把日志写在那里,为空的时候,系统会给慢查询日志赋予主机名,并被附加slow.log./var/lib/mysql/slowquery.log为日志存放的文件的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录 long_query_time=2中的2表示查询超过两秒才记录. 如果设置了参数log-long-format,那么所有没有使用索引的查询也将被记录。在文件my.cnf或my.ini中加入下面这一行可以记录这些查询 这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用) # Time: 070927 8:08:52 # User@Host: root @ [192.168.0.20] # Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630 select id, name from manager where id in (66,10135); 这是慢查询日志中的一条,用了372秒,锁了136秒,返回152行,一共查了263630行 如果日志内容很多,用眼睛一条一条去看会累死,mysql自带了分析的工具,使用方法如下: 命令行下,进入mysql/bin目录,输入mysqldumpslow –help或--help可以看到这个工具的参数,主要有 Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] Parse and summarize the MySQL slow query log. Options are --verbose verbose --debug debug --help write this text to standard output -v verbose -d debug -s ORDER what to sort by (t, at, l, al, r, ar etc), 'at' is default -r reverse the sort order (largest last instead of first) -t NUM just show the top n queries -a don't abstract all numbers to N and strings to 'S' -n NUM abstract numbers with at least n digits within names -g PATTERN grep: only consider stmts that include this string -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard), default is '*', i.e. match all -i NAME name of server instance (if using mysql.server startup scrīpt) -l don't subtract lock time from total time -s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的 mysqldumpslow -s c -t 20 host-slow.log mysqldumpslow -s r -t 20 host-slow.log 上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。 mysqldumpslow -t 10 -s t -g “left join” host-slow.log 这个是按照时间返回前10条里面含有左连接的sql语句。 这个参数不知道支持不,没做测试呢log_output=FILE 这是指定日志输出到文件,还可指定输出到表,或者二者都有,或者不输出。可在运行时修改。 1、启动mysql的log-bin记录 方法昨天已经做过,就是修改主机上的my.cnf文件,它在FreeBSD系统的路径上一般是/var/db/mysql或/etc目录。 增加log-bin=/路径/文件名; 保存后,使用下面的命令激活log-bin服务。 # mysqladmin -uroot -ppassword flush-logs 如果系统没有使用动态参数文件my.cnf,则可以在启动服务的/usr/local/bin/mysqld_safe参数后面增加--log-bin=/路径/文件名,达到同样的效果。 2、把需要使用到的日志记录文件拷贝到备机上。假设我放到/root/mysql目录,文件名是mysql.bin.000001等。 3、使用mysqlbinlog命令恢复日志 # mysqlbinlog -d test /root/mysql/mysql-bin.000001|mysql -uroot -ppassword ※附录 1、关于mysqlbinlog在mysql 5.0上的使用方法,可以参考:官方资料 2、如果不知道log-bin存放的文件位置,可以使用下面的命令查看: mysql -uroot -ppassword -e 'SHOW BINLOG EVENTS \G' 3、当只是需要恢复部分记录的时候,你可以使用时间点或位置点来定位,例如: mysqlbinlog --start-date="2005-04-20 9:01:00" --stop-date="2005-04-20 10:00:01" /var/log/mysql/bin.123456|mysql -uroot -ppassword[code] 意思是恢复4月20日早上9点到10点这一段时间的数据。 [code]mysqlbinlog --start-position="368301" --stop-position="368312"/var/log/mysql/bin.123456| mysql -uroot -pmypwd 意思是重做368301到368312位置点之间的操作。(位置点可以就是用mysqlbinlog看到的at xxx节点) mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql 同样的,如果我们只是想查看某段时间的操作,直接把它导到一个文件即可。 4、mysql不会自动清除日志,可以使用它自带的mysql-log-rotate 脚本或手动编写脚本清除旧日志。
转载请注明原文地址: https://www.6miu.com/read-5023637.html

最新回复(0)