MySQL備份有三種方法,分別是mysqldump、mysqlhotcopy、mysql-binlog備份,他們各自有優點和缺點。
1、mysqldump的備份
原理:全量備份,查處要備份的表結構,在這個表結構上將建表語句(CREATE)和插入語句(INSERT)語句,都寫到你要備份的文件中。
優點:支持innodb的存儲引擎,但是其mysqldump轉存結果前,會將這個結果集放入內存中,數據量過大可能存在問題(手冊里說的),所以有主從模式以及mysql-bin增量備份的模式,就可以減少備份的時間,我們可以每天夜里都備份一次,或者寫一個shell腳本,進行備份,shell腳本還是要學習的。
由於我的mysqld安裝目錄在/usr/local/mysql,所以我的mysqldump的路徑為在/usr/local/mysql/bin/mysqldump,在這里做一個軟連接,使mysqldump作為系統命令。
ln -s /usr/local/mysql/bin/mysqldump /usr/bin ,如圖所示:
語法可以上網查一下:(注意了,mysqldump等文件使一個可執行文件,使在Linux的cli中運行的)
案例一:把數據庫db_test備份到/tmp/db_test文件中,代碼如下【-h 最好加上,格式標准,再說以后分布式的時候都會用到】:
mysqldump -h 127.0.0.1 -uroot -p db_test>/tmp/db_test.sql
效果如下:
我們看看,db_test.sql的問題內容,如下所示:
當然還可以把整個數據庫mysqldump備份,具體的問題就具體分析。
2、mysqlhotcopy備份,也可以叫熱備份
優點:快
缺點:只支持MySIAM存儲引擎
這個就不做例子了,思路和mysqldump差不多,具體用法可以百度查
3、mysql-binlog【重點】
原理:配置文件log-bin=mysql-bin 使控制binlog是否開啟的開關。binlog會記錄增刪改改的記錄。
mysql Bin-log日志的使用場景主要有兩個:1、主從復制【在后面的文章中會講到,master 把bin-log的二進制日志推送給slaves來達到master-slave數據一致】。2、數據恢復,通過使用mysql Bin-log工具來使恢復數據。
bingLog地址:data目錄下,/usr/local/mysql/data/,如下圖所示:
為什么會有這么多mysql Binlog文件?
答:MySQLBinlog當遇到下述情況時,會生成新的日志文件,文件序號遞增:
1、MySQL服務重啟以及mysqldump進行備份時時候
2、使用flush logs命令
3、當binglog文件超過max_binlog_size變量時,最大值和默認值時1G【但是必須得等它自己的事務執行完畢】。
如何查看mysql binlog中的內容?【如何查看其中內容,以便追蹤問題或者恢復數據?】
答:使用命令mysqlbinlog
# 查看bin-log二進制文件(shell方式) mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003
# 查看bin-log二進制文件(帶查詢條件) mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \ --start-datetime="2019-03-01 00:00:00" \ --stop-datetime="2019-03-10 00:00:00" \ --start-position="5000" \ --stop-position="20000"
輸出內容如下圖所示:
總之,你所有的增刪改操作都會記錄在這個里面。
那么如何利用上述的mysql binlog來進行數據的恢復?
案列:如果我向x_letter表中插入了一條數據,delete了一條數據,又插入了一條記錄,那么我應該怎么恢復?
1、查看現在binglog運行的日志,show master status; 效果如下圖:
2、具體的MySQL的一個binlog恢復,暫時遇不到,先不管了