mysql主从复制原理(一)

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

然后数据密码就可以恢复数据了

当然还有根据时间来恢复的命令  读者可以自己去试试 我就不对操作进行粘贴图片了(下一篇文章讲解主从复制的实现)



最后谢谢大家,大家觉得我写的可以 可以给我鼓励 打赏一下,多少都可以 哈哈哈











猜你喜欢

转载自blog.csdn.net/zzxwx/article/details/78028275
今日推荐