MySQL管理之基於LVM實現幾乎熱備

來源:互聯網
上載者:User

基於LVM實現MySQL幾乎熱備

幾乎熱備:

對mysql而言,我們如果想實現lvm方式建立快照,在快照建立那一刻,innodb的事物日誌內容可能正在往磁碟上寫,所以必須保證事物日誌和資料檔案必須在同一快照上,如果我們分別對問或路徑建立快照,很有可能造成資料和時間點的不一致,因此就算備份出來也無法恢複

 

準備工作

將整個資料匯出,以防萬一,如果沒有放在邏輯卷上,那麼則將資料匯出備份並刪除資料目錄,使用lvm方式建立分區並古仔,將資料再覆蓋至原先/mydata/data下 最後初始化資料庫

 

建立lvm之前必須將mysql資料全部備份並在建立lvm之後對其恢複

[root@test ~]#mysqldump -uroot --lock-all-tables --all-databases --events > /tmp/alldb.sql

刪除資料目錄並建立邏輯卷

[root@test ~]#/etc/init.d/mysqld stop

Shutting downMySQL.. SUCCESS!

[root@test ~]# rm-fr /mydata/

首先進行分區,步驟略過

Device Boot Start End Blocks Id System

/dev/sdb1 1 393 3156741 8e Linux LVM

/dev/sdb2 394 786 3156772+ 8e Linux LVM

建立LVM

root@test ~]#pvcreate /dev/sdb

sdb sdb1 sdb2

[root@test ~]#pvcreate /dev/sdb{1,2}

Physical volume "/dev/sdb1"successfully created

Physical volume "/dev/sdb2"successfully created

[root@test ~]#vgcreate myvg /dev/sdb{1,2}

Volume group "myvg" successfullycreated

[root@test ~]#lvcreate -L 3G -n mydata myvg

Logical volume "mydata" created

[root@test ~]#mke2fs -t ext4 -L MYDATA /dev/

將lvm加入至開機啟動項

[root@test ~]# echo'LABEL=MYDATA/mydata ext4 defaults0 0' >> /etc/fstab

[root@test ~]#mount -a

[root@test ~]# df-h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 6.3G 4.2G 1.8G 72% /

tmpfs 245M 0 245M 0% /dev/shm

/dev/sda1 194M 28M 156M 16% /boot

/dev/mapper/myvg-mydata

3.0G 69M 2.8G 3% /mydata

建立資料目錄並重新賦值

[root@test ~]#mkdir /mydata/data/

[root@test ~]#chown mysql.mysql -R /mydata/

初始化並啟動mysql

[root@test ~]# cd/usr/local/mysql

[root@test mysql]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

 

[root@test mysql]#/etc/init.d/mysqld start

Starting MySQL....SUCCESS!

 

匯入資料

首先我們要關閉binlog,使其恢複操作不記錄在二進位記錄檔裡

mysql> setsession sql_log_bin=0;

Query OK, 0 rowsaffected (0.00 sec)

匯入資料庫

mysql> source/tmp/alldb.sql;

mysql> showdatabases;

+--------------------+

| Database |

+--------------------+

|information_schema |

| mydb |

| mysql |

|performance_schema |

| test |

| wpdb |

+--------------------+

6 rows in set (0.00sec)

此時我們的二進位記錄檔可以開啟了,因為是當前會話設定,可以直接退出在進入即可

mysql> setsession sql_log_bin=1;

Query OK, 0 rowsaffected (0.00 sec)

 

實現幾乎熱備

我們建立快照那一刻起必須保證資料沒有被修改,所以想實現lvm備份必須開啟一個遠程mysql會話將所有表都鎖定,並記錄二進位的位置;

如果mysql資料庫上正在執行一個事物的話,那麼這個請求鎖可能會等待一段時間,等待多久我們是未知的,有可能等待半個小時到一個小時也未可知,但步驟是不可少的。

一旦發現加鎖成功,另啟終端,使用lvcreate命令為資料所在的卷建立快照

對mysql而言,我們如果想實現lvm方式建立快照,在快照建立那一刻,innodb的事物日誌內容可能正在往磁碟上寫,所以必須保證事物日誌和資料檔案必須在同一快照上,如果我們分別對問或路徑建立快照,很有可能造成資料和時間點的不一致,因此就算備份出來也無法恢複

  • 1
  • 2
  • 下一頁

相關文章

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.