利用 LVM 在线抓取 MySQL 数据库快照


小试分身 MySQL Replication, 上次是按照 MySQL 教程做的, 比较死板(或者说, 安全), 但需要锁住数据库, 也就是说, 用户一端的感觉就是服务器出问题了… 而如果通知用户服务器要下线一段时间的话, 又会引起不明真相的用户的莫名猜疑. 那么就需要一种在几秒中之内完成生成镜像的操作, 于是我就想到了 LVM snapshot.

Google 了一番, 我看到已经有成功先例了, 步骤如下:

1, 确认 MySQL 的数据区(缺省 /var/lib/mysql) 是在 LVM 上, 假设是 /dev/VOLUME_GROUP/data
2, 开一个 MySQL session, 执行并记录 show master status 的输出:

flush tables with read lock;
show master status;

3, 在另一个 terminal 执行:

lvcreate -s -n snapshot_name -L5G /dev/VOLUME_GROUP/data

4, 在步骤2的 session 里继续:

unlock tables;

5, /dev/VOLUME_GROUP/snapshot_name 里面就是需要的快照了, 之后将快照复制到从属服务器上然后开启 replication 即可, 这里就略过了.

步骤2/3/4应该可以写到一个 shell script 里面, 这样数据库锁住的时间应该能在3~5秒之内, 用户可能会感觉数据更新时慢了一些, 希望不会有人因为几秒钟的耽搁而花20分钟来投诉吧 🙂

,

One response to “利用 LVM 在线抓取 MySQL 数据库快照”