快照方式備份mysql 數據庫

關閉mysql服務

# service mysqld stop
 

一、創建邏輯卷

依照如下連接的文檔創建一個邏輯卷
要求:物理卷20G;卷組名爲vg0;邏輯卷2G,邏輯卷名爲mydata
 
 
創建邏輯卷掛載點,並掛載之
# mkdir /mydata
# mount /dev/vgo/mydata /mydata
 

二、安裝MySQL數據庫

如果機器已裝有mysql,則此步可省略
只需修改mysql的配置文件中的datadir的值改爲/mysata
然後將原數據庫的數據文件全部copy至/mydata文件下,即轉移數據庫所在位置
修改/mydata目錄及其內容的屬主屬組
然後重啓mydql服務 
 
如果需要重新安裝,可依如下文檔進行安裝:
同樣安裝完成後,只需將mysql配置文件中的datadir的值改爲/mydata
操作如下:
# sed -i 's/ ^datadir.*$/datadir=\/mydata/g' /etc/my.cnf
# service mysqld restart
 
修改/mydata目錄及其內容的屬主屬組
# chown -R mysql:mysql /mydata/*
# chown mydql:mysql /mydql
 
 
啓動mysql服務
# service mysqld start
 

三、創建快照

鎖定所有表先
# mydql
  >FLUSH TABLES WITH READ LOCK;
  >\q
  
創建快照
# pvvreat -L 20M -s -n mysnap /dev/vgo/mydata
注:此命令詳細解釋可參照如下文檔:
http://www.178-go.com/archives/40
 
解鎖表
# mysql
  >UNLOCK TABLES;
  >\q
 
 創建快照掛載點,並掛載之 
# mkdir /mysnap
# mount /dev/vgo/mysnap
 
# ls
發現此時/mysnap目錄下的文件和/mydata下的文件一模一樣
 
此時,在原捲上做任何修改都不會影響/mysnap中的文件
 

四、測試

對數據庫進行一些修改
# mysql
  >CREATE DATABASE mydb;
  >USE mydb;
  >CREATE TABLE sanptest (
  >name char(30),
  >id   int);
  >\q
  
現在從快照目錄下複製mydb文件到其它目錄下,進行物理備份
注:生產應用中應該備份整個數據庫
# cd /mysanp
# cp -rp mydb  /tmp/
 
卸載快照卷
# umount /mysnap
# lvremove /dev/vgo/mysnap
 
下面對數據庫進行一些刪除操作
# mydql
  >FLUSH LOGS;
  >DROP DATABASE mydb;
  >\q
  
此時,/mydata目錄下已沒有mydb文件
 
現在將剛纔物理備份的的mydb文件複製回來
# copy -rp /tmp/mydb /mydata
# service mysqld restart
 
查看數據庫
# mysql
  >SHOW DATABASES;
  發現和做修改之前的的數據庫一模一樣,沒有剛創建的mydb庫
  也就是說快照備份只保存做快照那一時刻的數據信息
  
此時,若想找回快照之後失去的數據,剛需要用的二進制日誌
查看二進制日誌
# mysql
  >SHOW BINLOG EVENTS IN'mysql-bin.0000X';
  這裏X表示數據,數字不同,日誌內容也不一樣,數字越大越接近現在
  這些日誌全放在/mydata文件下
  顯示大致如下:
 

  如我們想從二進制日誌文件mysql-bin.0000013中恢復一個insert操作,就可以用如下命令:
# mysqlbinlog --start-position 106 --end-position 220 mysql-bin.0000013 > /tmp/a.mysql
# mysql -uroot -p < /tmp/a.sql
 
顯示結果如下:
 

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