基於LV快照實現Mysql的備份還原
阿新 • • 發佈:2018-06-16
pvc set 滾動 文件中 adb 修改文件 data 創建快照 環境 搭建環境:
centos7
關閉SELinux: setenforce 0
關閉防火墻: systemctl stop firewalld
搭建步驟:
創建邏輯卷
# 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 並重啟服務,驗證數據庫是否恢復正常
基於LV快照實現Mysql的備份還原