基於LVM快照實現Mysql的備份還原

搭建環境:

centos7 
關閉SELinux: setenforce 0
關閉防火牆: systemctl stop firewalld

搭建步驟:

  1. 創建邏輯卷

# pvcreate /dev/sda6          
# vgcreate vg0 /dev/sda6      
# lvcreate -L 5G -n lv_mysql  vg0    
# lvcreate -L 3G -n lv_binlog vg0    
# mkfs.xfs /dev/vg0/lv_mysql    
# mkfs.xfs /dev/vg0/lv_binlog
# mkdir -pv /data/{mysql,backup}    創建掛載點
# vim /etc/fstab                    永久掛載
 UUID="25f718e7-d795-41f7-a3ac-19288360ec0e"  /data/mysql/     xfs      defaults     0 0
 UUID="1848fe51-9b42-45fe-a66f-02ebc2694a52"  /data/binlog/    xfs      defaults     0 0

# mount -a         重新掛載/etc/fstab文件中的設備
# chown -R mysql.mysql   /data      修改文件所屬關係使mysql用戶具有寫權限

  2.  修改mysql配置文件並創建快照

# vim /etc/my.cnf         修改mysql的配置文件
[mysqld]
datadir=/data/mysql
log_bin=/data/binlog/mysql-bin        mysql-bin爲二進制日誌文件的前綴
# systemctl restart mariadb    
# mysql< hellodb_innodb.sql          導入數據庫,用於後期的驗證

說明: 生產環境中爲了保證快照創建成功,需要保證足夠大的快照空間

mysql> flush tables with read lock;      爲數據庫加鎖避免執行快照期間數據修改
mysql> flush logs;                       滾動日誌,使用新的二進制日誌
mysql> show master logs;                 查看二進制日誌列表信息,用於二進制恢復使用
# lvcreate -L 1G -n lv_mysql_snap -s -p r /dev/vg0/lv_mysql    創建快照(-s選項,-p選項指定爲只讀)
mysql> unlock tables;                    解鎖      
mysql> create database db1;         解鎖後用戶創建了新的數據(此部分的修改需要使用二進制日誌來恢復)
# mount -o nouuid, norecovery  /dev/vg0/lv_mysql/snap  /mnt 注意指定nouuid和norecovery
# cp -a  /mnt/*   /backup/  將掛載至/mnt下的快照文件備份至/backup路徑下保存
# umount /mnt    卸載快照掛載,否則數據庫的更新操作的同時要寫入快照影響數據庫寫入效率
# lvremove  /dev/vg0/lv_mysql_snap     移除快照

說明: 模擬數據庫崩潰場景

mysql> create database db2;     崩潰前執行了創建庫的操作
mysql> use db2
mysql> drop table teachers;     崩潰前執行了刪除表的操作
# rm -rf /data/mysql/*          刪除數據文件模擬數據庫崩潰
# systemctl stop mariadb

   3. 還原數據庫

# cp -av /backup/*     /data/mysql/*    將快照備份拷貝至數據文件夾
# systemctl start mariadb
mysql> flush tables with read lock;     爲數據庫加鎖,防止恢復過程中有數據修改
# mysqlbinlog --start-position=245  mysql-bin.000004 > /backup/bin.sql
# mysqlbinlog mysql-bin.000005 >> /backup/bin.sql   以上兩步驟均是導出二進制日誌用於恢復

說明:爲了保證在恢復二進制日誌時用戶不能修改數據庫需要關閉網絡監聽

# vim /etc/my.cnf
skip_networking  
# systemctl restart mariadb
# mysql < /backup/bin.sql  使用二進制日誌來恢復快照備份之後數據

   4.  刪除配置文件中的skip_networking 並重啓服務,驗證數據庫是否恢復正常


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章