前言:mysql-bin文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。
这样做主要有以下两个目的:1:数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。2:主从服务器之间同步数据 主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
1、查看大小
每次重启就会产生一个。
mysql> show binary logs;
2、查看配置
默认最大是1G
mysql> show global variables like '%bin%';+-----------------------------------------+----------------------+| Variable_name | Value |+-----------------------------------------+----------------------+| binlog_cache_size | 32768 || binlog_direct_non_transactional_updates | OFF || binlog_format | MIXED || binlog_stmt_cache_size | 32768 || innodb_locks_unsafe_for_binlog | OFF || log_bin | ON || log_bin_trust_function_creators | OFF || max_binlog_cache_size | 18446744073709547520 || max_binlog_size | 1073741824 || max_binlog_stmt_cache_size | 18446744073709547520 || sql_log_bin | ON || sync_binlog | 0 |+-----------------------------------------+----------------------+12 rows in set (0.00 sec)
3、清除日志
3.1 RESET MASTER
执行RESET MASTER命名删除全部日志
mysql> reset master;Query OK, 0 rows affected (8.51 sec)
可以看到,以前的日志全部被清空,新的日志从00001开始。
3.2 PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
执行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是将'******'编号之前的所有日志进行删除 执行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是将在'yyyy-mm-dd hh:mm:ss'时间之前的所有日志进行删除4、配置日志
4.1 设置日志保留时长expire_logs_days自动删除
查看当前日志保存天数:
show variables like ‘%expire_logs_days%’;
这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:
set global expire_logs_days=7;
设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置
expire_logs_days = 7
5、误删恢复
使用binlog恢复数据:
使用mysqlbinlog命令恢复日志
mysqlbinlog -d test /root/mysql/mysql-bin.000001|mysql -uroot -ppassword
#1、关于mysqlbinlog在mysql 5.0上的使用方法,可以参考:官方资料
#2、如果不知道log-bin存放的文件位置,可以使用下面的命令查看:
mysql -uroot -ppassword -e
'SHOW BINLOG EVENTS G'
#3、当只是需要恢复部分记录的时候,你可以使用时间点或位置点来定位,例如:
mysqlbinlog
--start-date="2005-04-20 9:01:00" --stop-date="2005-04-20 10:00:01" /var/log/mysql/bin.123456|mysql -uroot -ppassword[code]
#意思是恢复4月20日早上9点到10点这一段时间的数据。
mysqlbinlog
--start-position="368301" --stop-position="368312"/var/log/mysql/bin.123456| mysql -uroot -pmypwd
#意思是重做368301到368312位置点之间的操作。(位置点可以就是用mysqlbinlog看到的
at
xxx节点)
mysqlbinlog
--start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
#同样的,如果我们只是想查看某段时间的操作,直接把它导到一个文件即可。