mysql优化 个人笔记 非礼勿扰 -m08

binlog 简单使用 数据恢复

1. 查看binlog状态

show variables like '%log%';

在这里插入图片描述

2. 打开binlog

vim /etc/my.cnf

[mysqld]
# binlog 配置
log-bin =/var/lib/mysql/log-bin.log
expire-logs-days = 14
max-binlog-size = 500M
server-id = 1

重启 mysql:
service mysqld restart;

再次查看binlog日志 已经开启:

 show variables like 'log_bin';

在这里插入图片描述

3. 创建数据库 创建表

CREATE DATABASE
IF NOT EXISTS binlog_test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4. 查看binlog

cd /var/lib/mysql
ll

在这里插入图片描述
也可以直接通过命令查看:

mysql> show master logs;

mysql优化 个人笔记 非礼勿扰 -m08_第1张图片

5.插入数据

INSERT INTO `binlog_test`.`test` (`id`, `name`, `age`)
VALUES
	('1', '小智障', '18'),('2', '大傻子', '20');

  1. 查看最后一个binlog日志的编号名称及其最后一个操作事件pos结束点的值

    show master status; 
    

    mysql优化 个人笔记 非礼勿扰 -m08_第2张图片

  2. 刷新日志

    Flush logs;
    
  3. 查看日志 刷新之后 生成一个新的文件

     show master logs;
    

    mysql优化 个人笔记 非礼勿扰 -m08_第3张图片

  4. 每当mysqld服务重启时,会自动执行刷新binlog日志命令,

  5. mysqldump备份数据时加-F选项也会刷新binlog日志

  6. 清空所有binlog日志

    reset master;
    
  7. 查看日志文件内容

cd /var/lib/mysql
mysqlbinlog    log-bin.000002
报错:
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'
解决方法:
	1. MySQL的配置/etc/my.cnf中将default-character-set=utf8 修改为 character-set-server = utf8    重启服务器 
	2.no-defaults参数 
		mysqlbinlog   --no-defaults  log-bin.000002 

可以这样查看:

 show binlog events in 'log-bin.000001';
-- 指定查询,从pos点406开始查询 
 show binlog events in 'log-bin.000001'  from 154;
-- limit 范围查询
show binlog events in 'log-bin.000001'  from 154 limit 3,5 ;

mysql优化 个人笔记 非礼勿扰 -m08_第4张图片
mysql优化 个人笔记 非礼勿扰 -m08_第5张图片
mysql优化 个人笔记 非礼勿扰 -m08_第6张图片

6.测试恢复数据

0. 删除日志
reset master;
1.清空表 : truncate table test;
2.创建一条数据:
INSERT INTO `binlog_test`.`test` (`id`, `name`, `age`)
VALUES
	('1', '小智障', '18');
3.模拟数据库备份 
mysqldump   -u root  -p binlog_test > /usr/local/test.sql;
1. 再新增一条数据
INSERT INTO `binlog_test`.`test` (`id`, `name`, `age`)
VALUES
	('2', '大智障', '22');
2. 模拟误删 
mysql> truncate table test;
3. select * from test;
 删库了 要不要跑路啊!!!
4. 先还原备份的数据库 
source /usr/local/test.sql;
5.select * from test;
一条数据 还差一条呢 ? 跑路吗?
5. 别慌 还有binlog呢
刷新一个新的日志 : flush logs;
为啥要?刷新一个新的日志呢  之前日志是01 刷新值周日志是02
新的操作都会写入到026. 查看日志
show master logs;
7. show binlog events in 'log-bin.000001';
8. 查看pos 从586开始  730结束
/usr/bin/mysqlbinlog   --no-defaults --start-position=586 --stop-position=730 --database=binlog_test  /var/lib/mysql/log-bin.000001 | /usr/bin/mysql -uroot -p123456 -v test
9. 查看数据 我擦 居然恢复了
10. 还能根据日期恢复  cha
/usr/bin/mysqlbinlog   --no-defaults --start-datetime="2018-04-27 20:57:55" --stop-datetime="2018-04-27 20:58:18"  --database=binlog_test  /var/lib/mysql/log-bin.000001 | /usr/bin/mysql -uroot -p123456 -v test 
 
查看日期: mysqlbinlog   --no-defaults  log-bin.000001 


mysql优化 个人笔记 非礼勿扰 -m08_第7张图片
mysqlbinlog --no-defaults log-bin.000001
mysql优化 个人笔记 非礼勿扰 -m08_第8张图片

你可能感兴趣的:(mysql)