binlog(持久化)
作用:数据恢复,同步数据到es,redis等,主从复制
相关配置
相关命令:
-- 查看当前数据库是否开启binlog
show variables like '%log_bin%';
-- 查看当前数据库binary log的位置(相关的日志文件)
show master status;
-- 查看binlog日志文件有哪些(所有)
show binary logs;
-- 查看格式
show variables like 'binlog_format';
-- 查看具体日志文件
show binlog events in 'mysql-bin.000001';
配置文件:
[mysqld]
#binlog 设置
sync_binlog=0 #设置成0, 跟随数据库fyanc(),设置成1:每次提交将cache同步到磁盘,设置成n,但累积 N 个事务后才 fsync()
log-bin=/var/lib/mysql/mysql-bin # 日志存放位置
server_id=1 # 默认0,集群内的 MySQL 服务器 ID ,如果做数据库集群那么必须全局唯一,一般来说不推荐 指定 server_id 等于 1。
max_binlog_size=100M # 默认1G binlog每个日志文件大小
binlog_cache_size=4M //binlog缓存大小
expire_logs_days=7 //binlog过期清理时间
max_binlog_cache_size=512m //最大binlog缓存大小
# binlog模式的选择,可参考链接:http://blog.itpub.net/20892230/viewspace-2129567/
binlog_format="ROW" //MIXED STATEMENT
binlog_rows_query_log_events =1
binlog_row_image='minimal' # 默认是full,记录全部字段, minimal表示只记录更改字段的值和where字段的值
binlog记录形式
-
Statement格式: 记录执行的语句,日志小,性能好,但是一些函数的使用可能不一致,主键自增不一致等问题,如获取当前时间插入记录的语句,准确性最低
-
Row格式:记录每行数据的变化,而不是记录执行的语句,一致性很强,但是数据量会很大,修改表结构可能会产生大量的记录,准确性最高,但是数据量大
-
mixed格式:混合模式,一般语句用statement模式记录,特殊语句用row模式记录,大量减少数据,保证了数据的一致性和恢复的准确性
binlog 持久化
binlog 的持久化策略通过参数 sync_binlog 控制:与redo log类似
sync_binlog=0 的时候,表示每次提交事务都只 write,不 fsync() sync_binlog=1 的时候,表示每次提交事务都会执行 fsync() sync_binlog=N(N>1) 的时候,表示每次提交事务都 write,但累积 N 个事务后才 fsync()
恢复数据案例
- 刷新日志:将日志落盘 FLUSH LOGS
- mysqlbinlog解析binlog (根据时间和位置解析日志),解析出sql文件
mysqldump -u root -p --master-data=2 student > student.sql
3.用sql文件恢复数据
mysql -u root -p student < student.sql
mysqldump参数说明
命令案例:
mysqlbinlog masami-bin.000001 --start-position=1579 --stop-position=2257| mysql -uroot -proot
mysqlbinlog 一些参数如下 这里我使用 --start-position 和 stop-position来做操作
--database ##与"-d"作用相同,用于指定数据
-d ##与“database”作用相同,用于指定数据库
--start-datetime ##起始时间点
--stop-datetime ##结束时间点
--start-position ##起始位置
--stop-position ##结束位置
注意: 如果只是指定了--start-position 那他会从start-position到这个文件结束
如果只是指定了--stop-position 那他会从问价开始到stop-position