Answers:
带有InnoDB和MyISAM的mysqldumps被视为互斥的。原因如下:
如果您可以在进行mysqldump的同时登录mysql,则会看到以下内容:
SELECT /* SQL_NO_CACHE */ * FROM tblname
默认情况下,mysqldump将执行以下操作:
对于没有其他数据库活动的MySQL实例,这应该很好。InnoDB表和MyISAM表不会相互影响。
使用--single-transaction
针对全InnoDB的MySQL实例创建一个检查点并转储从同一个点在时间中的所有表。一旦遇到MyISAM表,所有的赌注都将关闭。这可能导致从另一个时间点转储MyISAM之后的所有InnoDB表。
要对InnoDB和MyISAM的混合物进行一致的时间点转储,您可以选择
重新启动mysql,以便其他人无法通过TCP / IP登录,然后mysqldump
service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart
如果所有MyISAM表仅用于读取,则只需使用--single-transaction进行mysqldump
如果正在写入任何MyISAM表,则--single-transaction是不够的
您将执行以下操作:
mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql
mysqldump完成后,立即登录mysql并执行do show processlist;
。查找查询SELECT SLEEP(86400)
,找到进程ID,然后运行KILL <procidnumn>;
mysqldump在转储期间锁定表。使用LVM快照或Xtrabackup。