使用lvm 備份和恢復mysql數據庫




案列中查詢用到的命令:

show engines;   ---現在已提供什麼存儲引擎

show variables like '%storage_engine%';  -----當前默認的存儲引擎

設置InnoDB爲默認引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,也可以再加上  innodb_file_per_table=1  #innodb的每個表文件單獨存儲

show master status ;  --查看節點狀態

show binlog  events  in 'mysql-bin.000001';   ---查詢執行mysql二進制事件查詢

set  sql_log_bin=0;     --關閉mysql的二進制同步 0表示關閉 1表示開啓

select @@sql_log_bin;  ---查詢二進制查詢開啓狀態

mysql> \. /root/zzxtbl.sql   --- 當前mysql會話中導入zzxtbl.sql腳本

select * into outfile'/opt/zzxtbl.txt'  form zzxtbl;   ----查詢zzxtbl表並導出到/opt/zzxtbl.txt

create table zzxtbl  like zztbls;

desc zzxtbl ,zzxtbl;    -------desc 顯示錶結構

drop table  zzxtbl;  ------ 刪除表

truncate table zzxtbl;  ------清空表數據

mysqlbinlog /data/mysql-bin.000001  ----查看mysql的二進制文件內容

mysqlbinlog --start-positsion=100/mysql-bin.000001 > /root/zzxtbl.sql  ---查看節點數是100的,並導出sql腳本

mysql -e 'show master status\G' > /opt/master-`data+%F`.info  ----查看保存備份的二進制文件

show variables like '%dir%';   ----mysql的目錄存放



一、 mysql 使用select  into outfile 將數據庫中的表文件到如到文本(.txt)中,然後進行數據庫內容恢復

語法 select * into outfile '/tmp/zzx.txt' form zzx;


wKioL1Xeyf-SN2ljAABPsnrzZhw178.jpg

顯示的導出數據的結構

wKiom1Xex-aAf7AzAABF3qeydks242.jpg

操作步驟如下:

1  a表的表結構複製成b表後,查看兩表中的數據結構dsca\b;

   

wKioL1Xeyf_iXXUCAAFZNRRtcN8454.jpg

2  a表刪除後,用loaddata infile '/tmp/zzx.txt' into table b ,中恢復 a表中的數據。

wKiom1Xex-fhI4ZuAABZVsQWo-U020.jpg

wKioL1XeygDwuHKnAADlAQFFzCw034.jpg


二、mysql使用二進制文件恢復數據庫

這裏提示可以根據你的mysql 服務器上的binlog日誌查方式,首先查看show master status;主節點的信息。然後在查看該節點中show  binlog  events in  'mysql-bin.000001';

binlog日誌根據開始的節點數運行成sql腳本

mysqlbinlog--start-position="319" /var/lib/mysql/mysql-bin.000005>/root/zzx.sql

 

1.清空表數據 (truncate   table  zzxs;)

2.關閉二進制文件同步(setsql_log_bin=0;),恢復成功後開啓 mysql的二進制開關(set_log_bin.

3.mysql 服務器上線

wKiom1Xex-eAXreFAAEH84pC-Nw268.jpg

wKioL1XeygDAYth4AAD9PBhJOtc775.jpg

 恢復成功了

wKioL1XeygDRdpHtAADfNrH9aSA723.jpg

wKiom1Xex_3Dmpr4AABej7gq7Lk712.jpg


三、使用lvm在線備份mysql數據庫

注:提前將mysql數據目錄放到我創建好的邏輯捲上。在此該卷組上要足夠的空間用來備份使用,在此mysql數據庫和binlog二進制文件都要在該卷組上。

步驟:

1.MySQL的當前的會話中,要鎖定當前的所有的表;

mysql> flush    tables with   read  lock;

mysql> flush  logs;

wKiom1Xex_3ykIGTAADu77DdST4988.jpg

這時事務提交

wKioL1XeyhaS95iFAABN0byzDqI394.jpg


2.通過另一個終端,保存二進制日誌文件的相應的位置信息。

wKiom1Xex_6B8uBSAADGpy1eef8503.jpg


3.創建快照卷

wKioL1XeyheABKxWAACBTWZFDEg447.jpg

4.釋放鎖

mysq>unlock tables;

wKioL1XeyhfRu6fSAABfNGRLBNo623.jpg

釋放當前的表鎖。該事物就自動提交了提交了

wKiom1Xex_6DgttLAACrETZSRxU772.jpg

5.掛載快照卷,備份

lvcreate -L 50M -s -p r -n mydata-snap/dev/zzxtbl/mydata


wKioL1XeyjLzZ9xlAAGHJC-rPhM154.jpg

mount /dev/zzxtbl/mydata-snap /mnt -o ro

wKiom1XeyBnxTVy_AAGpSEC6EdM543.jpg

拷貝當前的lvm卷備份的數據到/opt

wKioL1XeyjLyXStoAAF5EKy7f0E202.jpg


6.刪除快照卷

卸載當前的邏輯卷

umount  /mnt

wKioL1XeyjLzHXxuAABQLocXkeQ398.jpg


刪除卷組lvremove --force /dev/zzxtbl/mydata-snap

wKiom1XeyBqxxWcUAACDrLcOTlw326.jpg

四、模擬mysql誤刪和增量恢復

1.刪除當前卷組上的mysql數據庫

停止mysqld的服務

wKioL1XeyjPCGRZuAABinVrJsts963.jpg

2.拷貝之前備份的mysql的數據庫

wKiom1XeyBqTdwHYAADapF7ilmw045.jpg

wKioL1XeyjPCHJHFAABgKAg3XAo718.jpg

3.還原增量的數據

mysqlbinlog --start-datetime='2015-08-26 23:45:57' mysql-bin.000008 > /opt/zengliang-`date +%F-%H-%M-%S`.sql

wKiom1XeyBqjEriOAABwWwqJPw4499.jpg


導入當前mysql數據庫中。數據就恢復了。開啓二進制同步開關 set sql_log_bin=1;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章