现在我可以使用 mysqldump 进行备份。但是我必须关闭网络服务器,并且大约需要 5 分钟来进行备份。如果我不关闭 Web 服务器,它将永远无法完成 + 备份期间网站将无法访问。
有没有更快/更好的方法来备份我的 22 GB 和不断增长的数据库?
所有的表都是 MyISAM。
小智 28
是的。
设置复制到第二台机器。当需要做备份时,可以锁定副机,执行mysqlhotcopy或mysqldump,然后解锁。它会赶上你的主人,你永远不必让主人离线。
如果您不介意将写入 I/O 增加一倍,您甚至可以在同一台机器上执行此操作,但理想情况下,您应该将其实时备份到第二个物理服务器,并根据需要经常进行快照备份不会打扰您的生产服务器。
理论上也可以使用已知状态和二进制日志来恢复数据库。我从来没有这样做过,所以请先调查一下,但是您可以备份数据库的已知状态,然后只需备份所有新的二进制日志并在需要恢复时重播它们。由于二进制日志是线性写入的,将新的二进制日志 rsync 到远程计算机会非常快。
编辑:确实,似乎记录了使用二进制日志进行备份。
这个问题是高度相关的
请原谅我假设操作系统是 Linux。如果您不使用 LVM,则应该使用。如果您是,这里是通过快照进行备份的一种非常简单的方法。
# Define these vars to meet your needs. These meet mine.
lvol="/dev/VolGroup03/lvol0"
snap_name="nightly_snapshot"
snap_vol="$(dirname $lvol)/$snap_name"
snap_path="/mnt/$snap_name"
snap_size="10g" # Not the size of your data, anticipated data changes during the backup
backup_path="/backups/$snap_name"
/usr/bin/time -f 'Databases were locked for %E' -- \
mysql <<- MYSQL
# based on http://pointyhair.com/tiki-view_blog_post.php?blogId=1&postId=5
FLUSH TABLES WITH READ LOCK;
\! lvcreate --size $snap_size --snapshot --name $snap_name $lvol
UNLOCK TABLES;
MYSQL
mount $snap_vol $snap_path
rsync -av --delete $snap_path/mysql $backup_path/
umount $snap_path
lvremove -f $snap_vol
Run Code Online (Sandbox Code Playgroud)
这将允许您进行夜间备份而无需添加从服务器。我非常赞成有一个从服务器来实现高可用性,但我不希望你认为在你可以创建那个从服务器之前你被卡住了。
小智 -1
您可以进行逐步备份。每小时备份1/24的记录。这种方法的唯一问题是,如果它在一天的前几个小时内崩溃,那么您将从该时间到崩溃期间丢失任何内容。不管怎样,丢失的记录不到 24 小时(我不知道这对你来说有多重要)。
| 归档时间: |
|
| 查看次数: |
9628 次 |
| 最近记录: |