關閉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
顯示結果如下: