正文
怎么mysql的bin mysql怎样
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
如何利用mysql的bin
cd d:\program files\mysql\data
mysqlbinlog -d test --start-datetime="2004-12-25 11:25:56" --stop-datetime="2012-12-26 11:25:56" --base64-output=DECODE-ROWS mysql-bin.000001 mysql-bin.00000n e:\t.sql
1 说明:
这是输出日志为可执行的sql格式,然后通过mysql或其它工具执行这个sql即可
-d test 是指定数据库,如果要导出全部数据库的执行语句,去年该选项
--base64-output=DECODE-ROWS 是为了适应mysql server设置binlog_format=row的情况的,一般使用该值即可;
mysql-bin.000001 mysql-bin.00000n 把你的bin文件名全部列出来,有几个列几个(linux下可以使用通配符 mysql-bin.[0-9]*)
--start-datetime 这是为了设定恢复的时间段的,如你只需精确地导出某天的执行
如何查看mysql binlog
mysqlbinlog 是将 binlog 解析成可读可执行的 SQL 的重要工具。
但解析体积较大的 binlog 时,如何查看 mysqlbinlog 的执行进度就变成了一个问题,mysqlbinlog 并未提供 –progress 这样的参数。
那要怎么查看 mysqlbinlog 的解析进度?
实验
我们在 实验 08 中介绍了如何生成随机数据。可以利用其中技巧,生成较大的 binlog,我们忽略这个过程。
从已有的 binlog 开始,bin.000002 大约有 1.1 个 G:
用 mysqlbinlog 解析该 binlog:
大概会执行 4.6 秒左右。大家仔细做实验时,可以将 binlog 放大一些,让执行实验更长一些。
我们在 mysqlbinlog 解析时,查看其文件句柄:
可以看到 mysqlbinlog 用句柄 3 读取 binlog。(我们暂时忽略句柄 4 指向的临时文件,其涉及到了行格式的解析过程,我们安排在以后的实验中慢慢介绍)
获取了 mysqlbinlog 处理文件句柄 3 的进度,就可以大概估算 mysqlbinlog 的整体进度:
可以看到 mysqlbinlog 此时的进度大概是 600M 左右,整体进度估算为 54%。
结论
我们无法让 mysqlbinlog 直接输出进度,于是通过观察 mysqlbinlog 对 binlog 的读取进度,估算mysqlbinlog 的整体处理进度。
如何进入mysql安装目录的bin目录
有正确安装好吗? 点开始->运行,输入 services.msc 在打开的"服务管理器"中找到mysql并双击,会弹出来个属性框框,"常规"选项卡里面有个"执行路径",从这个路径你就可以看到它的bin目录在哪.
如何配置mysql的binlog
MySQL 的 Binlog 记录着 MySQL 数据库的所有变更信息,了解 Binlog 的结构可以帮助我们解析Binlog,甚至对 Binlog 进行一些修改,或者说是“篡改”,例如实现类似于 Oracle 的 flashback 的功能,恢复误删除的记录,把 update 的记录再还原回去等。本文将带您探讨一下这些神奇功能的实现,您会发现比您想象地要简单得多。本文指的 Binlog 是 ROW 模式的 Binlog,这也是 MySQL 8 里的默认模式,STATEMENT 模式因为使用中有很多限制,现在用得越来越少了。
Binlog 由事件(event)组成,请注意是事件(event)不是事务(transaction),一个事务可以包含多个事件。事件描述对数据库的修改内容。
现在我们已经了解了 Binlog 的结构,我们可以试着修改 Binlog 里的数据。例如前面举例的 Binlog 删除了一条记录,我们可以试着把这条记录恢复,Binlog 里面有个删除行(DELETE_ROWS_EVENT)的事件,就是这个事件删除了记录,这个事件和写行(WRITE_ROWS_EVENT)的事件的数据结构是完全一样的,只是删除行事件的类型是 32,写行事件的类型是 30,我们把对应的 Binlog 位置的 32 改成 30 即可把已经删除的记录再插入回去。从前面的 “show binlog events” 里面可看到这个 DELETE_ROWS_EVENT 是从位置 378 开始的,这里的位置就是 Binlog 文件的实际位置(以字节为单位)。从事件(event)的结构里面可以看到 type_code 是在 event 的第 5 个字节,我们写个 Python 小程序把把第383(378+5=383)字节改成 30 即可。当然您也可以用二进制编辑工具来改。
找出 Binlog 中的大事务
由于 ROW 模式的 Binlog 是每一个变更都记录一条日志,因此一个简单的 SQL,在 Binlog 里可能会产生一个巨无霸的事务,例如一个不带 where 的 update 或 delete 语句,修改了全表里面的所有记录,每条记录都在 Binlog 里面记录一次,结果是一个巨大的事务记录。这样的大事务经常是产生麻烦的根源。我的一个客户有一次向我抱怨,一个 Binlog 前滚,滚了两天也没有动静,我把那个 Binlog 解析了一下,发现里面有个事务产生了 1.4G 的记录,修改了 66 万条记录!下面是一个简单的找出 Binlog 中大事务的 Python 小程序,我们知道用 mysqlbinlog 解析的 Binlog,每个事务都是以 BEGIN 开头,以 COMMIT 结束。我们找出 BENGIN 前面的 “# at” 的位置,检查 COMMIT 后面的 “# at” 位置,这两个位置相减即可计算出这个事务的大小,下面是这个 Python 程序的例子。
切割 Binlog 中的大事务
对于大的事务,MySQL 会把它分解成多个事件(注意一个是事务 TRANSACTION,另一个是事件 EVENT),事件的大小由参数 binlog-row-event-max-size 决定,这个参数默认是 8K。因此我们可以把若干个事件切割成一个单独的略小的事务
ROW 模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,这个行为是 binlog_row_image 参数控制的,这个参数有 3 个值,默认为 FULL,也就是记录列的所有修改,即使字段没有发生变更也会记录。这样我们就可以实现类似 Oracle 的 flashback 的功能,我个人估计 MySQL 未来的版本从可能会基于 Binlog 推出这样的功能。
了解了 Binlog 的结构,再加上 Python 这把瑞士军刀,我们还可以实现很多功能,例如我们可以统计哪个表被修改地最多?我们还可以把 Binlog 切割成一段一段的,然后再重组,可以灵活地进行 MySQL 数据库的修改和迁移等工作。
怎么mysql的bin的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql怎样、怎么mysql的bin的信息别忘了在本站进行查找喔。