今天做数据库自动备份时出现了表被锁的错误,以下是我的解决方法!
mysqldump -umysqlback -pmysqlback  modsec>modsec.sql
报错:mysqldump: Got error: 1044: Access denied for user 'mysqlback'@'localhost' to database 'modsec' when using LOCK TABLES

说明有的表是InnoDB 或者BDB,

解决办法
mysqldump -umysqlback -pmysqlback --single-transaction  modsec>modsec.sql
解释:

--lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。

--lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。

--single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。

本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。

要想导出大表的话,应结合使用 --quick 选项。

如果想快速导出数据:

--quick,-q

该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。