不暂停MySQL服务的情况下备份数据库

不暂停MySQL服务的情况下备份数据库

之前写过一篇文章

mysql的备份和还原

要求是要暂停mysql服务,备份,完了之后在启动mysql,这样会中断mysql的访问的,尤其是,比如我们只是备份其中的一个数据库,但是我们把mysql整个给停掉了,这样导致其他的数据库也不能访问。

上面这段话有问题,等我有时间再更新纠正。

那我们怎么避免这种问题呢?

我们有3种办法。

  1. 利用主(master)从(slave)数据节点
  2. 利用–single-transaction和–lock-tables
  3. 利用READ LOCK

下面就简单说一下这三种方法。

1. 利用主(master)从(slave)数据节点

这种方法是利用mysql的master和slave的关系,关于如何构建mysql的master和slave,我将另外开一篇文章介绍。master和slave用处,就是将数据部署在多个节点,比如在不同的服务器上面,它们之间可以做同步。有了这个对master和slave的概念后,就很好理解,你可以在slave上面做backup。

关于这部分mysql官网有介绍

Backing Up a Master or Slave by Making It Read Only

2. 利用–single-transaction和–lock-tables

–single-transaction就是创建一个备份点,然后mysqldump就拷贝这个点之前的所有数据。下面是一个例子

mysqldump -uuser -ppass –single-transaction –routines –triggers –all-databases > backup_db.sql

3. 利用READ LOCK

这种方法就是暂时的锁住这个数据库,

下面是完整例子

#!/bin/bash

DB=example
DUMP_FILE=export.sql

# Lock the database and sleep in background task
mysql -uroot -proot $DB -e "FLUSH TABLES WITH READ LOCK; DO SLEEP(3600);" &
sleep 3

# Export the database while it is locked
mysqldump -uroot -proot --opt $DB > $DUMP_FILE

# When finished, kill the previous background task to unlock
kill $! 2>/dev/null
wait $! 2>/dev/null

echo "Finished export, and unlocked !"

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则
按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示