mysql利用二进制日志mysqlbinlog备份数据和恢复数据

什么是二进制日志

二进制日志就是记录着mysql数据库中的一些写入性操作,比如一些增删改,但是,不包括查询!

 

二进制日志有哪些功能

一般情况下,二进制日志有着数据复制和数据恢复的功能

 

查看二进制日志是否开启

mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |

开启二进制日志 : vi /etc/my.cnf

[mysqld]
log-bin=/data/mydata/log_bin/mysql-bin
server-id=1

查看所有的binlog日志列表

mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     29038 |

刷新二进制日志

flush logs;

重置(清空)二进制日志文件

mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |      1341 |
+------------------+-----------+

使用mysqldump备份数据时,加上-F选项可以重新生成一个新的二进制日志文件

mysqldump -uroot -p vincent user -F  > user_bak.sql

 

查看二进制日志文件的内容报错

[root@vincent-public log_bin]# mysqlbinlog mysql-bin.000001
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'

解决

第一种:在mysqlbinlog 后边加上 --no-defaults 
​第二种:注释掉配置文件里边的default-character-set=utf8

把二进制日志文件导出成普通文件

mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 > mysqlbin.sql

找出要恢复的位置

(1)找出关键字的行数:mysqlbinlog --no-defaults mysql-bin.000001 | cat -n  | grep -iw 'drop'

[root@vincent-public log_bin]# mysqlbinlog --no-defaults mysql-bin.000001 | cat -n  | grep -iw 'drop'
  4180  DROP TABLE `user` /* generated by server */


(2)打印出相关内容:mysqlbinlog --no-defaults mysql-bin.000001 | cat -n | sed -n '4170,4180p'

[root@vincent-public log_bin]# mysqlbinlog --no-defaults mysql-bin.000001 | cat -n | sed -n '4170,4180p'
  4170  # at 59578
  4171  #190419  0:41:48 server id 1  end_log_pos 59609 CRC32 0x36cda2b7        Xid = 6380
  4172  COMMIT/*!*/;
  4173  # at 59609
  4174  #190419  0:41:48 server id 1  end_log_pos 59674 CRC32 0x8de2f06a        Anonymous_GTID  last_committed=145      sequence_number=146
  4175  SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
  4176  # at 59674
  4177  #190419  0:41:48 server id 1  end_log_pos 59787 CRC32 0x6b2edd2b        Query   thread_id=14    exec_time=0     error_code=0
  4178  use `vincent`/*!*/;
  4179  SET TIMESTAMP=1555605708/*!*/;
  4180  DROP TABLE `user` /* generated by server */

恢复数据

  • 第一步:把备份的数据表user恢复到数据库中:

mysql -uroot -p vincent < /mysql_data_back/user_bak.sql

  • 第二步:利用上面找到的删除的位置进行恢复数据

mysqlbinlog --no-defaults --set-charset=utf8  --stop-position="59674" /data/mydata/log_bin/mysql-bin.000001 | mysql -uroot -p 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值