binlog数据恢复 日志备份

# 1. 查看是否开启

show variables like 'log_bin';
 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

# 2. 开启
a.  xx.cnf 中配置
    log_error=mysql_error.log
    
    binlog_format           = MIXED  // binlog日志格式,mysql默认采用statement,建议使用mixed
    log-bin                 = /data/mysql/mysql-bin.log    // binlog日志文件
    expire_logs_days        = 7                           // binlog过期清理时间
    max_binlog_size         = 100m                       // binlog每个日志文件大小
    binlog_cache_size       = 4m                        // binlog缓存大小
    max_binlog_cache_size   = 512m                     // 最大binlog缓存大小
    
b. 命令
    set global log_bin=mysql_bin
    
# 注意
    请注意,每次重启MySQL服务也会生成一个新的二进制日志文件,相当于二进制日志切换。
    切换二进制日志时,你会看到这些number会不断递增。
    另外,除了这些二进制日志文件外,你会看到还生成了一个mysql_bin_log.index的文件,
    这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。

# 3. 二进制日志删除
    # 查看日志清单
        show binary logs;
    # 删除某个日志之前的所有二进制日志文件
        purge binary logs to 'mysql_bin_log.000002';
    # 清除某个时间点以前的二进制日志文件
        purge binary logs before '2017-03-10 10:10:00';
    # 清除7天前的二进制日志文件
        purge master logs before date_sub( now( ), interval 7 day);
    # 也可以设置expire_logs_days参数,设置自动清理,其默认值为0,表示不启用过期自动删除功能。
    # 如果启用了自动清理功能,表示超出此天数的二进制日志文件将被自动删除,
    # 自动删除工作通常发生在MySQL启动时或FLUSH日志时。
    
# 4. 查看二进制内容  character-set-server = utf8         a. 使用show binlog events方式可以获取当前以及指定binlog的日志,不适宜提取大量日志
    SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
    
    b. 命令查看  需要参数解码:--base64-output=decode-rows
        ./bin/mysqlbinlog ./mysql-bin.000003
        ./bin/mysqlbinlog --no-defaults ./mysql-bin.000003 > a.sql
        
##### 生成新的日志
    flush logs;
    
###### 日志使用数据恢复
    --skip-gtids=true
    
    # 指定查看某个库
    mysqlbinlog ./mysql-bin.xxx -d database_name > a.sql
    
    # 过滤sql语句
    cat a.sql | grep -v "#"  | tr "\r\n" " " | tr ";" "\n" | grep -iE "create" | sed "s/\/\*\!\*\//;/g" > t.sql
    
    # 常用参数选项解释:
    --start-position=875 起始pos
    --stop-position=954 结束pos
    --start-datetime="2016-9-25 22:01:08" 起始时间点
    --stop-datetime="2019-9-25 22:09:46" 结束时间点
    --database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
    --base64-output=decode-rows 如果binlogrow,需要参数解码:--base64-output=decode-rows -v

    # 恢复
    1. 从指定一个日志恢复
    mysqlbinlog ./mysql-bin.000003 --skip-gtids=true | mysql -uroot -p -P3307
    
    2. 指定节点恢复
    mysqlbinlog ./mysql-bin.000004 --start-position=251 --stop-position=381 --skip-gtids=true | mysql -uroot -p -P3307
    
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000004 |   4 | Format_desc    |         2 |         123 | Server ver: 5.7.18-log, Binlog ver: 4                              |
| mysql-bin.000004 | 190 | Gtid           |         2 |         251 | SET @@SESSION.GTID_NEXT= 'fb3f6789-4209-11e8-b23e-525400b13db7:19' |
| mysql-bin.000004 | 251 | Query          |         2 |         381 | CREATE DATABASE `test` /*!40100 COLLATE 'utf8_general_ci' */       |
| mysql-bin.000004 | 381 | Gtid           |         2 |         442 | SET @@SESSION.GTID_NEXT= 'fb3f6789-4209-11e8-b23e-525400b13db7:20' |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+


###### 访问远程binlog
    mysqlbinlog -uroot -p111111 -h192.168.5.120 -P3307 --read-from-remote-server mysql-bin.000001##### 从远程备份到本地    mysqlbinlog --read-from-remote-server --raw --host=192.168.5.120 --port=3307 --user=root --password=xxxxx --stop-never mysql-bin.000001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL的binlog是以事件形式记录了对数据库执行更改的所有操作。在数据恢复方面,可以使用mysqlbinlog工具来恢复数据。 首先,你可以使用mysqlbinlog工具来解析和转换二进制日志文件。使用命令"mysqlbinlog --start-datetime="开始时间" --stop-datetime="结束时间" --database=数据库名 binlog文件名 | mysql -u用户名 -p密码",其中开始时间和结束时间是你想要恢复的时间范围,数据库名是你要恢复的数据库,用户名和密码是连接数据库所需的凭据。这个命令会将binlog文件中指定时间范围内的操作转换为SQL语句并执行,从而恢复数据。 另外,在每次重启MySQL服务时,也会自动刷新binlog日志。此外,使用mysqldump备份数据时,如果加上-F选项,也会刷新binlog日志。所以,如果你想要恢复到最新的binlog状态,可以重启MySQL服务或者进行一次完整的备份。 需要注意的是,binlog只能记录数据库的更改操作,而不能记录表结构的变更。如果你的目标是恢复表结构的变更,可以考虑使用其他工具或备份文件来恢复。 总之,通过使用mysqlbinlog工具以及重启MySQL服务或进行完整的备份,你可以对MySQL的binlog进行数据恢复。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mysql binlog日志恢复【亲测有效,有例子实测】](https://download.csdn.net/download/Jay_Fred/87602788)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL binlog 数据恢复](https://blog.csdn.net/qq_39550368/article/details/126901112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值