MySQL日志
来源:互联网 发布:淘宝短网址 编辑:程序博客网 时间:2024/06/07 02:18
一.日志管理
(一)、六种日志
1、错误日志
记录的内容:
服务器启动和关闭过程中的信息
服务器运行中的错误信息
事务调度器运行一个事件时产生的信息
在从服务器上启动从服务器进程是产生的信息
错误日志文件名格式:主机名.err 默认位置存放于数据目录下 log_warnings 警告 值为1则将警告信息记录到错误日志中 log.err
2、二进制日志 *
记录任何引起或可能引起数据变化的操作,不会记录查询语句的,对于数据恢复有着至关重要的作用
二进制日志作用:即时点恢复、主从复制
二进制日志在5.5中默认开启的,5.6默认是关闭的。
日志文件名:mysql-bin.XXXXXX
mysql-bin.index 二进制文件的索引
二进制日志格式:基于行:row基于语句:statement混合: mixed二进制事件所记录的内容:产生的时间 starttime、相对位置 position、语句或行等mysql> SHOW BINARY LOGS; 查看有哪些二进制日志文件mysql> SHOW MASTER STATUS; 当前正在使用的二进制日志文件mysql> SHOW BINLOG EVENTS IN '二进制日志文件'; 查看指定二进制日志中记录的事件 mysql> PURGE BINARY LOGS TO '日志文件'; 删除指定二进制日志文件前的二进制日志文件二进制日志滚动1)重启服务2)flush logs;mysql> FLUSH LOGS; 二进制日志滚动 将当前的日志中断并产生一个新的日志文件binlog_format 二进制日志的格式log-bin={YES|NO}是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。其仅用于显示是否启用了二进制日志,并不反应log-bin的设定值。作用范围为全局级别,属非动态变量。 sql_log_bin={ON|OFF}用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。sync_binlog=#设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。max_binlog_size 二进制日志文件最大值max_binlog_cache_size 二进制日志缓存的大小expire_logs_days 二进制日志文件过期的天数,0永远不过期
3、一般查询日志 :记录所有对数据库的请求信息(包括登录和查询等),默认不开启
日志量较大,占用磁盘空间
默认文件名:主机名.log 默认位置在数据目录
general_log 是否启用 默认关闭general_log_file 一般查询日志存放的位置log={OFF|ON} 是否启用记录所有语句的日志信息于一般查询日志中。5.6中已经弃用log_output={FILE|TABLE|NONE} 将日志记录在表、文件或不记录
4、慢查询日志:记录的是查询时间超过指定时间的查询语句,一般用于优化查询。
默认也是不开启的。
long_query_time=# 设定区别慢查询与一般查询的语句执行时间长度。这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。其最小值为0,默认值为10,单位是秒钟。它也支持毫秒级的解析度。作用范围为全局或会话级别,可用于配置文件,属动态变量。 slow_query_log={OFF|ON} 是否启用慢查询日志 slow_query_log_file 慢查询日志所记录的文件
5、事务日志
是ACID(原子性、一致性、隔离性、持久性)的重要组件 将随机IO转换为顺序IO 需要存储引擎支持事务
innodb_flush_log_at_trx_commit: 0: 每秒同步,并执行磁盘flush操作; 1:每事务同步,并执行磁盘flush操作; 2: 每事务同步,但不执行磁盘flush操作; innodb_log_buffer_size 缓存大小 默认10M innodb_log_file_size 日志文件大小 默认5M innodb_log_files_in_group 组中包含的日志文件个数 innodb_log_group_home_dir 日志组的位置 innodb_mirrored_log_groups 日志组的镜像
6、中继日志
应用于主从同步
(二)、开启各种日志,修改配置文件
1、开启通用查询日志,指定文件名 [root@mysql ~]# vim /etc/my.cnf 在mysqld段添加如下行: log=general_select_log //等号的右边是日志文件的名字,自定义的2、开启慢查询日志,指定文件名,设置超时时间 [root@mysql ~]# vim /etc/my.cnf 在mysqld段添加如下行: log-slow-queries=slow_log //开启慢查询日志,规定文件名 long_query_time=5 //设置慢查询超时时间3、错误日志,修改前缀名 [root@mysql ~]# vim /etc/my.cnf 在mysqld段添加如下行: log-error=errorlog //错误日志文件名变为errorlog.err4、开启二进制日志在mysqld段添加如下行 log-bin=mysql-bin //5.5默认开启 [root@mysql ~]# /etc/init.d/mysqld restart [root@mysql ~]# ls /data/mysql/slow_log /data/mysql/slow_log [root@mysql ~]# ls /data/mysql/general_select_log /data/mysql/general_select_log [root@mysql ~]# ls /data/mysql/errorlog.err /data/mysql/errorlog.err 1)验证通用查询日志: mysql> show databases; mysql> select * from dept; ERROR 1046 (3D000): No database selected mysql> select * from up.dept; [root@mysql ~]# cat /data/mysql/general_select_log /usr/local/mysql5.5/bin/mysqld, Version: 5.5.11-log (Source distribution). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument 150915 14:24:08 1 Connect root@localhost on 1 Query show databases 150915 14:25:57 1 Query select * from dept 150915 14:26:02 1 Query select * from up.dept 2)验证慢查询日志 mysql> select sleep(8); +----------+ | sleep(8) | +----------+ | 0 | +----------+ 1 row in set (8.00 sec) [root@mysql ~]# cat /data/mysql/slow_log /usr/local/mysql5.5/bin/mysqld, Version: 5.5.11-log (Source distribution). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 150915 14:28:35 # User@Host: root[root] @ localhost [] # Query_time: 8.001211 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1442298515; select sleep(8);
(三)、二进制日志的查看 mysqlbinlog
[root@mysql ~]# cd /data/mysql/[root@mysql mysql]# mysqlbinlog mysql-bin.000011[root@mysql mysql]# mysqlbinlog mysql-bin.000011 | more //分页查看 # at 4 //事件发生的位置信息 #150914 16:30:27 //事件发生的时间信息
(四)、如何使用二进制日志进行数据恢复?
假设凌晨2点做一次完全备份,之后每小时做一次增量备份,比如数据库在早上9点半出现问题,恢复数据怎么办? 首先使用全备份恢复到凌晨2点;之后分别将3~9点的增量备份恢复,恢复到9点的状态; 剩余的半个小时,利用二进制日志进行恢复。 1、根据时间点进行数据恢复 mysql> use up; mysql> insert into test values(1); mysql> insert into test values(2); mysql> insert into test values(3); mysql> insert into test values(4); mysql> delete from test where id>=3; //假装误删除 mysql> select * from test; +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec) [root@mysql mysql]# mysqlbinlog mysql-bin.000012 | less #150915 15:00:09 #150915 15:01:05 [root@mysql mysql]# mysqlbinlog --start-datetime='2016-06-01 15:00:09' --stop-datetime='2016-06-01 15:01:05' mysql-bin.000012 //找到起始点和结束点 /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #150915 14:21:19 server id 1 end_log_pos 107 Start: binlog v 4, server v 5.5.11-log created 150915 14:21:19 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ' 37j3VQ8BAAAAZwAAAGsAAAABAAQANS41LjExLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAADfuPdVEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA== '/*!*/; # at 554 #150915 15:00:09 server id 1 end_log_pos 620 Query thread_id=1 exec_time=0 error_code=0 SET TIMESTAMP=1442300409/*!*/; SET @@session.pseudo_thread_id=1/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=0/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; BEGIN /*!*/; # at 620 #150915 15:00:09 server id 1 end_log_pos 707 Query thread_id=1 exec_time=0 error_code=0 use up/*!*/; SET TIMESTAMP=1442300409/*!*/; insert into test values(3) /*!*/; # at 707 #150915 15:00:09 server id 1 end_log_pos 734 Xid = 10 COMMIT/*!*/; # at 734 #150915 15:00:12 server id 1 end_log_pos 800 Query thread_id=1 exec_time=0 error_code=0 SET TIMESTAMP=1442300412/*!*/; BEGIN /*!*/; # at 800 #150915 15:00:12 server id 1 end_log_pos 887 Query thread_id=1 exec_time=0 error_code=0 SET TIMESTAMP=1442300412/*!*/; insert into test values(4) /*!*/; # at 887 #150915 15:00:12 server id 1 end_log_pos 914 Xid = 11 COMMIT/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
[root@mysql mysql]# mysqlbinlog –start-datetime=’2016-06-01 15:00:09’ –stop-datetime=’2016-06-01 15:01:05’ mysql-bin.000012 | mysql -u root -p //恢复数据
Enter password:
2、根据位置点进行恢复
–start-position=4
–stop-position=107
[root@mysql mysql]# mysqlbinlog –start-position=620 –stop-position=914 mysql-bin.000012 | mysql -u root -p
(五)、对日志的管理
删除日志 不要轻易删除
1)删除某个日志之前的所有日志
mysql> purge master logs to ‘mysql-bin.000006’; //删除6以前的日志(不包含6)
2)删除多少天以前的日志文件
mysql> purge master logs before date_sub(current_date,interval 1 day); //删除一天以前的日志
3)重置二进制日志
mysql> reset master; //从000001开始重新计数
4)手动生成新的二进制日志文件
mysql> flush logs;
查看日志信息
mysql> show master logs; //显示二进制日志文件的名字和大小的
+——————+———–+
| Log_name | File_size |
+——————+———–+
| mysql-bin.000001 | 150 |
| mysql-bin.000002 | 107 |
+——————+———–+
2 rows in set (0.00 sec)
二.keepalived+mysql
环境描述:OS:redhat6.5_X64MASTER:192.168.0.202BACKUP:192.168.0.203VIP:192.168.0.2041、配置两台Mysql主主同步[root@master ~]# yum install mysql-server mysql -y [root@master ~]# service mysqld start [root@master ~]# mysqladmin -u root password 123.com [root@master ~]# vi /etc/my.cnf #开启二进制日志,设置id [mysqld] server-id = 1 #backup这台设置2 log-bin = mysql-bin binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库 auto-increment-increment = 2 #字段变化增量值 auto-increment-offset = 1 #初始字段ID为1 slave-skip-errors = all #忽略所有复制产生的错误 [root@master ~]# service mysqld restart#先查看下log bin日志和pos值位置mysql>show master status;master配置如下:[root@ master ~]# mysql -u root -p123.com mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication'; mysql> flush privileges; mysql> change master to -> master_host='192.168.0.203', -> master_user='replication', -> master_password='replication', -> master_log_file='mysql-bin.000002', -> master_log_pos=106; #对端状态显示的值 mysql> start slave; #启动同步backup配置如下:[root@backup ~]# mysql -u root -p123.com mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication'; mysql> flush privileges; mysql> change master to -> master_host='192.168.0.202', -> master_user='replication', -> master_password='replication', -> master_log_file='mysql-bin.000002', -> master_log_pos=106; mysql> start slave;mysql>show slave status\G;(查看同步状态)建库、插入数据验证是否同步2、配置keepalived实现热备[root@backup ~]# yum install -y pcre-devel openssl-devel popt-devel #安装依赖包[root@master ~]# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz [root@master ~]# tar zxvf keepalived-1.2.7.tar.gz [root@master ~]# cd keepalived-1.2.7 [root@master ~]# --prefix=/usr/local/keepalived make && make installyum groupinstall -y "Develepment Tools"#将keepalived配置成系统服务[root@master ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ [root@master ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@master ~]# mkdir /etc/keepalived/ [root@master ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ [root@master ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/[root@master ~]# vi /etc/keepalived/keepalived.conf ! Configuration File forkeepalived global_defs { notification_email { test@sina.com } notification_email_from admin@test.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA #标识,双主相同 } vrrp_instance VI_1 { state BACKUP #两台都设置BACKUP interface eth0 virtual_router_id 51 #主备相同 priority 100 #优先级,backup设置90 advert_int 1 nopreempt #不主动抢占资源,只在master这台优先级高的设置,backup不设置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.204 } } virtual_server 192.168.0.204 3306 { delay_loop 2 #lb_algo rr #LVS算法,用不到,我们就关闭了 #lb_kind DR #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL persistence_timeout 50 #同一IP的连接60秒内被分配到同一台真实服务器 protocol TCP real_server 192.168.0.202 3306 { #检测本地mysql,backup也要写检测本地mysql weight 3 notify_down /usr/local/keepalived/mysql.sh #当mysq服down时,执行此脚本,杀死keepalived实现切换 TCP_CHECK { connect_timeout 3 #连接超时 nb_get_retry 3 #重试次数 delay_before_retry 3 #重试间隔时间 } }[root@master ~]# vi /usr/local/keepalived/mysql.sh #!/bin/bash pkill keepalived [root@master ~]# chmod +x /usr/local/keepalived/mysql.sh [root@master ~]# /etc/init.d/keepalived start#backup服务器只修改priority为90、nopreempt不设置、real_server设置本地IP。#授权两台Mysql服务器允许root远程登录,用于在其他服务器登陆测试!mysql> grant all on *.* to'root'@'192.168.0.%' identified by '123.com';mysql> flush privileges;3、测试高可用性1、通过Mysql客户端通过VIP连接,看是否连接成功。2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上
- mysql日志-二进制日志
- MySQL日志--查询日志
- mysql日志
- mysql日志
- Mysql日志
- mysql日志
- mysql日志
- mysql日志
- MySQL日志
- mysql日志
- mysql 日志
- mysql 日志
- mysql日志
- mysql日志
- mysql日志
- MySQL日志
- mysql日志
- mysql日志
- 1007. 素数对猜想 (20)
- (三)Linux进程、fork、wait、exec函数
- QT。子窗口不析构
- oracle 行号
- tomcat windows 下发布多个域名webapp
- MySQL日志
- 系统性思维,养成模式化学习习惯
- js截取地址栏参数
- 安卓自定义shape并实现带有阴影的按钮背景效果
- 系统+线程+进程
- GitHub初学入门之快速简洁上传项目到Git
- android开发环境搭建
- 笔记
- 关联源码