基本认知,Log二进制日志文件的基本操作命令小

前言

  在前不久的劳作中,由于本人粗(zuo)心(si)误update操作导致几百行的数目出现错误,在急不可待的还要(那时候笔者依旧不知底除了备份之后还会有binlog日志苏醒)立马查资料学习binlog的过来,随后立即打开了回复。纵然能够伪装自个儿没出错(emmmmm......最终依旧得肯定的!),但下班以往心绪无法悠久平复,立马张开Computer实行叁遍实验记录技术对得起协和犯的不当。

  注:此番尝试是在Wnidows下进展的(网络Linux挺多,可是Windows的什么少,加上自己笔者的管理器也是Win7就回顾做叁遍实施吧!

 


 

binlog 基本认知

MySQL Binary Log也正是常说的bin-log, ,是mysql推行改变产生的二进制日志文件,其重大效用有多个:
* 数据苏醒
* 主从数据库。用于slave端推行增删改,保持与master同步。

本文转发于:

1、初识binlog

(1)MySQL的binlog便是豪门平常所说的Binary Log,即bin-log,是MySQL存款和储蓄对数据库改变的二进制文件,也正是记录了具有DDL与DML(select除此而外)语句,利用它主要能够做两件事:

  • 数据苏醒:通过mysqlbinog工具举办复苏;
  • 多少复制:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达成master-slave数据一致的目标。

(2)如何查看MySQL的日记情形(是或不是开启等),当MySQL还没张开时候,通过命令:show variables like ‘log_bin%'查看

mysql> show variables like 'log_bin%';
 --------------------------------- ------- 
| Variable_name                   | Value |
 --------------------------------- ------- 
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
 --------------------------------- ------- 
5 rows in set

(3)如何在Wnidows在修改log_bin状态为ON开启呢?

  • 找到C:ProgramDataMySQLMySQL Server 5.7my.ini文件(只顾:是C盘下遮蔽文件夹ProgramData,并非Program Files下)  

  图片 1

  • 充实/修改常用的配备属性

  图片 2

(4)常用简单属性表达:除了以上log_bin、binlog_format八个简单的配置外,还是能有别的的属性配置

  • log-bin = /xxx/xxx/mysql_bin #binlog日志文件,以mysql_bin开头,六个数字结尾的文件:mysql_bin.000001,并且会将文件存储在相应的xxx/xxx路径下,如果只配置mysql_bin的话默认在C:ProgramDataMySQLMySQL Server 5.7Data下;``
  • binlog_format = ROW #binlog日志格式,默认为STATEMENT:每一条SQL语句都会被记录;ROW:仅记录哪条数据被修改并且修改成什么样子,是binlog开启并且能恢复数据的关键;
  • expire_logs_days= 7 #binlog过期清理时间;
  • ``max_binlog_size = 100m #binlog每个日志文件大小;
  • binlog_cache_size = 4m #binlog缓存大小;
  • max_binlog_cache_size = 512m #最大binlog缓存大小。

    MySQL的二进制日志能够说是MySQL最根本的日记了,它记录了全数的DDL和DML(除了数量查询语句)语句,以事件情势记录,还含有语句所进行的成本的光阴,MySQL的二进制日志是业务安全型的。

1.开启binary log功能

binlog 基本认知

2、恢复生机数据测验

(1)准备表user

mysql> select * from user;
 ---- ---------- ---------------------------------- 
| id | name     | password                         |
 ---- ---------- ---------------------------------- 
|  1 | Zhangsan | 2d7284808e5111e8af74201a060059ce |
|  2 | Lisi     | 2d73641c8e5111e8af74201a060059ce |
|  3 | Wangwu   | 2d73670c8e5111e8af74201a060059ce |
 ---- ---------- ---------------------------------- 
3 rows in set

 (2)误update恢复,譬喻作者在update user set name = 'Lijian' where id = 1;的时候忘写where id = 1主要原则,结果形成整个数据被更新

mysql> update user set name ='Lijian';
Query OK, 3 rows affected
Rows matched: 3  Changed: 3  Warnings: 0
mysql> select*from user;
 ---- -------- ---------------------------------- 
| id | name   | password                         |
 ---- -------- ---------------------------------- 
|  1 | Lijian | 2d7284808e5111e8af74201a060059ce |
|  2 | Lijian | 2d73641c8e5111e8af74201a060059ce |
|  3 | Lijian | 2d73670c8e5111e8af74201a060059ce |
 ---- -------- ---------------------------------- 
3 rows in set

  那一年你早晚很慌,不过先不要慌(实际上慌也没用),先看未有备份,若无再看是还是不是开启binlog(show variables like ‘log_bin%'),假使两岸都尚未(作者深信大家都会定时备份 binlog)从数据库这一个范围是不能复苏的了,借使binlog开启的话,一切都好说。就起来施行下边几步恢复生机吧!

  率先步:找到当前mysql记录的binlog文件,实施show master status;

  第二步:查看binlog,定位误操作的pos大概时间段。实施show binlog events in 'mysql_bin.000001';

mysql> show binlog events in 'mysql_bin.000001';
 ------------------ ----- ---------------- ----------- ------------- --------------------------------------- 
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
 ------------------ ----- ---------------- ----------- ------------- --------------------------------------- 
| mysql_bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.12-log, Binlog ver: 4 |
| mysql_bin.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
| mysql_bin.000001 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql_bin.000001 | 219 | Query          |         1 |         291 | BEGIN                                 |
| mysql_bin.000001 | 291 | Table_map      |         1 |         344 | table_id: 108 (test.user)             |
| mysql_bin.000001 | 344 | Update_rows    |         1 |         650 | table_id: 108 flags: STMT_END_F       |
| mysql_bin.000001 | 650 | Xid            |         1 |         681 | COMMIT /* xid=22 */                   |
 ------------------ ----- ---------------- ----------- ------------- --------------------------------------- 
7 rows in set

  第三步:进入C:ProgramDataMySQLMySQL Server 5.7Data执行mysqlbinlog --start-position=219 --stop-position=681 mysql-bin.000001 > e:\update.sql将update部分单独备份出来到E盘下为update.sql  

 图片 3 

  第四步:登录mysql(mysql -uroot -p123)

  第五步:推行source e:update.sql恢复生机数据,部分截图如下:

  图片 4

  **第六步:查看结果**

mysql> select * from user;
 ---- ---------- ---------------------------------- 
| id | name     | password                         |
 ---- ---------- ---------------------------------- 
|  1 | Zhangsan | 2d7284808e5111e8af74201a060059ce |
|  2 | Lisi     | 2d73641c8e5111e8af74201a060059ce |
|  3 | Wangwu   | 2d73670c8e5111e8af74201a060059ce |
 ---- ---------- ---------------------------------- 
3 rows in set

    一般的话开启二进制日志大约会有1%的性质损耗(参见MySQL官方汉语手册 5.1.24版)。二进制有三个最关键的行使处境:

     供给修改mysql的铺排文件,本篇的尝试情况是win7,配置文件为mysql安装目录MySQL Server 5.1下的my.ini,增多一句log_bin = mysql_bin即可 

    MySQL的二进制日志能够说是MySQL最重大的日记了,它记录了颇具的DDL和DML(除了数量查询语句)语句,以事件情势记录,还包括语句所试行的损耗的时辰,MySQL的二进制日志是事业安全型的。

3、总结

  (1)选拔binlog只可以针对针对数据量不是繁多的情形,真正的生育情形每一个多少个G的日记文件,不仅是光靠binlog恢复生机的,还恐怕有更多的不二等秘书技,在此只是做贰个轻巧易行的求学记录!

  (2)决断时间binlog日志的日子阶段与pos地方很关键,但是供给领会有关binlog的不知凡几参数!

  (3)之后天真的感觉开荒人士就无需太精通数据库相关的运转,然而明日经历过才晓得数据库的连带文化也是开垦职员必得询问的!

 

    其一:MySQLReplication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目标。

  eg: 
  [mysqld] 
    ...... 
    log_bin = mysql_bin 
    ...... 
  log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为: 
    mysql_bin.000001 
    mysql_bin.000002 
    ...... 

    一般的话开启二进制日志大概会有1%的属性损耗(参见MySQL官方汉语手册 5.1.24版)。二进制有八个最要害的采取情形:

    其二:自然就是数据恢复生机了,通过动用mysqlbinlog工具来使恢复生机数据。

  
    配置保存以后重启mysql的服务器,用show variables like  '%bin%'查看bin-log是不是开启,如图: 

    其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达成master-slave数据一致的指标。

    二进制日志包蕴两类公事:二进制日志索引文件(文件名后缀为.index)用于记录全数的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库全部的DDL和DML(除了数量查询语句)语句事件。

图片 5

    其二:自然正是数据苏醒了,通过行使mysqlbinlog工具来使苏醒数据。

一、开启binlog日志:

2.查看产生的binary log

    二进制日志包蕴两类公事:二进制日志索引文件(文件名后缀为.index)用于记录全部的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库全体的DDL和DML(除了数据查询语句)语句事件。

    vi编辑展开mysql配置文件

   bin-log因为是二进制文件,不能够经过记事本等编辑器直接展开查看,mysql提供三种艺术查看方式,在介绍在此之前,大家先对数据库实行一下增加和删除改的操作,不然log里边数据有一点空。 

一、开启binlog日志:

    # vi /usr/local/mysql/etc/my.cnf    在[mysqld] 区块

 create table bin( id int(10) primary key auto_increment,name varchar(255));

    vi编辑打开mysql配置文件

    设置/增多log-bin=mysql-bin  确认是开发状态(值mysql-bin 是日记的基本名或前缀名);

(测量检验前本身一度建表) 

    # vi /usr/local/mysql/etc/my.cnf

    重启mysqld服务使配置生效

 insert into bin(name) values ('orange'); 

    在[mysqld] 区块

    # pkill mysqld# /usr/local/mysql/bin/mysqld_safe --user=mysql &二、也可登入mysql服务器,通过mysql的变量配置表,查看二进制日志是不是已打开单词:variable[ˈvɛriəbəl] 变量

     1.在顾客端中使用  show binlog events in 'mysql_bin.000001'  语句实行查看,为了排序美观,能够在结尾加G使结果横变纵,此时最后不需求加;语句截至符。
      eg:

    设置/增多 log-bin=mysql-bin  确认是开采状态(值 mysql-bin 是日记的基本名或前缀名);

    登陆服务器

mysql> show binlog events in 'mysql_bin.000001'G 
...............省略............... 
*************************** 3. row *************************** 
 Log_name: mysql_bin.000001 
  Pos: 174 
Event_type: Intvar 
 Server_id: 1 
End_log_pos: 202 
  Info: INSERT_ID=2 
*************************** 4. row *************************** 
 Log_name: mysql_bin.000001 
  Pos: 202 
Event_type: Query 
 Server_id: 1 
End_log_pos: 304 
  Info: use `test`; insert into bin(name) values ('orange') 
*************************** 5. row *************************** 
...............省略............... 

    重启mysqld服务使配置生效

    # /usr/local/mysql/bin/mysql -uroot -p123456mysql> show variables like 'log_%';

  • Log_name:此条log存在特别文件中,从下面能够见见那2条log皆存在与mysql_bin.000001文件中。
  • Pos:log在bin-log中的开端地点
  • Event_type:log的类型消息
  • Server_id:能够查看配置中的server_id,表示log是极度服务器发生
  • End_log_pos:log在bin-log中的结束地方
  • Info:log的有个别备注音讯,能够直观的看到进行了怎么操作

    # pkill mysqld

    ---------------------------------------- ---------------------------------------     | Variable_name                          | Value                                |    ---------------------------------------- ---------------------------------------     | log_bin                                | ON                                    | ------> ON代表已经开启binlog日志

2.用mysql自带的工具mysqlbinlog,那是我们就须要知道bin-log存在硬盘的怎么样岗位,win7暗许存在C:ProgramDataMySQLMySQL Server 5.1data文件夹上边,若无此文件夹,那大家能够透过布置文件中的  datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 定位,若是还尚未,那自身就能说“各样系统的搜求效果都做的没错!”。这种查看方式就没特别美貌了,如下

    # /usr/local/mysql/bin/mysqld_safe --user=mysql &

    | log_bin_basename                      | /usr/local/mysql/data/mysql-bin      |    | log_bin_index                          | /usr/local/mysql/data/mysql-bin.index |    | log_bin_trust_function_creators        | OFF                                  |    | log_bin_use_v1_row_events              | OFF                                  |    | log_error                              | /usr/local/mysql/data/martin.err      |    | log_output                            |FILE|    | log_queries_not_using_indexes          | OFF                                  |    | log_slave_updates                      | OFF                                  |    | log_slow_admin_statements              | OFF                                  |    | log_slow_slave_statements              | OFF                                  |    | log_throttle_queries_not_using_indexes | 0                                    |    | log_warnings                          | 1                                    |    ---------------------------------------- --------------------------------------- 三、常用binlog日志操作命令

C:ProgramDataMySQLMySQL Server 5.1data>mysqlbinlog mysql_bin.000001 
/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
DELIMITER /*!*/; 
# at 4 
#121015 16:35:56 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.51-community-log created 121015 16:35:56 at startup 
ROLLBACK/*!*/; 
BINLOG ' 
7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
'/*!*/; 
# at 106 
#121015 16:36:51 server id 1 end_log_pos 174 Query thread_id=2  exec_time=0  error_code=0 
SET TIMESTAMP=1350290211/*!*/; 
SET @@session.pseudo_thread_id=2/*!*/; 
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/; 
SET @@session.sql_mode=1344274432/*!*/; 
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 174 
#121015 16:36:51 server id 1 end_log_pos 202 Intvar 
SET INSERT_ID=3/*!*/; 
# at 202 
#121015 16:36:51 server id 1 end_log_pos 309 Query thread_id=2  exec_time=0  error_code=0 
use test/*!*/; 
SET TIMESTAMP=1350290211/*!*/; 
insert into bin(name) values('xishizhaohua') 
/*!*/; 
# at 309 
#121015 16:36:51 server id 1 end_log_pos 336 Xid = 28 
COMMIT/*!*/; 
# at 336 
#121015 16:37:25 server id 1 end_log_pos 379 Rotate to mysql_bin.000002 pos: 4 
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 

二、也可登入mysql服务器,通过mysql的变量配置表,查看二进制日志是还是不是已拉开 单词:variable[ˈvɛriəbəl] 变量

    1.翻看全体binlog日志列表

尽管如此排版有一些乱,但从图中大家得以获得越多信息,如时间戳,自增的挥舞,是还是不是自动提交业务等音讯。如下图为从中提取的一局部。

    登入服务器

      mysql> show master logs;

图片 6

    # /usr/local/mysql/bin/mysql -uroot -p123456

    2.查看master状态,即最终(最新)二个binlog日志的号子名称,及其最后一个操作事件pos停止点(Position)值

3.利用bin_log复苏数据

    mysql> show variables like 'log_%';

      mysql> show master status;

    (1).最长用的正是过来钦命数据端的多寡了,能够直接回复到数据库中: 

图片 7

    3.刷新log日志,自此刻启幕发出二个新编号的binlog日志文件

 mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456 

三、常用binlog日志操作命令

      mysql>flush logs;

      亦可导出为sql文件,再导入至数据库中: 

    1.查看全数binlog日志列表

      注:每当mysqld服务重启时,会自行实践此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

  mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:1.sql 
  source d:1.sql 

      mysql> show master logs;

    4.重置(清空)所有binlog日志

     (2).钦定开始竣事地方,从上边的查阅产生的binary log大家得以领略某些log的启幕到甘休的岗位,我们可以在回复的长河中钦命回复从A地方到B地方的log.须要用上面两个参数来钦命: 

    2.查看master状态,即最终(最新)贰个binlog日志的号子名称,及其最后二个操作事件pos结束点(Position)值

      mysql>reset master;

 --start-positon="50" //指定从50位置开始 
 --stop-postion="100"//指定到100位置结束 

      mysql> show master status;

四、查看有个别binlog日志内容,常用有二种艺术:

   最后介绍多少个bin_log的操作:
   (1).产看最终一个bin日志文件是丰裕,现在任务

    3.刷新log日志,自此刻开班产生两个新编号的binlog日志文件

    1.选拔mysqlbinlog自带查看命令法:

图片 8

      mysql> flush logs;

      注: binlog是二进制文件,普通文书查看器cat more vi等都力不胜任开垦,必需利用自带的 mysqlbinlog 命令查看

    (2).启用新的日志文件,一般备份完数据库后进行

      注:每当mysqld服务重启时,会活动推行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

          binlog日志与数据库文件在同目录中(作者的条件部署安装是选择在/usr/local/mysql/data中)

图片 9

    4.重置(清空)所有binlog日志

      在MySQL5.5之下版本选用mysqlbinlog命令时一旦报错,就增加“--no-defaults”选项

    (3).清空现成的所用bin-log

      mysql> reset master;

      # /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013        上面截取三个有的深入分析:

图片 10

四、查看某些binlog日志内容,常用有二种格局:

        ...............................................................................# at 552#131128 17:50:46 server id 1  end_log_pos 665  Query  thread_id=11    exec_time=0    error_code=0 ---->实行时间:17:50:46;pos点:665SET TIMESTAMP=1385632246/*!*/;

4.binary log有关变量和参数

    1.用到mysqlbinlog自带查看命令法:

        update zyyshop.stu set name='李四' where id=4              ---->执行的SQL

命令行参数

      注: binlog是二进制文件,普通文书查看器cat more vi等都力无法支张开,必需采用自带的 mysqlbinlog 命令查看

        /*!*/;

  --log-bin [=file_name]

          binlog日志与数据库文件在同目录中(笔者的遭逢布置安装是选择在/usr/local/mysql/data中)

        # at 665#131128 17:50:46 server id 1  end_log_pos 692  Xid = 1454 ---->试行时间:17:50:46;pos点:692 ...............................................................................        注: server id 1    数据库主机的服务号;

  设置此参数表示启用binlog成效,并制定路线名称。

      在MySQL5.5以下版本接纳mysqlbinlog命令时只要报错,就增进“--no-defaults”选项

            end_log_pos 665 pos点

  --log-bin-index[=file]

      # /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013

            thread_id=11    线程号

  设置此参数是点名二进制索引文件的不二秘籍与名称。

        上边截取二个片段分析:

    2.方面这种措施读抽出binlog日志的全文内容非常多,不轻便辨别查看pos点音信,这里介绍一种特别有利的查询命令:

  --max_binlog_size

        ...............................................................................

      mysql> show binlog events [IN 'log_name'] [FROMpos] [LIMIT [offset,] row_count];

 Binlog最大值,最大和暗中同意值是1GB,该装置并不可能严酷调节Binlog的大小,越发是Binlog相比左近最大值而又境遇一个十分大事务时,

        # at 552

            选项分析:

为了有限支撑职业的完整性,不恐怕做切换日志的动作,只好将该事务的具备SQL都记录进当前几日记,直到专门的学业甘休。

        #131128 17:50:46 server id 1  end_log_pos 665  Query  thread_id=11    exec_time=0    error_code=0 ---->实践时间:17:50:46;pos点:665

              IN 'log_name'  钦命要查询的binlog文件名(不钦命就是第三个binlog文件)

  --binlog-do-db=db_name

        SET TIMESTAMP=1385632246/*!*/;

              FROM pos        钦点从哪些pos开头点开头查起(不点名就是从整个文件第一个pos点最初算)

  此参数表示只记录钦命数据库的二进制日志

        update zyyshop.stu set name='李四' where id=4              ---->执行的SQL

              LIMIT [offset,] 偏移量(不点名就是0)

  --binlog-ignore-db=db_name

        /*!*/;

              row_count      查询总条数(不点名就是全体行)

  此参数表示不记录钦命的数据库的二进制日志

        # at 665

            截取部分查询结果:

系统变量

        #131128 17:50:46 server id 1  end_log_pos 692  Xid = 1454 ---->实行时间:17:50:46;pos点:692

            *************************** 20. row ***************************                Log_name:mysql-bin.000021  ----------------------------------------------> 查询的binlog日志文件名

  log_bin

        ...............................................................................

                    Pos: 11197 ----------------------------------------------------------> pos起始点:              Event_type: Query ----------------------------------------------------------> 事件类型:Query

  binlog_cache_size

        注: server id 1    数据库主机的服务号;

              Server_id: 1 --------------------------------------------------------------> 标志是由哪台服务器推行的

  此参数表示binlog使用的内部存款和储蓄器大小,能够经过情景变量binlog_cache_use和binlog_cache_disk_use来帮衬测试。

            end_log_pos 665 pos点

            End_log_pos: 11308 ----------------------------------------------------------> pos结束点:11308(即:下行的pos起始点)

  max_binlog_cache_size

            thread_id=11    线程号

                    Info:use`zyyshop`; INSERT INTO `team2` VALUES (0,345,'asdf8er5') ---> 执行的sql语句

  此参数表示binlog使用的内部存款和储蓄器最大的尺码

    2.方面这种格局读抽取binlog日志的全文内容非常多,不轻便辨别查看pos点新闻,这里介绍一种尤其有助于的询问命令:

            *************************** 21. row ***************************                Log_name:mysql-bin.000021Pos: 11308 ----------------------------------------------------------> pos起始点:11308(即:上行的pos结束点)

  binlog_cache_use

      mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

              Event_type: Query

  使用二进制日志缓存的事体数量

            选项分析:

              Server_id: 1            End_log_pos: 11417                    Info:use`zyyshop`;/*!40000 ALTER TABLE `team2` ENABLE KEYS */*************************** 22. row ***************************                Log_name:mysql-bin.000021Pos: 11417              Event_type: Query

  binlog_cache_disk_use

              IN 'log_name'  钦赐要询问的binlog文件名(不点名就是第二个binlog文件)

              Server_id: 1            End_log_pos: 11510                    Info:use`zyyshop`; DROP TABLEIF EXISTS `type`

  使用二进制日志缓存但超越binlog_cache_size值并行使不经常文件来保存事务中的语句的事务数量。

              FROM pos        内定从哪些pos初始点初步查起(不点名便是从整个文件首个pos点开首算)

      那条语句能够将钦定的binlog日志文件,分成有效事件行的格局赶回,并可应用limit钦点pos点的苗头偏移,查询条数;

  binlog_do_db

              LIMIT [offset,] 偏移量(不点名就是0)

      A.查询第一个(最先)的binlog日志:

  binlog_ignore_db

              row_count      查询总条数(不钦命就是全体行)

        mysql> show binlog eventsG;

  sync_binlog

            截取部分查询结果:

      B.钦命询问mysql-bin.000021 那个文件:

  这么些参数直接影响mysql的属性和完整性。

            *************************** 20. row ***************************

        mysql> show binlog events in 'mysql-bin.000021'G;

  sync_binlog=0:

           Log_name: mysql-bin.000021  ----------------------------------------------> 查询的binlog日志文件名

      C.钦点查询mysql-bin.000021 这么些文件,从pos点:8224发轫查起:

  当专门的学业提交后,Mysql仅仅是将binlog_cache中的数据写入binlog文件,但不施行fsync之类的磁盘,同步指令通告文件系统将缓存刷新到磁盘,而让Filesystem自行决定哪天来做联合,这些是性质最棒的。

                    Pos: 11197 ----------------------------------------------------------> pos起始点:

        mysql> show binlog events in 'mysql-bin.000021' from 8224G;

  sync_binlog=0,在张开n次事务提交之后,Mysql将实践叁回fsync之类的磁盘同步指令,布告文件系统将Binlog文件缓存刷新到磁盘。

              Event_type: Query ----------------------------------------------------------> 事件类型:Query

      D.内定询问mysql-bin.000021 这一个文件,从pos点:8224开头查起,查询10条

  Mysql中暗许的装置是sync_binlog=0,即不做别的强制性的磁盘刷新指令,这时质量是最棒的,但危机也是最大的。一旦系统Crash,在文件系统缓存中的全体Binlog音信都会丢弃。

              Server_id: 1 --------------------------------------------------------------> 标记是由哪台服务器推行的

        mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 10G;

您只怕感兴趣的稿子:

  • 深入分析mysql二进制日志处总管务与非事务性语句的区分
  • MySQL日志文件详解
  • Mysql日志文件和日志类型介绍
  • mysql二进制日志文件恢复生机数据库
  • 教您活动还原MySQL数据库的日记文件(binlog)
  • mysql日志文件在哪 怎么着修改MySQL日志文件地点
  • 缓和Mysql减少事务日志和日志文件过大不可能收缩难题

            End_log_pos: 11308 ----------------------------------------------------------> pos结束点:11308(即:下行的pos起始点)

      E.钦赐询问mysql-bin.000021 那几个文件,从pos点:8224上马查起,偏移2行,查询10条

                    Info: use `zyyshop`; INSERT INTO `team2` VALUES (0,345,'asdf8er5') ---> 执行的sql语句

        mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 2,10G;

            *************************** 21. row **********************************************

五、复苏binlog日志实验(zyyshop是数据库)

                Log_name: mysql-bin.000021

    1.要是现行反革命是黎明(英文名:lí míng)4:00,小编的布署职责开始实行壹回完整的数据库备份:

                    Pos: 11308 ----------------------------------------------------------> pos起始点:11308(即:上行的pos结束点)

      将zyyshop数据库备份到 /root/BAK.zyyshop.sql 文件中:

              Event_type: Query

      # /usr/local/mysql/bin/mysqldump -uroot -p123456 -lF --log-error=/root/myDump.err -B zyyshop > /root/BAK.zyyshop.sql......        大概过了多少分钟,备份完结了,作者并不是忧虑数据错失了,因为笔者有备份了,嘎嘎~~~      由于本人利用了-F选项,当备份职业刚开头时系统会刷新log日志,产生新的binlog日志来记录备份之后的数据库“增加和删除改”操作,查看一下:

              Server_id: 1

      mysql> show master status;

            End_log_pos: 11417

      ------------------ ---------- -------------- ------------------       |File| Position | Binlog_Do_DB | Binlog_Ignore_DB |      ------------------ ---------- -------------- ------------------       |mysql-bin.000023 |      120 |              |                  |      ------------------ ---------- -------------- ------------------       约等于说, mysql-bin.000023 是用来记录4:00过后对数据库的有所“增加和删除改”操作。

                    Info: use `zyyshop`; /*!40000 ALTER TABLE `team2` ENABLE KEYS */

    2.早9:00上班了,业务的必要会对数据库进行各样“增加和删除改”操作~~~      @ 比方:创设一个学员表并插入、修改了数量等等:

            ******* *************************** 22. row *********************************************************

        CREATE TABLE IF NOT EXISTS `tt` (

                Log_name: mysql-bin.000021

          `id` int(10) unsigned NOTNULLAUTO_INCREMENT,          `name` varchar(16) NOTNULL,          `sex` enum('m','w') NOTNULLDEFAULT'm',          `age` tinyint(3) unsigned NOTNULL,          `classid` char(6)DEFAULTNULL,          PRIMARY KEY (`id`)

                         Pos: 11417

        ) ENGINE=InnoDBDEFAULTCHARSET=utf8;

              Event_type: Query

      导入实验数据

              Server_id: 1

      mysql> insert into zyyshop.tt(`name`,`sex`,`age`,`classid`) values('yiyi','w',20,'cls1'),('xiaoer','m',22,'cls3'),('zhangsan','w',21,'cls5'),('lisi','m',20,'cls4'),('wangwu','w',26,'cls6');

            End_log_pos: 11510

      查看数据

                            Info: use `zyyshop`; DROP TABLE IF EXISTS `type`

      mysql> select * from zyyshop.tt;

      这条语句能够将点名的binlog日志文件,分成有效事件行的方法赶回,并可使用limit内定pos点的开头偏移,查询条数;

      ---- ---------- ----- ----- ---------       | id | name    | sex | age | classid |      ---- ---------- ----- ----- ---------       |  1 | yiyi    | w  |  20 | cls1    |      |  2 | xiaoer  | m  |  22 | cls3    |      |  3 | zhangsan | w  |  21 | cls5    |      |  4 | lisi    | m  |  20 | cls4    |      |  5 | wangwu  | w  |  26 | cls6    |      ---- ---------- ----- ----- ---------       晌牛时刻又实行了退换数据操作

      A.查询第一个(最初)的binlog日志:

      mysql> update zyyshop.tt set name='李四' where id=4;

        mysql> show binlog eventsG;

      mysql> update zyyshop.tt set name='小二' where id=2;

      B.钦点询问 mysql-bin.000021 这一个文件:

      修改后的结果:

        mysql> show binlog events in 'mysql-bin.000021'G;

      mysql> select * from zyyshop.tt;

      C.钦点查询 mysql-bin.000021 这几个文件,从pos点:8224起来查起:

      ---- ---------- ----- ----- ---------       | id | name    | sex | age | classid |      ---- ---------- ----- ----- ---------       |  1 | yiyi    | w  |  20 | cls1    |      |  2 | 小二    | m  |  22 | cls3    |      |  3 | zhangsan | w  |  21 | cls5    |      |  4 | 李四    | m  |  20 | cls4    |      |  5 | wangwu  | w  |  26 | cls6    |      ---- ---------- ----- ----- ---------       假若此时是上午18:00,莫名地实行了一条悲催的SQL语句,整个数据库都没了:

        mysql> show binlog events in 'mysql-bin.000021' from 8224G;

      mysql> drop database zyyshop;

      D.钦命询问 mysql-bin.000021 这几个文件,从pos点:8224发端查起,查询10条

    3.此刻杯具了,别慌!先稳重查看最终四个binlog日志,并记录下第一的pos点,到底是哪些pos点的操作形成了数据库的损坏(平日在最后几步);

        mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 10G;

      备份一下终极三个binlog日志文件:

      E.内定询问 mysql-bin.000021 这些文件,从pos点:8224伊始查起,偏移2行,查询10条

      # ll /usr/local/mysql/data | grep mysql-bin# cp -v /usr/local/mysql/data/mysql-bin.000023 /root/      此时实行二回刷新日志索引操作,重新初阶新的binlog日志记录文件,理论说 mysql-bin.000023 那么些文件不会再有承继写入了(便于大家剖判原因及查找pos点),现在全数数据库操作都会写入到下贰个日志文件;

        mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 2,10G;

      mysql>flush logs;

五、恢复生机binlog日志实验(zyyshop是数据库)

      mysql> show master status;

    1.假若现行反革命是深夜4:00,我的布置职分起先实施贰回完整的数据库备份:

    4.读取binlog日志,剖判难点

      将zyyshop数据库备份到 /root/BAK.zyyshop.sql 文件中:

      方式一:使用mysqlbinlog读取binlog日志:

      # /usr/local/mysql/bin/mysqldump -uroot -p123456 -lF --log-error=/root/myDump.err -B zyyshop > /root/BAK.zyyshop.sql

        # /usr/local/mysql/bin/mysqlbinlog  /usr/local/mysql/data/mysql-bin.000023      形式二:登陆服务器,并查阅(推荐):

        ......

        mysql> show binlog events in 'mysql-bin.000023';

        大概过了若干分钟,备份达成了,小编实际不是操心数据错过了,因为作者有备份了,嘎嘎~~~

        以下为最终片段:

      由于自家动用了-F选项,当备份专门的学业刚早先时系统会刷新log日志,发生新的binlog日志来记录备份之后的数据库“增加和删除改”操作,查看一下:

        ------------------ ------ ------------ ----------- ------------- ------------------------------------------------------------         | Log_name        |Pos| Event_type | Server_id | End_log_pos | Info                                                      |        ------------------ ------ ------------ ----------- ------------- ------------------------------------------------------------         |mysql-bin.000023 |  922 | Xid        |        1 |        953 | COMMIT/* xid=3820 */|        |mysql-bin.000023 |  953 | Query      |        1 |        1038 | BEGIN                                                      |        |mysql-bin.000023 | 1038 | Query      |        1 |        1164 |use`zyyshop`; update zyyshop.tt set name='李四' where id=4|        |mysql-bin.000023 | 1164 | Xid        |        1 |        1195 | COMMIT/* xid=3822 */|        |mysql-bin.000023 | 1195 | Query      |        1 |        1280 | BEGIN                                                      |        |mysql-bin.000023 | 1280 | Query      |        1 |        1406 |use`zyyshop`; update zyyshop.tt set name='小二' where id=2|        |mysql-bin.000023 | 1406 | Xid        |        1 |        1437 | COMMIT/* xid=3823 */|        |mysql-bin.000023 | 1437 | Query      |        1 |        1538 | drop database zyyshop                                      |        ------------------ ------ ------------ ----------- ------------- ------------------------------------------------------------         通过深入分析,变成数据库破坏的pos点区间是在于 1437--1538 之间,只要恢复生机到1437前就可。

      mysql> show master status;

    5.现行反革命把深夜备份的数据恢复生机:

      ------------------ ---------- -------------- ------------------

      # /usr/local/mysql/bin/mysql -uroot -p123456 -v < /root/BAK.zyyshop.sql;      注: 至此结束当日黎明(Liu Wei)(4:00)前的备份数据都过来了。

      | File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |

          但今天一整日(4:00--18:00)的数量咋做呢?就得从前文提到的mysql-bin.000023 新日志做作品了......    6.从binlog日志复苏数据

      ------------------ ---------- -------------- ------------------

      恢复生机语法格式:

      | mysql-bin.000023 |      120 |              |                  |

      # mysqlbinlog mysql-bin.0000xx | mysql -u顾客名 -p密码 数据库名        常用选项:

      ------------------ ---------- -------------- ------------------

          --start-position=953                  起始pos点

      也正是说, mysql-bin.000023 是用来记录4:00自此对数据库的持有“增加和删除改”操作。

          --stop-position=1437                  结束pos点

    2.早9:00上班了,业务的急需会对数据库实行各个“增加和删除改”操作~~~

          --start-datetime="二〇一二-11-29 13:18:54" 初叶时间点

      @ 比方:创制二个学生表并插入、修改了数据等等:

          --stop-datetime="二〇一二-11-29 13:21:53"  截止时间点

        CREATE TABLE IF NOT EXISTS `tt` (

          --database=zyyshop                    钦点只回复zyyshop数据库(一台主机上翻来覆去有多少个数据库,只限本地log日志)

          `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

        不时用选项:   

          `name` varchar(16) NOT NULL,

          -u --user=name              Connect to the remote serverasusername.连接到远程主机的客商名

          `sex` enum('m','w') NOT NULL DEFAULT 'm',

          -p --password[=name]        Password to connect to remote server.连接到远程主机的密码

          `age` tinyint(3) unsigned NOT NULL,

          -h --host=name              Get the binlog from server.从远程主机上收获binlog日志

          `classid` char(6) DEFAULT NULL,

          --read-from-remote-server  Read binary logs from aMySQLserver.从有个别MySQL服务器上读取binlog日志

          PRIMARY KEY (`id`)

      小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。那些命令、文件尽量写成相对路线;

        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      A.完全苏醒(本例不可相信,因为最终这条 drop database zyyshop 也在日记里,必需想办法把那条破坏语句排除掉,做一些苏醒)

      导入实验数据

        # /usr/local/mysql/bin/mysqlbinlog  /usr/local/mysql/data/mysql-bin.000021 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop      B.钦点pos截止点恢复生机(部分苏醒):

      mysql> insert into zyyshop.tt(`name`,`sex`,`age`,`classid`) values('yiyi','w',20,'cls1'),('xiaoer','m',22,'cls3'),('zhangsan','w',21,'cls5'),('lisi','m',20,'cls4'),('wangwu','w',26,'cls6');

        @ --stop-position=953 pos结束点

      查看数据

        注:此pos甘休点介于“导入实验数据”与立异“name='李四'”之间,那样能够还原到更动“name='李四'”此前的“导入测量试验数据”

      mysql> select * from zyyshop.tt;

        # /usr/local/mysql/bin/mysqlbinlog --stop-position=953 --database=zyyshop /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop     

      ---- ---------- ----- ----- ---------

        在另一巅峰登陆查看结果(成功恢复生机了):

      | id | name    | sex | age | classid |

        mysql> select * from zyyshop.tt;

      ---- ---------- ----- ----- ---------

        ---- ---------- ----- ----- ---------         | id | name    | sex | age | classid |        ---- ---------- ----- ----- ---------         |  1 | yiyi    | w  |  20 | cls1    |        |  2 | xiaoer  | m  |  22 | cls3    |        |  3 | zhangsan | w  |  21 | cls5    |        |  4 | lisi    | m  |  20 | cls4    |        |  5 | wangwu  | w  |  26 | cls6    |        ---- ---------- ----- ----- ---------       C.钦赐pso点区间回复(部分复苏):

      |  1 | yiyi    | w  |  20 | cls1    |

        更新 name='李四' 那条数据,日志区间是Pos[1038] --> End_log_pos[1164],按专门的学业区间是:Pos[953] --> End_log_pos[1195];

      |  2 | xiaoer  | m  |  22 | cls3    |

        更新 name='小二' 这条数据,日志区间是Pos[1280] --> End_log_pos[1406],按专门的学问区间是:Pos[1195] --> End_log_pos[1437];

      |  3 | zhangsan | w  |  21 | cls5    |

        c1.单身恢复生机 name='李四' 那步操作,可那般:

      |  4 | lisi    | m  |  20 | cls4    |

          # /usr/local/mysql/bin/mysqlbinlog --start-position=1038 --stop-position=1164 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop          也能够按专门的学问区间单独苏醒,如下:

      |  5 | wangwu  | w  |  26 | cls6    |

          # /usr/local/mysql/bin/mysqlbinlog --start-position=953 --stop-position=1195 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop        c2.单身复苏 name='小二' 那步操作,可那样:

      ---- ---------- ----- ----- ---------

          # /usr/local/mysql/bin/mysqlbinlog --start-position=1280 --stop-position=1406 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop   

      晌虎时刻又进行了修改数据操作

          也能够按工作区间单独苏醒,如下:

      mysql> update zyyshop.tt set name='李四' where id=4;

          # /usr/local/mysql/bin/mysqlbinlog --start-position=1195 --stop-position=1437 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop        c3.将 name='李四'、name='小二' 多步操作一齐过来,要求按事务区间,可这么:

      mysql> update zyyshop.tt set name='小二' where id=2;

          # /usr/local/mysql/bin/mysqlbinlog --start-position=953 --stop-position=1437 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop      D.在另一终极登入查看方今结果(两名称也回复了):

      修改后的结果:

        mysql> select * from zyyshop.tt;

      mysql> select * from zyyshop.tt;

        ---- ---------- ----- ----- ---------         | id | name    | sex | age | classid |        ---- ---------- ----- ----- ---------         |  1 | yiyi    | w  |  20 | cls1    |        |  2 | 小二    | m  |  22 | cls3    |        |  3 | zhangsan | w  |  21 | cls5    |        |  4 | 李四    | m  |  20 | cls4    |        |  5 | wangwu  | w  |  26 | cls6    |        ---- ---------- ----- ----- ---------       E.也可指定期间间隔恢复(部分苏醒):除了用pos点的艺术实行复苏,也足以通过点名时间间隔进行还原,定期间复苏必要用mysqlbinlog命令读取binlog日志内容,找时间节点。

      ---- ---------- ----- ----- ---------

        比如,笔者把刚苏醒的tt表删除掉,再用时间距离点过来

      | id | name    | sex | age | classid |

        mysql> drop table tt;

      ---- ---------- ----- ----- ---------

        @ --start-datetime="2012-11-29 13:18:54"  初步时间点

      |  1 | yiyi    | w  |  20 | cls1    |

        @ --stop-datetime="二〇一一-11-29 13:21:53"  停止时间点

      |  2 | 小二    | m  |  22 | cls3    |

        # /usr/local/mysql/bin/mysqlbinlog --start-datetime="二〇一一-11-29 13:18:54" --stop-datetime="二零一一-11-29 13:21:53" --database=zyyshop /usr/local/mysql/data/mysql-bin.000021 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop      总括:所谓恢复生机,正是让mysql将保存在binlog日志中内定段落区间的sql语句每种重新实行三次而已。

      |  3 | zhangsan | w  |  21 | cls5    |

      |  4 | 李四    | m  |  20 | cls4    |

      |  5 | wangwu  | w  |  26 | cls6    |

      ---- ---------- ----- ----- ---------

      若是此时是晚上18:00,莫名地奉行了一条悲催的SQL语句,整个数据库都没了:

      mysql> drop database zyyshop;

    3.此刻杯具了,别慌!先留神翻看最终三个binlog日志,并记下下第一的pos点,到底是哪个pos点的操作导致了数据库的毁伤(日常在最后几步);

      备份一下尾声多个binlog日志文件:

      # ll /usr/local/mysql/data | grep mysql-bin

      # cp -v /usr/local/mysql/data/mysql-bin.000023 /root/

      此时奉行壹回刷新日志索引操作,重新早先新的binlog日志记录文件,理论说 mysql-bin.000023 那个文件不会再有延续写入了(便于我们深入分析原因及搜寻pos点),以往全体数据库操作都会写入到下贰个日记文件;

      mysql> flush logs;

      mysql> show master status;

    4.读取binlog日志,深入分析难点

      方式一:使用mysqlbinlog读取binlog日志:

        # /usr/local/mysql/bin/mysqlbinlog  /usr/local/mysql/data/mysql-bin.000023

      格局二:登入服务器,并查阅(推荐):

        mysql> show binlog events in 'mysql-bin.000023';

        以下为最后片段:

        ------------------ ------ ------------ ----------- ------------- ------------------------------------------------------------

        | Log_name        | Pos  | Event_type | Server_id | End_log_pos | Info                                                      |

        ------------------ ------ ------------ ----------- ------------- ------------------------------------------------------------

        | mysql-bin.000023 |  922 | Xid        |        1 |        953 | COMMIT /* xid=3820 */                                      |

        | mysql-bin.000023 |  953 | Query      |        1 |        1038 | BEGIN                                                      |

        | mysql-bin.000023 | 1038 | Query      |        1 |        1164 | use `zyyshop`; update zyyshop.tt set name='李四' where id=4|

        | mysql-bin.000023 | 1164 | Xid        |        1 |        1195 | COMMIT /* xid=3822 */                                      |

        | mysql-bin.000023 | 1195 | Query      |        1 |        1280 | BEGIN                                                      |

        | mysql-bin.000023 | 1280 | Query      |        1 |        1406 | use `zyyshop`; update zyyshop.tt set name='小二' where id=2|

        | mysql-bin.000023 | 1406 | Xid        |        1 |        1437 | COMMIT /* xid=3823 */                                      |

        | mysql-bin.000023 | 1437 | Query      |        1 |        1538 | drop database zyyshop                                      |

        ------------------ ------ ------------ ----------- ------------- ------------------------------------------------------------

        通过深入分析,变成数据库破坏的pos点区间是在于 1437--1538 之间,只要复苏到1437前就可。

    5.现行反革命把中午备份的数据恢复:

      # /usr/local/mysql/bin/mysql -uroot -p123456 -v < /root/BAK.zyyshop.sql;

      注: 至此甘休当日上午(4:00)前的备份数据都复苏了。

          但前几天一全日(4:00--18:00)的数码怎么办吧?就得此前文提到的 mysql-bin.000023 新日志做小说了......

    6.从binlog日志复苏数据

      苏醒语法格式:

      # mysqlbinlog mysql-bin.0000xx | mysql -u顾客名 -p密码 数据库名

        常用选项:

          --start-position=953                  起始pos点

          --stop-position=1437                  结束pos点

          --start-datetime="二〇一一-11-29 13:18:54" 起初时间点

          --stop-datetime="二零一一-11-29 13:21:53"  甘休时间点

          --database=zyyshop                    内定只回复zyyshop数据库(一台主机上往往有七个数据库,只限本地log日志)

        临时用选项:   

          -u --user=name              Connect to the remote server as username.连接到远程主机的顾客名

          -p --password[=name]        Password to connect to remote server.连接到远程主机的密码

          -h --host=name              Get the binlog from server.从远程主机上收获binlog日志

          --read-from-remote-server  Read binary logs from a MySQL server.从某些MySQL服务器上读取binlog日志

      小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这么些命令、文件尽量写成相对路线;

      A.完全苏醒(本例不可靠,因为最终那条 drop database zyyshop 也在日记里,必得想艺术把那条破坏语句排除掉,做一些恢复)

        # /usr/local/mysql/bin/mysqlbinlog  /usr/local/mysql/data/mysql-bin.000021 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

      B.钦命pos停止点恢复(部分苏醒):

        @ --stop-position=953 pos结束点

        注:此pos停止点介于“导入实验数据”与创新“name='李四'”之间,那样能够过来到退换“name='李四'”在此以前的“导入测量试验数据”

        # /usr/local/mysql/bin/mysqlbinlog --stop-position=953 --database=zyyshop /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

        在另一终极登陆查看结果(成功苏醒了):

        mysql> select * from zyyshop.tt;

        ---- ---------- ----- ----- ---------

        | id | name    | sex | age | classid |

        ---- ---------- ----- ----- ---------

        |  1 | yiyi    | w  |  20 | cls1    |

        |  2 | xiaoer  | m  |  22 | cls3    |

        |  3 | zhangsan | w  |  21 | cls5    |

        |  4 | lisi    | m  |  20 | cls4    |

        |  5 | wangwu  | w  |  26 | cls6    |

        ---- ---------- ----- ----- ---------

      C.钦命pso点区间回复(部分恢复生机):

        更新 name='李四' 那条数据,日志区间是Pos[1038] --> End_log_pos[1164],按工作区间是:Pos[953] --> End_log_pos[1195];

        更新 name='小二' 这条数据,日志区间是Pos[1280] --> End_log_pos[1406],按专门的学问区间是:Pos[1195] --> End_log_pos[1437];

        c1.独自恢复生机 name='李四' 那步操作,可这么:

          # /usr/local/mysql/bin/mysqlbinlog --start-position=1038 --stop-position=1164 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

          也得以按工作区间单独复苏,如下:

          # /usr/local/mysql/bin/mysqlbinlog --start-position=953 --stop-position=1195 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

        c2.单独恢复生机 name='小二' 那步操作,可那般:

          # /usr/local/mysql/bin/mysqlbinlog --start-position=1280 --stop-position=1406 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

          也足以按专业区间单独复苏,如下:

          # /usr/local/mysql/bin/mysqlbinlog --start-position=1195 --stop-position=1437 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

        c3.将 name='李四'、name='小二' 多步操作一齐过来,需求按事务区间,可这么:

          # /usr/local/mysql/bin/mysqlbinlog --start-position=953 --stop-position=1437 --database=zyyshop  /usr/local/mysql/data/mysql-bin.000023 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

      D.在另一终端登入查看近些日子结果(两名称也回复了):

        mysql> select * from zyyshop.tt;

        ---- ---------- ----- ----- ---------

        | id | name    | sex | age | classid |

        ---- ---------- ----- ----- ---------

        |  1 | yiyi    | w  |  20 | cls1    |

        |  2 | 小二    | m  |  22 | cls3    |

        |  3 | zhangsan | w  |  21 | cls5    |

        |  4 | 李四    | m  |  20 | cls4    |

        |  5 | wangwu  | w  |  26 | cls6    |

        ---- ---------- ----- ----- ---------

      E.也可指定期间距离苏醒(部分恢复生机):除了用pos点的主意开展回复,也能够通过点名时间距离举办还原,按期间回复须要用mysqlbinlog命令读取binlog日志内容,找时间节点。

        例如,作者把刚恢复生机的tt表删除掉,再用时间间隔点过来

        mysql> drop table tt;

        @ --start-datetime="2011-11-29 13:18:54"  开首时间点

        @ --stop-datetime="二零一二-11-29 13:21:53"  结束时间点

        # /usr/local/mysql/bin/mysqlbinlog --start-datetime="2013-11-29 13:18:54" --stop-datetime="2013-11-29 13:21:53" --database=zyyshop /usr/local/mysql/data/mysql-bin.000021 | /usr/local/mysql/bin/mysql -uroot -p123456 -v zyyshop

      计算:所谓恢复生机,正是让mysql将保存在binlog日志中钦命段落区间的sql语句各种重新试行一遍而已。

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:基本认知,Log二进制日志文件的基本操作命令小

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。