不暂停MySQL服务的情况下备份数据库
之前写过一篇文章
要求是要暂停mysql服务,备份,完了之后在启动mysql,这样会中断mysql的访问的,尤其是,比如我们只是备份其中的一个数据库,但是我们把mysql整个给停掉了,这样导致其他的数据库也不能访问。
上面这段话有问题,等我有时间再更新纠正。
那我们怎么避免这种问题呢?
我们有3种办法。
利用主(master)从(slave)数据节点
利用–single-transaction和–lock-tables
利用READ LOCK
下面就简单说一下这三种方法。
1. 利用主(master)从(slave)数据节点
这种方法是利用mysql的master和slave的关系,关于如何构建mysql的master和slave,我将另外开一篇文章介绍。master和slave用处,就是将数据部署在多个节点,比如在不同的服务器上面,它们之间可以做同步。有了这个对master和slave的概念后,就很好理解,你可以在slave上面做backup。
关于这部分mysql官网有介绍
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 thedatabase andsleepinbackground task
mysql-uroot-proot$DB-e"FLUSH TABLES WITH READ LOCK; DO SLEEP(3600);" &sleep3
#Export thedatabase whileitislocked
mysqldump-uroot-proot--opt $DB > $DUMP_FILE
# Whenfinished, killthe previous background tasktounlockkill $! 2>/dev/nullwait$! 2>/dev/nullecho"Finished export, and unlocked !"
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则
按侵权处理.
分享到: