使用 Linux 逻辑卷管理器 (LVM) 快照进行一致备份
LVM 是 Linux 内核的一种逻辑卷管理器实现,最大的优点就是可以对任意逻辑卷进行快照。
在生产环境中,许多用户访问同一个文件(文件已打开)或数据库。假设您在文件已打开时启动备份过程,您将无法获得文件的正确或更新副本,即不一致备份(请参阅不一致备份的准确定义)。
只读分区——避免备份不一致
您需要将分区挂载为只读,以便没有人可以更改文件并进行备份:
# umount /home
# mount -o ro /home
# tar -cvf /dev/st0 /home
# umount /home
# mount -o rw /home
如您所见,缺点是备份期间所有最终用户都无法使用服务。如果您正在使用数据库,请关闭数据库服务器并进行备份。
逻辑卷管理器快照避免不一致的备份
此解决方案仅在您使用 LVM 创建分区时才有效。快照卷是一种特殊类型的卷,它呈现创建快照时卷中的所有数据。这意味着您可以备份该卷,而不必担心在备份过程中数据被更改,并且您不必在备份过程中使数据库卷脱机。
# lvcreate -L1000M -s -n dbbackup /dev/ops/databases
输出:
lvcreate -- WARNING: the snapshot must be disabled if it gets full lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/ops/dbbackup" lvcreate -- doing automatic backup of "ops" lvcreate -- logical volume "/dev/ops/dbbackup" successfully created
创建挂载点并挂载卷:
# mkdir /mnt/ops/dbbackup
# mount /dev/ops/dbbackup /mnt/ops/dbbackup
输出:
mount: block device /dev/ops/dbbackup is write-protected, mounting read-only
进行备份
# tar -cf /dev/st0 /mnt/ops/dbbackup
现在将其删除:
# umount /mnt/ops/dbbackup
# lvremove /dev/ops/databases
请注意,LVM 快照不能与非 LVM 文件系统一起使用,即您需要 LVM 分区。您还可以使用第三方商业专有(请参阅下面的讨论)或 GPL 备份解决方案/软件。
MySQL 备份:使用 LVM 文件系统快照
登录到您的 MySQL 服务器:
# mysql -u root -p
在 mysql 提示符下输入以下命令以关闭所有打开的表并使用读取锁锁定所有数据库的所有表,直到您通过执行 UNLOCK TABLES 明确释放锁。如果您拥有可以及时拍摄快照的文件系统(例如 Veritas 或 Linux LVM 或 FreeBD UFS),这是一种非常方便的获取备份的方法。
现在输入以下命令(假设您的 MySQL DB 位于 /dev/vg01/mysql):
再次登录到 mysql:
输入以下命令以释放锁:
mysql> flush tables with read lock;
mysql> flush logs;
mysql> quit;
# lvcreate --snapshot –-size=1000M --name=backup /dev/vg01/mysql
# mysql -u root -p
mysql> unlock tables;
mysql> quit;
现在,将备份移至磁带或其他服务器:
# mkdir -p /mnt/mysql
# mount -o ro /dev/vg01/backup /mnt/mysql
# cd /mnt/mysql
# tar czvf mysql.$(date +"%m-%d%-%Y).tar.gz mysql
# umount /mnt/tmp
# lvremove -f /dev/vg01/backup
如果您使用 Veritas 文件系统,则可以像这样进行备份(引用自 MySQL 官方文档):
登录 mysql 并锁定表:
在 shell 提示符下键入以下内容
现在解锁表:
从快照复制文件并卸载快照。
mysql> FLUSH TABLES WITH READ LOCK;
mysql> quit;
# mount vxfs snapshot
mysql> UNLOCK TABLES;
mysql> quit;