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在哪台服务器上
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 解大便时肛门痒怎么办 生完孩子肛门痒怎么办 把达克宁软膏摸到肛门怎么办 痔疮手术后肛门痒怎么办 便秘拉完屁股疼怎么办 屁股拉屎拉破了怎么办 6岁小朋友屁眼痒怎么办 孩子屁屁偶尔痒怎么办 1岁半宝宝屁眼痒怎么办 3岁宝宝肛门痒怎么办 得痔疮发烧了怎么办啊 痔疮手术后肚子胀气怎么办 乙肝引起的发烧头痛怎么办 肠癌手术后吃了会胃疼怎么办 来月经肛门坠痛怎么办 总想排便还有血怎么办 闻了别人的口臭怎么办 有内痔肛门经常不舒服怎么办 做完肠镜肛门疼怎么办 3周宝宝得皮彦怎么办 痔疮有蚕豆大了怎么办 顺生肛门坠胀怎么办 生孩子痔疮脱出不能回纳怎么办 痔疮犯了屁眼疼怎么办 孕晚期得痔疮了怎么办 孕39周痔疮严重怎么办 顺产后长痔疮了怎么办 怀孕了犯痔疮了怎么办 怀孕了痔疮犯了怎么办 痔疮手术后肛裂怎么办 痔疮引起的肛裂怎么办 痔疮手术后伤口不愈合怎么办 痔疮手术后伤口痒怎么办 肛瘘手术十五天后伤口疼怎么办 leep刀后hpv还是阳性怎么办 结肠息肉钳除后怎么办 痔疮手术后排便困难怎么办 住院未结账跑了怎么办 来月经痔疮犯了怎么办 安保压不下宫缩怎么办 肛周脓肿术后假性愈合怎么办