看了上一篇博文的发布时间,到目前已经有三个月没更新博文了。这三个月经历了不少事情,包括工做、生活和感情等等。因为我的发展的缘由,这个月准备换工做啦。在这段时间,我会把Web大型项目中所接触到的技术都总结出来,分享给各位支持个人博友。博客园是个好地方,在这里能学到不少东西,同时你也能够收获不少东西,就好比我本人,去年被两个比较大型的在线培训机构邀请当讲师(只接受了一家,固然因为太忙因此课程录制也不是特别多),另有一企业聘请我写一本技术相关的书籍(我拒了,没时间写)等等,这些都是我在博客园里获得的回报。因此仍是要感谢博客园这个平台。mysql
好了,废话很少说,直接进入今天的知识分享。此次博文我将分享下MySQL的用户受权和bin-log日志,这博文是为下一篇 MySQL主从复制技术博文作准备的,本博文并非理论解释这些技术,而是经过实战去应用这些技术,由于,理论的东西,百度一下就一大堆,而实际如何去应用的,或者百度上比较少,因此,我分享的技术都是理论+实战,让博友阅读完本文后,就能本身动手去作实验,让本身更深刻完全地理解好这些较为高级的技术。sql
1、平台环境数据库
centos6.五、MySQL5.6.22。首先固然是要有本身的环境,我是在虚拟机上去模拟实验的,由于MySQL要实现主从复制,因此须要两个服务器环境,因此在虚拟机中,你能够克隆一份如出一辙的服务器,以下图:centos
我这里的服务器里已经提早安装好MySQL了,这里我就不演示去安装环境了。这里我已经正常进入两个服务器,而后启动了MySQL。(要是这些操做过程不懂,能够留言)到此咱们就把环境都准备好了。服务器
2、MySQL用户受权ide
因为我演示的是主从复制技术,因此我这里只讲解给从服务器设置受权用户,也就是只受权给从服务器链接到主服务器去。这里个人主服务器的IP是192.168.197.129,从服务器的IP的192.168.197.130。学习
首先查看下主数据库服务器里的用户表,这里咱们知道目前只有root用户,测试
接着咱们要添加一个新用户,而后只能是从服务器去链接:spa
grant all privileges on *.* to kelly@192.168.197.130 identified by '123456';命令行
这里我解释下这句命令行的意思,grant all指的是受权全部操做权限(增删改查),*.*指的是全部数据库,kelly指的是用户名,123456是密码,192.168.197.130指的是所要受权的远程IP地址。整一句的意思是,建立一个用户kelly密码为123456,而后将此用户受权给远程IP为192.168.197.130能够访问,此用户能够访问主服务器里的全部数据库。
接着咱们实际操做一遍,
而后咱们在从服务器进行链接,再查看下是否 是主服务器的数据库:
到此,咱们已经完成了给从服务器受权,你们跟着上面一步步操做进行测试,我相信会成功的,如有问题能够留言。
3、bin-log日志
bin-log日志的定义和做用我就直接百度过来了,也很好理解的。
基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;
做用:能够用来查看数据库的变动历史(具体的时间点全部的SQL操做)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、MySQL的复制(主主数据库的复制、主从数据库的复制)
文件位置:默认存放位置为数据库文件所在目录下
文件的命名方式: 名称为hostname-bin.xxxxx (重启mysql一次将会自动生成一个新的binlog)
状态的查看:mysql> show variables like '%log_bin%';
以上这些都是百度复制过来的,咱们看完后也很好理解了,bin-log日志也就是二进制日志,只要数据发生改变(增删改),都是记录到日志里。因此咱们能够经过bin-log日志进行数据恢复。
一、开启big-log日志
打开MySQL的配置文件:/etc/my.cnf(我这里的MySQL是放在/etc下的),
在配置文件中添加此行代码: log-bin=mysql-bin,
而后重启下MySQL:service mysqld restart
进入数据库查看是否开启成功:mysql> show variables like '%log_bin%';
接着我实际演示一次:
根据介绍流程操做是成功的,你们要本身动手测试下。
二、bin-log日志的使用
首先咱们来认识几个与bin-log相关的MySQL命令:
flush logs; 会多一个最新的bin-log日志
show master status; 查看最后一个bin-log日志的相关信息
reset master; 清空全部的bin-log日志
咱们先看一下bin-log日志放在哪:
这个时候咱们进入到MySQL里,查看一下最后一个bin-log日志信息
而后刷新一下bin-log日志,再查看下最后一个bin-log日志,此时已经变成了000002这个版本了,之后的增删改操做就记录在这个最新的bin-log日志里
咱们能够看一下bin-log日志存放的目录,这里就多出了新版本的bin-log日志000002,之后的操做都是记录在这里面了
接着咱们建立一个数据库,而后建立一个表,再插入一些记录,而后再查看下日志信息有没有变化
接着咱们再看下bin-log信息,此时位置已经发生了变化,也就是说已经对刚才的操做进行了记录。
接着咱们打开二进制日志,看看里面就是记录了什么,咱们须要知道的是,若是用vi打开二进制日志的乱码的,因此咱们须要使用下面的命令进行打开:
/usr/local/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000002
我把打开的日志截图看看(截图太多了但愿你们别介意,由于想让你们了解的更清楚),我用红色圈起来的都是咱们须要注意的,end_log_pos大概的意思是这这个操做的最后位置在哪,例如:end_log_pos 400,在299-400之间是存了插入操做的记录的,insert into test1 values(1); 其余的能看懂就本身看,不懂看错就跳过也没事。
下面咱们来作一个利用二进制恢复数据库数据的操做。
流程以下:
(1)先生成一个新的日志文件(000003);
(2)而后删除test1表的数据;
(3)而后利用前一个日志恢复数据(000002);
(4)最后查看是否恢复成功。
具体以下:
接着用mysql-bin.000002进行数据恢复:咱们到数据库里查看下是否恢复成功了:
这个时候,已经证实咱们使用bin-log日志进行数据恢复成功了。
在这里可能有博友就会问:“博主,你那实验在测试时是先刷新了个bin-log版本,假如我没刷新,而后删除语句就记录在了000002这个版本了,那么你怎么恢复啊?由于你使用000002进行恢复,也是会执行删除操做的记录的,这不是坑爹吗?”。
没错,假若有博友能想到这个了,那说明上面所讲的知识点基本上理解了,并有本身去思考。这里咱们固然有办法在一个有删除记录的bin-log日志进行数据恢复,你有想过为啥会有end-log-pos这个位置记录吗?这就是咱们解决以上问题的方法之一:定位恢复,即恢复你想恢复的数据。我打个比方,在一个bin-log日志里,insert操做的end-log-pos为250,而delete的end-log-pos为300。那么,咱们能够将数据恢复到250这个位置,而以后的操做就不恢复了,这里咱们先看一下mysqlbinlog的经常使用参数:
--stop-position = "100" --start-position = "50" 根据开始位置或者结束位置来恢复本身想恢复的参数
--stop-date= "2016-03-02 12:00:00" --start-date= "2016-03-02 11:55:00" 根据开始日期时间或者结束位置来恢复本身想恢复的参数
例如:
/usr/local/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000001 --stop-position="450"|mysql -uroot -p
此句的意思就是将数据恢复到位置在450以前的就OK了,在450以后(假如后面还有操做记录)的就不须要进行恢复了。
下面我经过实验操做一次:
首先重置一下bin-log日志,让其恢复到初始状态
接着插入几条数据,再删除些数据
这个时候咱们能够看一下mysql-bin.000001里的内容(这里我只截取一部分):
因为咱们知道删除的是大于2的数据,因此知道3和4被删除了,这里咱们就恢复3和4(固然,假如误删了整个表,这里就恢复到删除操做以前的就能够了)执行以下命令:
接着咱们进入数据库查看下是否进行恢复成功:
到此,bin-log日志的讲解已经告一段落。
4、总结
本次博文对MySQL的用户受权 和 bin-log日志 这两个知识点进行了详细讲解和实操,对此为下一篇讲解MySQL主从复制技术作好的铺垫。但愿想学到技术的朋友能够本身跟着博文动手实验一次,固然,高手能够忽略,也能够留言交流。
若是此博文中有哪里讲得让人难以理解,欢迎留言交流,如有讲解错的地方欢迎指出。
若是您以为您能在此博文学到了新知识,请为我顶一个,如文章中有解释错的地方,欢迎指出。
互相学习,共同进步!