1. 程式人生 > >41、mysql備份工具lvm-snapshot實戰

41、mysql備份工具lvm-snapshot實戰

邏輯卷快照是原卷的另一個訪問路徑,剛建立的邏輯卷快照是沒有資料的,所有的訪問都指向原卷,當原卷中的資料需要修改前,先前資料複製到邏輯卷快照中,

以後訪問資料,未修改的資料來自原卷,被修改過的資料來著邏輯卷快照。邏輯卷快照僅僅是能提供時間一致性的檔案訪問通路。


lvm-snapshot:基於LVM快照的備份     

      1.事務日誌(ib_logfile#)跟資料檔案必須在同一個捲上,否則無法保證二者在時間點上的一致性

     2.建立快照卷之前,要請求mysql的全域性鎖,在快照建立完成之後釋放鎖

     3.在請求全域性鎖完成之後,做一次日誌滾動;做二進位制日誌檔案及位置標記(手動進行)


即時點還原場景:

hellodb使用的InnoDB儲存引擎,在做過一次完備後,之後又有過資料的變動,變動後的資料還未來得及做備份,伺服器硬體故障崩潰。


處理過程:

新機器上重新安裝系統,部署mysql資料庫。先用之前的完備做恢復,再根據二進位制日誌進行即時點恢復,恢復系統崩潰時的資料庫狀態。


準備過程

service mysqld stop

vim /etc/my.cnf

log-bin=/mydata/binlog/log-bin

chown -R mysql.mysql /mydata/binlog/

service mysqld restart

sed -i 's/MyISAM/InnoDB/' hellodb.sql

mysql -uroot -p < hellodb.sql 

mysql

SHOW DATABASES;

SHOW TABLE STATUS FROM hellodb\G;


備份步驟:

1.請求全域性鎖,並滾動日誌

FLUSH TABLES WITH READ LOCK;

FLUSH LOGS;                

2.做二進位制日誌檔案及位置標記(手動進行)

mysql -e 'SHOW MASTER STATUS' > /mydata/backups/binlog.pos

cat /mydata/backups/binlog.pos

File    Position        Binlog_Do_DB    Binlog_Ignore_DB

log-bin.000004  107

3.建立快照卷

lvcreate -L 100M -s -n hellodb-snap -p r /dev/mapper/vg_mysql-data

4釋放全域性鎖

mysql

UNLOCK TABLES;

5、插入新資料 

mysql

USE hellodb;

CREATE TABLE newtb(ID INT);

INSERT INTO newtb VALUES (1),(2),(3),(4),(5);

SELECT * FROM newtb;       

6掛載快照並備份

mount /dev/mapper/vg_mysql-hellodb--snap /mnt/ -o ro

cd /mydata/backups/

tar zcvf all.tar.gz /mnt/*

mysqlbinlog --start-position=107 /mydata/binlog/log-bin.000004 > /mydata/backups/binlog.sql

scp /mydata/backups/all.tar.gz [email protected]:/mydata/backups

scp /mydata/backups/binlog.sql [email protected]:/mydata/backups

umount /mnt

7.備份完成之後,刪除快照卷

lvremove /dev/mapper/vg_mysql-hellodb--snap



在一臺新的機器上恢復

service mysqld stop

rm -rf /mydata/data/*

cd /mydata/data

tar  zxvf /mydata/backups/all.tar.gz -C ./

mv mnt/* ./

rm -rf mnt/

service mysqld start


mysql

SET SESSION sql_log_bin=0; (關閉二進位制日誌)

SOURCE /mydata/backups/binlog.sql;

SET SESSION sql_log_bin=1;


恢復注意事項:

  1.二進位制日誌儲存好

      提取備份之後的所有時間至某sql指令碼中

  2,還原資料,修改許可權及屬主屬組等,並啟動mysql

  3、做即時點還原


mylvbackup:perl指令碼,快速基於LVM備份mysql