程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 使用lvm-snapshot備份mysql數據庫

使用lvm-snapshot備份mysql數據庫

編輯:MySQL綜合教程

使用lvm-snapshot備份mysql數據庫


前提要求:

事務日志跟數據文件必須在同一個卷上;

創建快照卷之前,要請求MySQL的全局鎖;在快照創建完成之後手動釋放鎖;

請求全局鎖完成之後,做一次日志滾動;做二進制日志文件及位置標記(手動進行);

 

1、為數據施加讀鎖,滾動二進制日志文件並記錄當前二進制文件起始時間段:

wKioL1RvSi_D4vfuAAFtKk5G1DY490.jpg

2、做快照;

wKiom1RvSoDiv_mdAABmlT0HCyc181.jpg

3、釋放讀鎖:

wKioL1RvSx7D11F2AAAutnKi6FY453.jpg

4、掛載快照,將快照裡面的數據復制出來,並刪除快照:

[root@localhost mydata]# mount /dev/VG/mysql /mnt/ -o ro

[root@localhost mydata]# mkdir /mysqlback

[root@localhost mydata]# cp -a /mnt/ /mysqlback/20141121

[root@localhost mydata]# umount /mnt/

[root@localhost mydata]# lvremove /dev/VG/mysql

Do you really want to remove active logical volume mysql? [y/n]: y

Logical volume "mysql" successfully removed

5、向一個表插入數據是數據發生改變,要在最後使用二進制日志恢復此信息。

mysql> INSERT INTo newtb values('jack');

Query OK, 1 row affected (0.01 sec)

mysql> select * from newtb;

+------+

| Name |

+------+

| tom |

| jack |

+------+

2 rows in set (0.00 sec)

6、結合之前記錄的二進制日志開始時間導出成一個文件

[root@localhost mydata]# mysqlbinlog --start-position=107 mysql-bin.000011 > /tmp/20141121.sql

7、將數據庫停止,刪除數據,嘗試恢復數據

wKiom1RvTj2gy3E0AAJsJ4-Pw4g601.jpg

8、啟動mysql服務並查看數據是否恢復:

wKiom1RvTrjR7p6fAAM4fDuE2lU178.jpg

9、使用二進制日志恢復後來創建的用戶:

mysql> source /tmp/20141121.sql;

wKioL1RvUK7zh8yUAAA5lIuAUOw949.jpg

 

總結:

備份過程:

1、對MySQL數據庫了施加讀鎖,防止在備份過程中有用戶插入數據而導致備份後的數據不一致

2、回滾日志,使當前狀態的數據做一個完整的備份,之後的數據用二進制日志恢復

3、使用SHOW MASTER STATUS命令記錄日志的開始時間

4、使用lvcreate命令對lv做快照

5、去除讀鎖

 

恢復過程:

6、將創建好的lv快照掛載到目錄,並將裡面的數據復制出來

7、卸載快照、再刪除快照

8、將從快照復制出來的數據復制到/data/mydata

9、使用mysqlbinlog結合之前記錄的開始時間點導出需要的二進制數據為一個xx.sql文件

10、將sql文件導入數據庫即完成整改恢復過程

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved