热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL二进制日志操作记录

文章目录验证是否创建了二进制日志显示服务器所有二进制日志获取当前二进制日志位置禁用和启动当前会话二进制日志设置日志的到期时间手动清除日志二进制日志的格式在Linux上查看二进制日志


文章目录

      • 验证是否创建了二进制日志
      • 显示服务器所有二进制日志
      • 获取当前二进制日志位置
      • 禁用和启动当前会话二进制日志
      • 设置日志的到期时间
      • 手动清除日志
      • 二进制日志的格式
      • 在Linux上查看二进制日志文件
      • 显示二进制日志文件中的事件
      • 移至下一个日志


验证是否创建了二进制日志

mysql> show variables like 'log_bin%';
+---------------------------------+-------------------------------------------------------------+
| Variable_name | Value |
+---------------------------------+-------------------------------------------------------------+
| log_bin | ON |
| log_bin_basename | D:\MySQL\MySQL Server 8.0.12\data\bin |
| log_bin_index | D:\MySQL\MySQL Server 8.0.12\data\bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-------------------------------------------------------------+
5 rows in set, 0 warning (0.01 sec)

显示服务器所有二进制日志

mysql> show master logs;
+----------------------------+-----------+
| Log_name | File_size |
+----------------------------+-----------+
| bin.000001 | 2711 |
+----------------------------+-----------+
1 row in set (0.00 sec)mysql> show binary logs;
+----------------------------+-----------+
| Log_name | File_size |
+----------------------------+-----------+
|bin.000001 | 2711 |
+----------------------------+-----------+
1 row in set (0.00 sec)

获取当前二进制日志位置

mysql> show master status;
+----------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| bin.000001 | 2711 | | | |
+----------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

禁用和启动当前会话二进制日志

#禁用
mysql> set sql_log_bin =0;
Query OK, 0 rows affected (0.00 sec)
#启用
mysql> set sql_log_bin =1;
Query OK, 0 rows affected (0.00 sec)

设置日志的到期时间

#同时设置,效果叠加。一下设置二进制日志23.5天清理一次
mysql> set@@global.expire_logs_days=23 and @@binlog_expire_logs_seconds =43200;
Query OK, 0 rows affected, 1 warning (0.00 sec)

手动清除日志

执行 purge binary logs to '',那么除该文件外的前面所有的二进制日志均会删除;
删除所有二进制日志并在此从头开始,执行 reset master ;


二进制日志的格式


  1. statement:记录实际的SQL语句
  2. row:记录每行的更改
  3. mixed:当需要时,MySQL会从statement切换到row

mysql> set global binlog_format ='statement;
Query OK, 0 rows affected (0.00 sec)

在Linux上查看二进制日志文件

#直接查看会报错编码格式不正确,windows没有这个问题
root@localhost mysql]# mysqlbinlog binlog.000025
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'

需要添加--no-default参数表示不读取任何选项文件;
不然需要修改MySQL的配置文件,在/etc/my.cnf中将default-character-set=utf8 修改为 character-set-server = utf8,但是这需要重启MySQL服务;

[root@localhost mysql]# mysqlbinlog --no-defaults binlog.000025
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#190917 15:28:39 server id 1 end_log_pos 124 CRC32 0x5588426c Start: binlog v 4, server v 8.0.12 created 190917 15:28:39 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
J4uAXQ8BAAAAeAAAAHwAAAABAAQAOC4wLjEyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAni4BdEwANAAgAAAAABAAEAAAAYAAEGggAAAAICAgCAAAACgoKKioAEjQA
CgFsQohV
'
/*!*/;
# at 124
#190917 15:28:39 server id 1 end_log_pos 155 CRC32 0xb8467156 Previous-GTIDs
# [empty]
# at 155
#190917 16:43:52 server id 1 end_log_pos 230 CRC32 0x9aac7b0e Anonymous_GTID last_committed=0 sequence_number=1 rbr_only=yes original_committed_timestamp=1568709832902104 immediate_commit_timestamp=1568709832902104 transaction_length=40065
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1568709832902104 (2019-09-17 16:43:52.902104 CST)
# immediate_commit_timestamp=1568709832902104 (2019-09-17 16:43:52.902104 CST)
/*!80001 SET @@session.original_commit_timestamp=1568709832902104*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 230
#190917 16:43:52 server id 1 end_log_pos 317 CRC32 0x717d41a6 Query thread_id=12 exec_time=0 error_code=0
SET TIMESTAMP=1568709832/*!*/;
SET @@session.pseudo_thread_id=12/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168113696/*!*/;
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=255/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80005 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 317
#190917 16:43:52 server id 1 end_log_pos 437 CRC32 0x93c29b80 Table_map: `gateway`.`t_target_service` mapped to number 70
# at 437
#190917 16:43:52 server id 1 end_log_pos 8348 CRC32 0x98d35538 Update_rows: table id 70
# at 8348
#190917 16:43:52 server id 1 end_log_pos 16178 CRC32 0xff4cea34 Update_rows: table id 70
# at 16178
#190917 16:43:52 server id 1 end_log_pos 24334 CRC32 0x639f2bca Update_rows: table id 70
# at 24334
#190917 16:43:52 server id 1 end_log_pos 32464 CRC32 0x2789fb69 Update_rows: table id 70
# at 32464
#190917 16:43:52 server id 1 end_log_pos 40189 CRC32 0x4070e457 Update_rows: table id 70 flags: STMT_END_FBINLOG '
yJyAXRMBAAAAeAAAALUBAAAAAEYAAAAAAAEAB2dhdGV3YXkAEHRfdGFyZ2V0X3NlcnZpY2UAFAgP
Eg8SEg8PDw8SDw8PD/wPDw8IH5YAAJYAAADgLocAwAA8AACHANwFLAGHAAL9AnAXcBf48QYBAQAC
ASGAm8KT
yJyAXR8BAAAA5x4AAJwgAAAAAEYAAAAAAAAAAgAUICAAAQAAAAAAAAAEdGVzdJmfDvo3
CGJ1c2luZXNzmZ/e4NMMAOa1i+ivleacjeWKoQRwb3N0BHRlc3QEc29hcJmfDvo3CVRFUk1JTkFU
'
/*!*/;
# at 40189
#190917 16:43:52 server id 1 end_log_pos 40220 CRC32 0x01481c05 Xid = 36
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

截取部分

# at 230
#190917 16:43:52 server id 1 end_log_pos 317 CRC32 0x717d41a6 Query thread_id=12 exec_time=0 error_code=0

#at后的数字 表示二进制日志文件中事件的起始位置(文件偏移量),这里是 230
下一行包含了语句在服务器上被启用的时间戳
s


  1. erver id:产生该事件服务器的server_id 这里是1
  2. end_log_pos:下一个事件的开始位置 这里是314
  3. thread_id:指示哪个线程执行了该事件 这里是12
  4. exec_time:在主服务器上,它代表执行事件的的时间;
    从服务器上,它代表从服务器的最终执行时间与主服务器的开始执行时间的差值,值可用作备份相对于主服务器滞后多少的指标 error_code:代表执行事件的结果。零表示无错误

显示二进制日志文件中的事件

mysql> show binlog events in 'binlog.000025';
+---------------+-------+----------------+-----------+-------------+-----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-------+----------------+-----------+-------------+-----------------------------------------+
| binlog.000025 | 4 | Format_desc | 1 | 124 | Server ver: 8.0.12, Binlog ver: 4 |
| binlog.000025 | 124 | Previous_gtids | 1 | 155 | |
| binlog.000025 | 155 | Anonymous_Gtid | 1 | 230 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000025 | 230 | Query | 1 | 317 | BEGIN |
| binlog.000025 | 317 | Table_map | 1 | 437 | table_id: 70 (gateway.t_target_service) |
| binlog.000025 | 437 | Update_rows | 1 | 8348 | table_id: 70 |
| binlog.000025 | 8348 | Update_rows | 1 | 16178 | table_id: 70 |
| binlog.000025 | 16178 | Update_rows | 1 | 24334 | table_id: 70 |
| binlog.000025 | 24334 | Update_rows | 1 | 32464 | table_id: 70 |
| binlog.000025 | 32464 | Update_rows | 1 | 40189 | table_id: 70 flags: STMT_END_F |
| binlog.000025 | 40189 | Xid | 1 | 40220 | COMMIT /* xid=36 */ |
| binlog.000025 | 40220 | Anonymous_Gtid | 1 | 40293 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000025 | 40293 | Query | 1 | 40390 | use `gateway`; flush privileges |
| binlog.000025 | 40390 | Anonymous_Gtid | 1 | 40470 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000025 | 40470 | Query | 1 | 40567 | use `gateway`; flush privileges |
+---------------+-------+----------------+-----------+-------------+-----------------------------------------+
15 rows in set (0.04 sec)

移至下一个日志

mysql> show binary logs;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000025 | 41629 |
+---------------+-----------+
1 row in set (0.08 sec)mysql> flush logs;
Query OK, 0 rows affected (0.15 sec)mysql> show binary logs;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000025 | 41673 |
| binlog.000026 | 155 |
+---------------+-----------+
2 rows in set (0.00 sec)

还原报错

[root@localhost mysql]# mysql -u root -p
Enter password:
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '�bin'��]'.

应该是

[root@localhost mysql]# mysqlbinlog --no-defaults --start-position=124 --disable-log-bin /var/lib/mysql/binlog.000025 |mysql --binary-mode=1 -u root -p -f
Enter password:

最后发现如果删除了部分数据,自己没有备份数据库或者二进制日志没有记录数据添加的语句,那么是无法还原的;
二进制日志只能记录你的操作语句和数据变化(update,delete,drop),并不能记录数据库存的数据。
比如你在打开二进制日志记录前已经创建好数据库并写入了数据,那么之后你删除数据是无法恢复的,除非用已经备份的文档恢复数据库后,再用二进制日志文档还原操作


推荐阅读
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
author-avatar
夜幕下的猫眼_398
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有