1.环境准备 我的是centos7.* MySQL版本为 5.6.37
2.两台linux服务器 我是先用VM创建一台虚拟机当作主服务器(master) 然后克隆一台当作从服务器(slaver)
选择 虚拟机 ——> 管理——>克隆 就可以快速创建一台从服务器
3.要保证两台服务器之间的mysql能互相通讯 即在slaver服务能访问主服务器master 所以要授权
grant all privileges *.* on root@'%' identified by ''password'
*.* 代表的是库名.表名 %是任何ip地址都可以访问 root 用户名 password 是密码
4.在主服务器上设置log-bin 日志开启的配置 vi /etc/my.cnf
5.重启mysql服务 service mysqld restart 会在 /var/lib/mysql 文件夹下看到
mysql-bin.000001
6.进入mysql 输入 show master status 可以查看最新的bin-log文件的属性
position就是指 mysql-bin.000001 文件中内容的位置
7.flush logs 会刷新日志文件 即生成新的日志文件 一般备份后需要执行此操作
8.测试bin-log文件怎么来恢复删除的数据库
1>首先创建一个表 create table class(id int,name varchar(20));
此时在show master status bin日志文件 position会变 查看最新的 mysql-bin.000002 日志文件 此文件是一个二进制文件 可以用命令查看
2>首先切换到 日志文件所在目录 /var/lib/mysql 输入命令 mysqlbinlog --no-defaults mysql-bin.000002会显示文件的内容
3>此时我们在插入一条数据 insert into class values(1,'xuebaclass');
再次执行上面的操作 会看到position位置变化了 并且 记录了 插入语句
4>执行flush logs; 会产生新的bin-log文件 000003
5>此时我们来删除表 drop table class 那么我们怎么恢复删除表之前的数据呢? 首先flush logs 之前的bin-logs 记录了 相关的执行sql语句的记录
我们就可以用此依据来恢复数据
6>进入 bin-log所在的目录 /var/lib/mysql 执行 mysqlbinlog --no-defaults mysql-bin.0000002|mysql -uroot -p wx
输入密码 就可以对数据库wx 中的数据库表class进行恢复
我们可以看到class 表已经恢复了
执行查询语句 可以看到 数据也恢复了
9.至此我们已经完成了数据的恢复任务 此时大家可能又有和我一开始一样的疑问了 每一次删除数据之前都要手动flush logs那不是很麻烦 而且发生了勿删 别人肯定不会flush logs的
10.我们明白 只要是对表更改就有日志记录 如果恢复当前的日志 也最终会执行删除语句 无法恢复 那么我们只执行到 删除语句之前的日志文件呢 数据是不是就会恢复了
11.对的 因此有以下命令可以进行恢复数据
mysqlbinlog --no-defaults mysql-bin.000001 --start-position='你恢复数据的起始位置(是上面position的位置) --stop-postion=''你恢复数据的结束位置' | mysql -uroot -wx
然后数据密码就可以恢复数据了
当然还有根据时间来恢复的命令 读者可以自己去试试 我就不对操作进行粘贴图片了(下一篇文章讲解主从复制的实现)
最后谢谢大家,大家觉得我写的可以 可以给我鼓励 打赏一下,多少都可以 哈哈哈