天天看點

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

原文位址:http://www.cnblogs.com/it-cen/p/5234345.html

MySQL使用者授權 和 bin-log日志 詳解和實戰

看了上一篇博文的釋出時間,到目前已經有三個月沒更新博文了。這三個月經曆了很多事情,包括工作、生活和感情等等。由于個人發展的原因,這個月準備換工作啦。在這段時間,我會把Web大型項目中所接觸到的技術都總結出來,分享給各位支援我的博友。部落格園是個好地方,在這裡能學到很多東西,同時你也可以收獲很多東西,就比如我本人,去年被兩個比較大型的線上教育訓練機構邀請當講師(隻接受了一家,當然由于太忙是以課程錄制也不是特别多),另有一企業聘請我寫一本技術相關的書籍(我拒了,沒時間寫)等等,這些都是我在部落格園裡得到的回報。是以還是要感謝部落格園這個平台。

好了,廢話不多說,直接進入今天的知識分享。這次博文我将分享下MySQL的使用者授權和bin-log日志,這博文是為下一篇 MySQL主從複制技術博文做準備的,本博文并不是理論解釋這些技術,而是通過實戰去應用這些技術,因為,理論的東西,百度一下就一大堆,而實際如何去應用的,或者百度上比較少,是以,我分享的技術都是理論+實戰,讓博友閱讀完本文後,就能自己動手去做實驗,讓自己更深入徹底地了解好這些較為進階的技術。

一、平台環境

centos6.5、MySQL5.6.22。首先當然是要有自己的環境,我是在虛拟機上去模拟實驗的,因為MySQL要實作主從複制,是以需要兩個伺服器環境,是以在虛拟機中,你可以克隆一份一模一樣的伺服器,如下圖:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

我這裡的伺服器裡已經提前安裝好MySQL了,這裡我就不示範去安裝環境了。這裡我已經正常進入兩個伺服器,然後啟動了MySQL。(要是這些操作過程不懂,可以留言)

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

到此我們就把環境都準備好了。

二、MySQL使用者授權

由于我示範的是主從複制技術,是以我這裡隻講解給從伺服器設定授權使用者,也就是隻授權給從伺服器連接配接到主伺服器去。這裡我的主伺服器的IP是192.168.197.129,從伺服器的IP的192.168.197.130。

首先檢視下主資料庫伺服器裡的使用者表,這裡我們知道目前隻有root使用者,

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

接着我們要添加一個新使用者,然後隻能是從伺服器去連接配接:

grant all privileges on *.* to [email protected] identified by '123456';

這裡我解釋下這句指令行的意思,grant all指的是授權所有操作權限(增删改查),*.*指的是所有資料庫,kelly指的是使用者名,123456是密碼,192.168.197.130指的是所要授權的遠端IP位址。整一句的意思是,建立一個使用者kelly密碼為123456,然後将此使用者授權給遠端IP為192.168.197.130可以通路,此使用者可以通路主伺服器裡的所有資料庫。

接着我們實際操作一遍,

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰
MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

然後我們在從伺服器進行連接配接,再檢視下是否 是主伺服器的資料庫:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰
MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

到此,我們已經完成了給從伺服器授權,大家跟着上面一步步操作進行測試,我相信會成功的,若有問題可以留言。

 三、bin-log日志

bin-log日志的定義和作用我就直接百度過來了,也很好了解的。

基本定義:二進制日志,也成為二進制日志,記錄對資料發生或潛在發生更改的SQL語句,并以二進制的形式儲存在磁盤中;

作用:可以用來檢視資料庫的變更曆史(具體的時間點所有的SQL操作)、資料庫增量備份和恢複(增量備份和基于時間點的恢複)、MySQL的複制(主主資料庫的複制、主從資料庫的複制)

檔案位置:預設存放位置為資料庫檔案所在目錄下

檔案的命名方式: 名稱為hostname-bin.xxxxx (重新開機mysql一次将會自動生成一個新的binlog)

狀态的檢視:mysql> show variables like '%log_bin%';

以上這些都是百度複制過來的,我們看完後也很好了解了,bin-log日志也就是二進制日志,隻要資料發生改變(增删改),都是記錄到日志裡。是以我們可以通過bin-log日志進行資料恢複。

1、開啟big-log日志

打開MySQL的配置檔案:/etc/my.cnf(我這裡的MySQL是放在/etc下的),

在配置檔案中添加此行代碼: log-bin=mysql-bin,

然後重新開機下MySQL:service mysqld restart

進入資料庫檢視是否開啟成功:mysql> show variables like '%log_bin%';

接着我實際示範一次:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰
MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰
MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

根據介紹流程操作是成功的,大家要自己動手測試下。

2、bin-log日志的使用

首先我們來認識幾個與bin-log相關的MySQL指令:

flush logs; 會多一個最新的bin-log日志

show master status; 檢視最後一個bin-log日志的相關資訊

reset master; 清空所有的bin-log日志

我們先看一下bin-log日志放在哪:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

這個時候我們進入到MySQL裡,檢視一下最後一個bin-log日志資訊

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

然後重新整理一下bin-log日志,再檢視下最後一個bin-log日志,此時已經變成了000002這個版本了,以後的增删改操作就記錄在這個最新的bin-log日志裡

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

我們可以看一下bin-log日志存放的目錄,這裡就多出了新版本的bin-log日志000002,以後的操作都是記錄在這裡面了

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

接着我們建立一個資料庫,然後建立一個表,再插入一些記錄,然後再檢視下日志資訊有沒有變化

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

接着我們再看下bin-log資訊,此時位置已經發生了變化,也就是說已經對剛才的操作進行了記錄。

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 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); 其他的能看懂就自己看,不懂看錯就跳過也沒事。

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰
MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

下面我們來做一個利用二進制恢複資料庫資料的操作。

流程如下:

(1)先生成一個新的日志檔案(000003);

(2)然後删除test1表的資料;

(3)然後利用前一個日志恢複資料(000002);

(4)最後檢視是否恢複成功。

具體如下:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰
MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

接着用mysql-bin.000002進行資料恢複:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

我們到資料庫裡檢視下是否恢複成功了:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

這個時候,已經證明我們使用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-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

接着插入幾條資料,再删除些資料

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

這個時候我們可以看一下mysql-bin.000001裡的内容(這裡我隻截取一部分):

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

由于我們知道删除的是大于2的資料,是以知道3和4被删除了,這裡我們就恢複3和4(當然,假如誤删了整個表,這裡就恢複到删除操作之前的就可以了)執行如下指令:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

接着我們進入資料庫檢視下是否進行恢複成功:

MySQL使用者授權 和 bin-log日志 詳解和實戰(很詳細) 原文位址:http://www.cnblogs.com/it-cen/p/5234345.html MySQL使用者授權 和 bin-log日志 詳解和實戰

到此,bin-log日志的講解已經告一段落。

四、總結

本次博文對MySQL的使用者授權 和 bin-log日志 這兩個知識點進行了詳細講解和實操,對此為下一篇講解MySQL主從複制技術做好的鋪墊。希望想學到技術的朋友可以自己跟着博文動手實驗一次,當然,高手可以忽略,也可以留言交流。

繼續閱讀