对innodb数据库、表进行dump的时候,会出现数据库锁表的情况,为了避免锁表,且保证数据的一致性,我们可以在mysqldump的时候加入参数:
--single-transaction
--skip-lock-tables //表示不锁表
注意:只能用语inodb存储引擎。
如myisam是不支持的,原因如下:
因为它压根就不支持事务,自然就无法实现上述的过程,虽然添加了--single-transaction参数的myisam表处理过程和上面的完全一致,但是因为不支持事务,在整个dump过程中无法保证可重复读,无法得到一致性的备份。而innodb在备份过程中,虽然其他线程也在写数据,但是dump出来的数据能保证是备份开始时那个binlog pos的数据。
例子:
mysqldump -uroot --skip-lock-tables --socket=/tmp/mysql.sock --default-character-set=utf8 -t dbname tablename --single-transaction -q > ./tablename.sql