Mysql 二进制binlog文件记录和恢复

  • 开启二进制文件:my.cnf
[mysqld]
# 必选
# [必须] 主服务唯一ID 主从下不能重复
server-id=1
# [必须] 启用二进制日志,比如:自己本地路径/log/mysqlbin
log-bin=mysql-bin

# 可选
# [可选] (默认) 0表示读写 (主机) ,1表示只读 (从机) (具有super权限的用户除外)
read-only=0
# 设置日志文件保留的时长,单位是秒
#binlog_expire_logs_seconds=6000
# 设置日志文件保留的时长,单位是天
expire_logs_days = 10
# 控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=500M
# [可选]设置不要复制的数据库 可不设置
#binlog-ignore-db=test
# [可选]设置需要复制的数据库,默认全部记录。比如: binlog-do-db=atguigu_master_slave 可不设置
# binlog-do-db=需要复制的主数据库名字
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 跳过主从复制中遇到的所有错误或指定类型的错误﹐避免slave端复制中断。
# 如∶1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# [可选]设置binlog格式(mixed(混合模式,有系统函数自动采用row,普通数据采用statement),statement(只记录执行语句,数据量小,系统函数会导致数据不一致),row(记录每条数据,数据量大,导致并发日志))
binlog_format=mixed
  • 查看日志开启状态
登录Mysql
mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
| sql_log_bin                     | ON                             |
+---------------------------------+--------------------------------+
6 rows in set (0.01 sec)
  • 查看日志文件列表
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |   5889540 |
| mysql-bin.000003 |      2750 |
| mysql-bin.000004 |       154 |
+------------------+-----------+
4 rows in set (0.00 sec)
  • 刷新日志,开启新二进制文件,主要用于恢复,截断旧二进制文件,进行恢复使用。防止新数据混淆。
mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |   5889540 |
| mysql-bin.000003 |      2750 |
| mysql-bin.000004 |       507 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
5 rows in set (0.00 sec)
  • 查看二进制文件内容,目前为空
mysql>  show binlog events in 'mysql-bin.000005';
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                                  |
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------------------+
| mysql-bin.000005 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.36-log, Binlog ver: 4                                 |
| mysql-bin.000005 | 123 | Previous_gtids |         1 |         154 |                                                                       |
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------------------+
10 rows in set (0.00 sec)

恢复数据演示(mysqlbinlog):

定位点恢复方式

  • 1.先进行写入数据 查看bin日志
mysql>  show binlog events in 'mysql-bin.000005';
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                                  |
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------------------+
| mysql-bin.000005 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.36-log, Binlog ver: 4                                 |
| mysql-bin.000005 | 123 | Previous_gtids |         1 |         154 |                                                                       |
| mysql-bin.000005 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                  |
| mysql-bin.000005 | 219 | Query          |         1 |         298 | BEGIN                                                                 |
| mysql-bin.000005 | 298 | Query          |         1 |         429 | use `test`; INSERT INTO `test`.`name` (`id`, `name`) VALUES (7, '77') |
| mysql-bin.000005 | 429 | Xid            |         1 |         460 | COMMIT /* xid=144 */                                                  |
| mysql-bin.000005 | 460 | Anonymous_Gtid |         1 |         525 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                  |
| mysql-bin.000005 | 525 | Query          |         1 |         604 | BEGIN                                                                 |
| mysql-bin.000005 | 604 | Query          |         1 |         735 | use `test`; INSERT INTO `test`.`name` (`id`, `name`) VALUES (8, '88') |
| mysql-bin.000005 | 735 | Xid            |         1 |         766 | COMMIT /* xid=147 */                                                  |
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------------------+
10 rows in set (0.00 sec)
  • 2.删除数据 查看bin日志
mysql>  show binlog events in 'mysql-bin.000005';
+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------+
| Log_name         | Pos  | Event_type     | Server_id | End_log_pos | Info                                                                  |
+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------+
| mysql-bin.000005 |    4 | Format_desc    |         1 |         123 | Server ver: 5.7.36-log, Binlog ver: 4                                 |
| mysql-bin.000005 |  123 | Previous_gtids |         1 |         154 |                                                                       |
| mysql-bin.000005 |  154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                  |
| mysql-bin.000005 |  219 | Query          |         1 |         298 | BEGIN                                                                 |
| mysql-bin.000005 |  298 | Query          |         1 |         429 | use `test`; INSERT INTO `test`.`name` (`id`, `name`) VALUES (7, '77') |
| mysql-bin.000005 |  429 | Xid            |         1 |         460 | COMMIT /* xid=144 */                                                  |
| mysql-bin.000005 |  460 | Anonymous_Gtid |         1 |         525 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                  |
| mysql-bin.000005 |  525 | Query          |         1 |         604 | BEGIN                                                                 |
| mysql-bin.000005 |  604 | Query          |         1 |         735 | use `test`; INSERT INTO `test`.`name` (`id`, `name`) VALUES (8, '88') |
| mysql-bin.000005 |  735 | Xid            |         1 |         766 | COMMIT /* xid=147 */                                                  |
| mysql-bin.000005 |  766 | Anonymous_Gtid |         1 |         831 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                  |
| mysql-bin.000005 |  831 | Query          |         1 |         910 | BEGIN                                                                 |
| mysql-bin.000005 |  910 | Query          |         1 |        1024 | use `test`; DELETE FROM `test`.`name` WHERE `id` = 7                  |
| mysql-bin.000005 | 1024 | Xid            |         1 |        1055 | COMMIT /* xid=151 */                                                  |
| mysql-bin.000005 | 1055 | Anonymous_Gtid |         1 |        1120 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                  |
| mysql-bin.000005 | 1120 | Query          |         1 |        1199 | BEGIN                                                                 |
| mysql-bin.000005 | 1199 | Query          |         1 |        1313 | use `test`; DELETE FROM `test`.`name` WHERE `id` = 8                  |
| mysql-bin.000005 | 1313 | Xid            |         1 |        1344 | COMMIT /* xid=152 */                                                  |
+------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------+
18 rows in set (0.00 sec)
  • 3.刷新日志,防止有新数据进行混淆,难以恢复
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |   5889540 |
| mysql-bin.000003 |      2750 |
| mysql-bin.000004 |       507 |
| mysql-bin.000005 |      1391 |
| mysql-bin.000006 |       154 |
+------------------+-----------+
6 rows in set (0.00 sec)
  • 4.使用mysql-bin.000005进行恢复

查看需要恢复起始点和结束点


二进制详情.jpg
执行:
root@4eaea03da154:/# /usr/bin/mysqlbinlog --start-position=219 --stop-position=766 --database=test /var/lib/mysql/mysql-bin.000005 | mysql -uroot -p123456 -v test
查看数据表,发现已经恢复了指定数据

时间范围恢复方式

查看日志文件
root@4eaea03da154:/# mysqlbinlog /var/lib/mysql/mysql-bin.000005
找出需要恢复的时间范围
执行恢复语句
/usr/bin/mysqlbinlog --start-datetime='2099-12-30 20:00:00' --stop-datetime='2099-12-30 21:00:00' --database=test /var/lib/mysql/mysql-bin.000005 | mysql -uroot -p123456 -v test

二进制文件删除

  • 删除指定名称之前的

purge master logs to "mysql-bin.000005";

  • 删除指定时间之前的

purge master logs before "20300101";

  • 删除所有二进制 - 慎用

reset master;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容