MySQL 備份和恢複(二)基於LVM實現幾乎熱備

來源:互聯網
上載者:User

標籤:mysql備份、恢複 lvm 熱備 hotbackup

LVM(Logical Volume Management邏輯卷管理)實現幾乎熱備的原理:利用LVM的快照卷達到可以儲存資料庫在某一時刻的瞬時狀態,只需把當時的快照備份出來即可。


LVM的快照原理:簡單的講就是lvm對某個卷建立快照卷後,快照卷則作為原卷的另一個訪問入口,當原卷的資料發生變化時,則先把原卷的內容先複製一份到快照卷,然後才會繼續對原卷資料的修改,這也就是之所以快照卷的容量大小應該大於整個備份過程中資料庫的變化量的原因。所以當備份完成以後,快照卷也就可以拆除了,它的作用就是在備份過程中把發生變化的資料的快照時狀態先拷貝過來一個副本。


用lvm對mysql備份的前提:資料檔案和交易記錄檔應該在同一個卷上,否則快照卷資料和交易記錄時間點不一致,恢複後會引起資料庫錯亂。


原理明白了,操作起來就比較簡單了:

當然要首先準備好lvm卷且保證mysql的datadir和innodb_log_group_home_dir在這個卷上


/* 建立一張新表tb1,並插入一些資料以做測試 */MariaDB [hellodb]> CREATE TABLE tb1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(30) NOT NULL,Gender ENUM(‘F‘,‘M‘,‘O‘) NOT NULL);Query OK, 0 rows affected (0.11 sec)MariaDB [hellodb]> DESC tb1;+--------+-------------------+------+-----+---------+----------------+| Field  | Type              | Null | Key | Default | Extra          |+--------+-------------------+------+-----+---------+----------------+| id     | int(11)           | NO   | PRI | NULL    | auto_increment || Name   | varchar(30)       | NO   |     | NULL    |                || Gender | enum(‘F‘,‘M‘,‘O‘) | NO   |     | NULL    |                |+--------+-------------------+------+-----+---------+----------------+3 rows in set (0.00 sec)MariaDB [hellodb]> INSERT INTO tb1 (Name,Gender) VALUES (‘Bob‘,‘M‘),(‘Tina‘,‘F‘),(‘Axx‘,‘O‘);Query OK, 3 rows affected (0.03 sec)Records: 3  Duplicates: 0  Warnings: 0/* 備份前為所有表加讀鎖,查看一下當前二進位日誌位置 */MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> SHOW MASTER STATUS;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000007 |      245 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.01 sec)

 

/* 再開一個終端,前面mysql會話不要退出 */[[email protected] ~]# mkdir /backup/mydata-`date +%F`/* 也可以將當前二進位位置儲存到檔案,以備恢複時查看 */[[email protected] ~]# mysql -e ‘SHOW MASTER STATUS;‘ > /backup/mydata-2014-07-29/bin-pos-`date +%F-%T`/* 保證有可用的vg */[[email protected] ~]# vgs  VG   #PV #LV #SN Attr   VSize  VFree  myvg   2   1   0 wz--n- 10.02g 7.02g  vg0    3   1   0 wz--n- 29.29g    0 /* 建立快照卷,-L | --size (LogicalVolumeSize) 指定快照卷大小,一定不可以比變化量小,否則會引起快照卷崩潰,備份失敗;-n | --name 指定快照卷名字; -p | --permission 指定快照卷許可權 r唯讀,-s --snap-shot /dev/myvg/mylv 指定要對/dev/myvg/mylv建立快照卷 如果此時資料庫伺服器比較繁忙,則需要等待正在提交的日誌刷寫到磁碟等,可能會需要一定等待時間*/[[email protected] ~]# lvcreate -L 100M -n mydata-snap -p r -s /dev/myvg/mylv   Logical volume "mydata-snap" created[[email protected] ~]# mkdir /mnt/snap[[email protected] ~]# mount /dev/myvg/mydata-snap /mnt/snap/mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only[[email protected] ~]# cd /mnt/snap/[[email protected] snap]# lsdata  lost+found[[email protected] snap]# ls data/aria_log.00000001  ib_logfile0  mysql-bin.000001  mysql-bin.000005  node1.bob.org.erraria_log_control   ib_logfile1  mysql-bin.000002  mysql-bin.000006  node1.bob.org.pidhellodb            mydb         mysql-bin.000003  mysql-bin.000007  performance_schemaibdata1            mysql        mysql-bin.000004  mysql-bin.index   test[[email protected] snap]# cp -ap /mnt/snap/data/ /backup/mydata-2014-07-29/[[email protected] snap]# ls /backup/mydata-2014-07-29/data/aria_log.00000001  ib_logfile0  mysql-bin.000001  mysql-bin.000005  node1.bob.org.erraria_log_control   ib_logfile1  mysql-bin.000002  mysql-bin.000006  node1.bob.org.pidhellodb            mydb         mysql-bin.000003  mysql-bin.000007  performance_schemaibdata1            mysql        mysql-bin.000004  mysql-bin.index   test

 

備份完成回到mysql會話,解鎖表

MariaDB [(none)]> UNLOCK TABLES;Query OK, 0 rows affected (0.01 sec)

這樣一個基於lvm快照的mysql備份就完成了,然後還可以結合二進位日誌做增量備份和恢複等,可參照前一篇文章 MySQL 備份和恢複(一)mysqldump



本文出自 “不懂IT的中醫不是好IT” 部落格,請務必保留此出處http://zhishen.blog.51cto.com/1612050/1532420

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.