我正在为我的mysql服务器寻找一个备份解决scheme,我需要尽可能减less停机时间。 我有以下几点:
这个数字可以增长,所以设置主/从复制不是一个好主意。
我看到的最简单的备份方式是使用mysqldump和“automysqlbackup”这样的软件。 我最重要的数据使用InnoDB。 我的InnoDB表很重。
问题是:如果我对服务器中的所有数据库执行mysqldump,它会locking我的Innodb表吗?
与InnoDB和MyISAM在一起的mysqldumps被视为互斥。 这是为什么:
如果您可以在mysqldump正在进行时login到mysql,则会看到如下所示的内容:
SELECT /* SQL_NO_CACHE */ * FROM tblname
默认情况下,mysqldump将执行以下操作:
对于没有其他数据库活动的MySQL实例,这应该没问题。 InnoDB表和MyISAM表不会相互影响。
对所有InnoDB MySQL实例使用--single-transaction将创build一个检查点,并从相同的时间点转储所有表。 一旦遇到MyISAM表,所有投注都closures。 MyISAM之后的所有InnoDB表可以从不同的时间点转储。
要有InnoDB和MyISAM混合的一致性时间点转储,您可以select
重新启动mysql,以便其他人不能通过TCP / IP和mysqldumplogin
service mysql restart --skip-networking --skip-grant-tables mysqldump --routines --triggers --all-databases > MySQLData.sql service mysql restart
如果所有的MyISAM表只用于读取,只需使用mysqldump –single-transaction
如果正在编写任何MyISAM表, – 单一事务是不够的
您将需要执行以下操作:
mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" sleep 30 mysqldump --routines --triggers --all-databases > MySQLData.sql
在mysqldump完成之后,立即login到mysql并show processlist; 。 查找查询SELECT SLEEP(86400) ,查找进程ID,然后运行KILL <procidnumn>;
mysqldump --single-transaction不locking表,但MyISAM表不能保证与此选项一致的转储。 最好使用mydumper , mydumper锁MyISAM表,并且不lockingInnoDB,因此转储是一致的。
mysqldump在转储期间locking表。 使用LVM快照或Xtrabackup 。