MySQL(05)
備份策略: 完全+差異+binlog(時間點還原) 完全+增量+binlog 備份,多久一次? 數據變化量; 可用的備份存儲空間; mysqldump: 邏輯備份、完全備份、部分備份; 二次封裝工具: mydumper phpMyAdmin Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] MyISAM存儲引擎:支持溫備,備份時要鎖定表; -x, --lock-all-tables:鎖定所有庫的所有表,讀鎖; -l, --lock-tables:鎖定指定庫所有表; InnoDB存儲引擎:支持溫備和熱備; --single-transaction:創建一個事務,基于此快照執行備份; 其它選項: -R, --routines:存儲過程和存儲函數; --triggers -E, --events --master-data[=#] 1:記錄為CHANGE MASTER TO語句,此語句不被注釋; 2:記錄為CHANGE MASTER TO語句,此語句被注釋; --flush-logs:鎖定表完成后,即進行日志刷新操作; 作業:備份腳本
mysqldump備份恢復示例
從lftp上mget一個數據庫腳本hellodb.sql,導入到數據庫中,刪除導入數據庫的腳本,如何自己備份。
目前沒有create databases語句,因為我們備份時直接指明了hellodb,這表式的意思是備份hellodb的所有表,而不是備份hellodb數據庫的。
如果要備份數據庫,要使用下面這條語句
less hellodb.sql.2 查看一下
這里就有create databases語句,說明整個數據庫被備份下來了 –databses可以備份多個庫,這里只指明了hellodb一個庫
如果想備份所有庫,則使用下面這條語句
注意:數據太大的不適用mysqldump來備份 如果我們只備份一個庫,這個庫里面的所有表都是InnoDB存儲引擎的話,可以使用熱備,–single-transaction。MyISAM存儲引擎的話,只能支持溫備了。
備份時,備份策略:完全+增量+binlog,假如現在做一次完全備份,下次還沒增量數據庫就掛了,所有只能用完全+binlog來恢復,完全備份那一個,數據恢復回來了,binlog從哪一刻開始放,binlog是各種寫語句,應該從備份那一刻之后的內容,把備份開始之后所發生的所有修改語句從放一遍。 如何知道什么時候開始備份:自動備份那一刻必須要記錄下來,binlog正在處在哪個文件哪個privi,
例如
這時候會報錯,因為服務器上沒啟用bin-log,這時需要修改my.cnf配置文件,啟動二進制方式
這時候就能成功備份了。
注意:將來備份不要去覆蓋上一次備份,備份文件例如helldb。sql-20140101
這時候備份文件就多了一條語句
意思是二進制文件處在master-log.0000001,位置是245,所以下次重放時就基于這個位置進行重放。
如何記錄備份那一刻,二進制文件記錄位置
備份文件要異地另存,可以寫腳本進行自動化進行。備份文件要保留時間戳。
先連入mysql服務器,做一些修改操作
這種修改結果通過剛才的備份恢復不行,假如數據庫刪除,通過備份恢復不過來。這時候需要借助二進制文件進行。
現在恢復
第一準備好備份,第二準備好二進制日志。
二進制文件都在/var/log/mysql下
這里上次備份就只有一個二進制文件,從第一個位置開始的
使用mysqlbinlog命令
這里會有一個問題,最后一個drop database hellodb,剛放上來,又刪除掉了,不要讀這個語句。
從這里開始定義
這時,drop database hellodb這臺語句就不會出現了。
把截取后的二進制文件內容保存在一個腳本中
[root@ zhoushuang2 ~]# mysqlbinlog –stop-position=785 /var/lib/mysql/master-log.000001 > /tmp/mylog.sql
注意:這些都是腳本,通過讀進行裝載
第二個:hellodb.sql.2這個文件,先放到tmp下
[root@ zhoushuang2 ~]# cp hellodb.sql.2 /tmp/hellodb.sql
基于lvm2的備份: 前提:數據目錄位于邏輯卷,包含了數據文件和事務日志; (1) 請求鎖定所有表; mysql> FLUSH TABLES WITH READ LOCK; (2) 記錄二進制文件事件位置; mysql> FLUSH LOGS; mysql> SHOW MASTER STATUS; mysql -e 'SHOW MASTER STATUS;' >> /PATH/TO/SOME_POS_FILE (3) 創建快照卷 lvcreate -L # -s -p r - SNAM-NAME /dev/VG-NAME/LV-NAME (4) 釋放鎖 mysql> UNLOCK TABLES (5) 掛載快照卷,并執行備份,備份完成后刪除快照卷; (6) 周期性備份二進制日志;
接下來連接到mysql上開始恢復
1、先把二進制功能給關掉
2、進行恢復
這時恢復的是初始數據,后面改的沒有
再次執行操作
再次執行發現數據都恢復了
再把二進制功能開啟
這就是完整的備份和恢復過程
每次備份完,給自己發一封郵件
原創文章,作者:15152188070,如若轉載,請注明出處:http://www.www58058.com/60155