MySQL用戶受權 和 bin-log日誌 詳解和實戰

看了上一篇博文的發佈時間,到目前已經有三個月沒更新博文了。這三個月經歷了不少事情,包括工做、生活和感情等等。因爲我的發展的緣由,這個月準備換工做啦。在這段時間,我會把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主從複製技術作好的鋪墊。但願想學到技術的朋友能夠本身跟着博文動手實驗一次,固然,高手能夠忽略,也能夠留言交流。

 

若是此博文中有哪裏講得讓人難以理解,歡迎留言交流,如有講解錯的地方歡迎指出。

 

  若是您以爲您能在此博文學到了新知識,請爲我頂一個,如文章中有解釋錯的地方,歡迎指出。

  互相學習,共同進步!

相關文章
相關標籤/搜索