程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> 使用LVM快照進行數據庫備份

使用LVM快照進行數據庫備份

編輯:MYSQL入門知識
 

使用mysqldump備份時,如果存儲引擎為MyISAM,則只能實現溫備份,並需使用選項--lock-all-tables鎖定所有表。如果存儲引擎為InnoDB,則加上--single-transaction選項,可以實現熱備。

使用mysqldump進行邏輯備份,還存在如下問題:

  • 浮點數據丟失精度;
  • 備份出的數據更占用空間;不過可壓縮後以大大節省空間
  • 不適合對大數據庫(如一個庫超過10G)做完全備份
  • 另外對InnoDB而言,需要使用mysql> FLUSH TABLES WITH READ LOCK;刷新並鎖定表時,可能需要花大量的時間
  • 對InnoDB而言,即使鎖定了,也不一定以為著沒有數據的寫入,此時事務日志可能還在同步到永久存儲

一、備份單表數據另一個手段:

1.1 基本語法:

備份:

SELECT * INTO OUTFILE '/path/to/somefile.txt' FROM tb_name [WHERE clause];

還原:

LOAD DATA INFILE '/path/to/somefile.txt' INTO TABLE tb_name;

1.2 示例:

備份表:

mysql> SELECT * INTO OUTFILE '/tmp/tutors.txt' FROM tutors;
Query OK, 8 rows affected (0.31 sec)

[root@localhost ~]# cat /tmp/tutors.txt
2 HuangYaoshi M 63
3 Miejueshitai F 72
4 OuYangfeng M 76
6 YuCanghai M 56
7 Jinlunfawang M 67
8 HuYidao M 42
9 NingZhongze F 49
14 HuFei M 31

注意:導出的僅僅是數據,表結構並不會被導出。

創建用於恢復數據的空表:

mysql> CREATE TABLE test_tb LIKE tutors;
Query OK, 0 rows affected (1.28 sec)

還原數據到新表:

mysql> LOAD DATA INFILE '/tmp/tutors.txt' INTO TABLE test_tb;
Query OK, 8 rows affected (0.17 sec)
Records: 8 Deleted: 0 Skipped: 0 Warnings: 0

圖片

二、使用LVM快照進行數據庫備份

結合LVM快照功能對數據庫進行備份,能夠實現幾乎熱備(snapshot)的功能。

2.1 使用lvm快照進行mysql的備份時,需要滿足如下條件:

  • 數據文件要在邏輯卷上(LV);
  • 此邏輯卷(LV)所在卷組必須有足夠空間使用快照卷;
  • 數據文件和事務日志要在同一個邏輯卷上;
  • 2.2 實現過程:

2.2.1 打開會話,施加讀鎖,鎖定所有表;

mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;

圖片

2.2.2 通過另一個終端,保存二進制日志文件及相關位置信息;

$ mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master-`date +%F`.info

圖片

2.2.3 創建快照卷

# lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv

實例:

查看mysql數據目錄的vg信息:

[root@localhost ~]# df
文件系統 1K-塊 已用 可用 已用% 掛載點
/dev/mapper/VolGroup-lv_root
19134332 4151016 14011336 23% /
tmpfs 247204 0 247204 0% /dev/shm
/dev/sda1 495844 53354 416890 12% /boot
/dev/mapper/VolGroup-data
3096336 192984 2746068 7% /data

[root@localhost ~]# vgdisplay VolGroup
--- Volume group ---
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 24.50 GiB
PE Size 4.00 MiB
Total PE 6273
Alloc PE / Size 5762 / 22.51 GiB
Free PE / Size 511 / 2.00 GiB
VG UUID jbfFM4-hChV-QUzt-yPwV-d15b-tyGj-NeAPed

還有剩余PE,可以直接創建lv,如果沒有剩余PE,則需要先擴展VG。

創建快照卷:

[root@localhost ~]# lvcreate -L 1024M -s -p r -n data_snap /dev/mapper/VolGroup-data
Logical volume "data_snap" created

2.2.4 釋放鎖

mysql> UNLOCK TABLES;

2.2.5 掛載快照卷,備份

掛載快照卷:

[root@localhost ~]# mkdir /mnt/data_snap
[root@localhost ~]# mount /dev/mapper/VolGroup-data_snap /mnt/data_snap
mount: block device /dev/mapper/VolGroup-data_snap is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/data_snap
[root@localhost data_snap]# ls
backup lost+found mysql  

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