因此我研究了 LVM 快照,它似乎是一种可行的备份 mysql 的方法,以便它至少在崩溃时是一致的。
我的问题是我有 mysql 服务器,其中 mysql 数据目录位于 SAN 上,我想利用阵列快照功能来处理 mysql LUN。
我在想我可以添加第二个 LUN,在其上创建一个 PV,将其添加到服务器上的 VG,创建一个作为 mysql LV 快照的 LV 并挂载它。
此时,我可以将数据复制到我需要复制的任何地方。
那部分很好,但需要时间,并且取决于数据库的大小,因为我必须实际复制数据。
创建快照后,我可以对 mysql LUN 进行阵列快照,然后释放 LVM 快照并将其删除吗?
有人尝试过这个吗?
我的理解是,LVM 快照之后所做的更改存储在快照 LV 上。这是正确的吗?
谢谢!
答案1
我觉得这完全没有问题。只需确保在lv
保存快照时有足够的可用空间,这样您就不会在将文件复制到其他地方时耗尽时间(否则快照将被删除)。
通过快照进行 MySQL 备份的典型过程是首先刷新读取锁,然后启动快照,然后释放读取锁。此时,您可以将目录复制/var/lib/mysql
到您想要的任何位置 - 并对其进行任何您想做的事情。
Percona 团队在这里写了一篇很好的文章,http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/
Percona LVM MySQL 备份指南
1)连接到MySQL并运行
FLUSH TABLES WITH READ LOCK
2) 在保持连接打开的同时运行:
lvcreate -L16G -s -n dbbackup /dev/Main/Data
– 这将为逻辑卷 Main/Data 创建名为 dbbackup 的快照。您应该指定足够的撤消空间来保存备份过程中的修改 – 在这种情况下,我指定了 16GB。如果您的撤消大小不够大,快照将失效,备份将被中止。有时你可能会在这一步遇到错误,我最近看到的最常见的错误是:快照:内核中未检测到所需的设备映射器目标 - 这意味着快照模块默认未加载到内核中,你需要加载它,运行以下命令即可
modprobe dm-snapshot
3)现在您已经创建了逻辑卷并可以解锁表,但在此之前,您应该记录二进制日志的位置,这是通过运行完成的
SHOW MASTER STATUS
- 这是您需要指向从该快照创建的 MySQL 从属的二进制日志位置。4)快照创建后,现在您想让 MySQL 服务器继续运行,这可以通过运行
UNLOCK TABLES
或简单地关闭连接来完成。5)挂载备份文件系统:
mount /dev/Main/dbbackup /mnt/backup
6) 将数据复制到备份。通常,您可以在备份时跳过慢查询日志和错误日志。您还可以跳过大多数二进制日志 - 但是,如果您的一些从属服务器远远落后,您可能需要保留一些最后的二进制日志以防万一,或者您可以假设在从备份中恢复的情况下,您还需要恢复从属服务器并在备份过程中跳过二进制日志。
7)卸载文件系统
umount /mnt/backup
8)删除快照:
lvremove -f /dev/Main/dbbackup
如果你想基于这样的快照创建从属,你需要执行几个更简单的步骤
9)提取/复制数据库到从属数据库目录。
10)启动MySQL Server。等待它执行恢复。
11)使用 CHANGE MASTER TO 将从站指向保存的二进制日志位置:change master to
master_host="master", master_user="user", master_password="password", master_log_file="host-bin.000335", master_log_pos=401934686;
12)运行
SLAVE START
以重新启动复制。
答案2
这不是 LVM 快照的工作方式,最好的办法是用它mysqldump
来备份 MySQL。
* 更新 *
计划B:
配置复制并mysqldump
从从属使用,这样它就不会影响您的主 mysql 服务器。
我还查阅了