最近在學習mysql,在做相關練習中遇到了一些問題,以下是本人對所遇到的問題提出的解決辦法,曬出來希望能對大家有所幫助,有不足之處望各位老鐵給予斧正~
資料的備份和還原可以借助mysqldump語句和mysqlbinlog語句,以下主要對這兩種方法進行哔哔

~
我的開發環境:mysql5.7.17
mysqldump:
mysqldump是mysql用于轉存儲資料庫的實用語句塊,可在指定位置生成.sql檔案,sql檔案裡面存放了資料庫中各Table的建立語句和插值語句等等,當然有些.sql檔案裡的語句并不是那麼直覺,比如通過mysqlbinlog生成的.sql檔案,後面會進行講解~
mysqldump 備份指定資料庫:
mysqldump -u root -pdatabase_name > E:/filename.sql
database_name 是你想備份的資料庫名稱,filename是你儲存的.sql檔案的檔案名(盡量不使用中文,此時選擇的是E盤的根目錄)
例如:将資料庫testdb備份到 E:/backup.sql
咦?為什麼報錯?
原因是 mysqldump 語句是這樣用滴:
exit 出 mysql 在cmd下直接鍵入mysqldump -u root -p testdb > E:/backup.sql語句,切記,此時末尾不加分号!回車後輸入 root 密碼(也就是進入mysql的密碼),若不提示錯誤,便說明備份完成!
下面我們來看看備份的sql檔案内容是什麼樣子的:我是用Notepad打開的,sql檔案也可以用記事本打開的~
當我們再調用該sql檔案時,mysql便可借助其中的資料庫資訊将資料庫還原進mysql,用法如下:
mysql -u root -p database_name < E:/filename.sql
同樣注意的是該語句在cmd下鍵入,而非mysql服務中!還有一點是此時的database_name是mysql中已存在的資料庫,即該語句不能生成新的資料庫!不妨試上一試,我先drop掉資料庫testdb:
不負衆望,它報錯了~哈哈! 錯誤是testdb資料庫未知,因為之前我們已近drop掉它了!
下面我将目标資料庫改為mysql(mysql服務自帶的資料庫),嘿嘿,順利通過~
之後可以在資料庫mysql中輸入:show tables;便會發現名為chinesetest的表~select * from chinesetest;便會發現表裡的資訊和之前testdb中的一木一樣!神奇的mysql~
常用的mysqldump語句還有:
mysqldump -u root -pdatabase_name table1 table2 ... > E:/filename.sql
這是選擇性的備份database_name資料庫中的 table1,table2表...
mysqldump -u root -p --all-databases >E:/filename.sql
這是備份所有database,此處要注意文法,--all-databases 為英文輸入,“-” 不要忘記加
網上還有好多關于mysqldump的大神部落格,老鐵們想深入學習可以去看看哈,有好的文章老鐵們可以留言給我啊,共同學習共同進步,

~
mysqlbinlog:
binlog是二進制日志,簡單的了解就是将資料庫中的資料以二進制的形式記錄下來,預設形式是hostname.00000x(x=1,2,3...)。此外,mysqlbinlog生成的備份檔案是動态備份!mysqlbinlog生成備份檔案後,我們再對database進行更改,但是此次更改操作由于發生在mysqldump後不會被記錄在.sql檔案中,這樣就很尴尬了。。。但是,binlog日志會将我們對資料的所有操作都記錄下來,它就像是一個工作在背景的螢幕,以一定的時間間隔檢視我們在此段時間内執行的操作,并将之記錄下來~
其實吧,重點是如何開啟log_bin,這是最傷的,哎~~
如何開啟log_bin? 請見文章: 如何開啟log_bin?
利用mysqlbinlog還原資料庫:
在确定log_bin打開後,在mysql下輸入 show master status;便可檢視目前logbin檔案的位置戳:
wangbo-bin.000006為logbin的檔案,wangbo也就是hostname,position值為716,也就是目前操作完成時位置戳指向716
那麼如何借助position來還原操作呢?
假設我們現在向 testdb 資料庫下的表chinesetset中插入資料段('遊戲','男','2017-4-3'),然後再删除這一段資料,再借助mysqlbinlog恢複到删除之前的狀态~
插入資料段:
可見插入新的資料段在位置戳2285到2564之間,現在我們删掉('遊戲','男','2017-4-3') :
用mysqlbinlog恢複到删除資料段之前:
mysqlbinlog --start-position = P1 --stop-position=P2 E:/hostname.00000x >E:/filename.sql
mysql -u root -pdatabase_name <E:/filename.sql
P1,P2為E:/hostname.00000x中位置戳的開始點和結束點,該語句就是将P1到P2之間的操作轉存為 E:/filename.sql ,注意此時要指明logbin的檔案路徑。實踐走一波:
最後要說的是,mysqlbinlog還有有很多用法,比如 :利用時間戳,利用xid等,敬請期待~