mysqldump 参数--lock-tables浅析

mysqldump有一个参数--lock-tables,以前对这个参数也没有详细了解过,直到上次有个网友问“参数lock-tables 是一次性锁定当前库的所有表,还是锁定当前导出表?“ ,之前一直以为只是锁定当前导出表,后面看了参数说明后,

 

 

-l, --lock-tables   Lock all tables for read.

                      (Defaults to on; use --skip-lock-tables to disable.)

 

 

自己也不怎么确认了,当时就测试了一下。准备一个稍微大一点的库,如果数据库太小,那么可能mysqldum命令一下子就导出了所有库,很难清晰的看到实验结果。

 

 

 

执行下面命令做逻辑备份

 

 

[root@DB-Server ~]# mysqldump -u root -p --default-character-set=utf8  --opt --extended-insert=false --lock-tables MyDB > db_backup_MyDB.sql

Enter password:

 

 

同时立即执行下面命令 

 

mysql> show open tables where in_use >0;
+----------+--------------------------------+--------+-------------+
| Database | Table                          | In_use | Name_locked |
+----------+--------------------------------+--------+-------------+
| MyDB     | AO_60DB71_VERSION              |      1 |           0 |
| MyDB     | AO_AEFED0_TEAM_TO_MEMBER       |      1 |           0 |
| MyDB     | AO_4B00E6_STASH_SETTINGS       |      1 |           0 |
| MyDB     | AO_2D3BEA_FOLIOCF              |      1 |           0 |
| MyDB     | AO_AEFED0_TEAM_ROLE            |      1 |           0 |
| MyDB     | AO_60DB71_DETAILVIEWFIELD      |      1 |           0 |
| MyDB     | AO_60DB71_LEXORANK             |      1 |           0 |
| MyDB     | AO_6714C7_REPORT_SCHEDULE      |      1 |           0 |
| MyDB     | AO_E8B6CC_SYNC_AUDIT_LOG       |      1 |           0 |
| MyDB     | cwd_application                |      1 |           0 |
| MyDB     | clusternode                    |      1 |           0 |
| MyDB     | AO_86ED1B_GRACE_PERIOD         |      1 |           0 |
| MyDB     | AO_60DB71_WORKINGDAYS          |      1 |           0 |
| MyDB     | cwd_directory                  |      1 |           0 |
| MyDB     | AO_2D3BEA_BASELINE             |      1 |           0 |
| MyDB     | fieldlayoutitem                |      1 |           0 |
| MyDB     | JQUARTZ_BLOB_TRIGGERS          |      1 |           0 |
| MyDB     | AO_013613_HD_SCHEME_MEMBER     |      1 |           0 |
| MyDB     | AO_2D3BEA_ALLOCATION           |      1 |           0 |
| MyDB     | AO_013613_WL_SCHEME            |      1 |           0 |
| MyDB     | AO_7DEABF_EXEC_CLUSTER_MESSAGE |      1 |           0 |
....................................................................

 

 

如上截图,执行mysqldump命令的时候,使用show open tables where in_use >0命令,你会看到MyDB里面的所有表的In_use的值都为1,意味着是当执行mysqldump命令时,是一次性锁定当前库的所有表。而不是锁定当前导出表。

 

 

In_use

 

The number of table locks or lock requests there are for the table. For example, if one client acquires a lock for a table using LOCK TABLE t1 WRITE, In_use will be 1. If another client issues LOCK TABLE t1 WRITE while the table remains locked, the client will block waiting for the lock, but the lock request causes In_use to be 2. If the count is zero, the table is open but not currently being used. In_use is also increased by the HANDLER ... OPEN statement and decreased by HANDLER ... CLOSE.

 

 

参考资料:

 

https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.html

https://oracle-base.com/articles/mysql/mysql-identify-locked-tables

时间: 2024-10-31 11:44:47

mysqldump 参数--lock-tables浅析的相关文章

mysqldump: Got error: 1142: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'accounts' when using LOCK TABLES

AutoMySQLBackup备份时,出现mysqldump: Got error: 1142: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'accounts' when using LOCK TABLES错误,具体内容如下所示 [root@DB-Server ~]# /usr/bin/automysqlbackup /etc/automysqlbackup/myserver.conf Pars

MySQL中lock tables和unlock tables浅析

MySQL中lock tables和unlock tables浅析   在MySQL中提供了锁定表(lock tables)和解锁表(unlock tables)的语法功能,ORACLE与SQL Server数据库当中没有这种语法.相信刚接触MySQL的人,都想详细.深入的了解一下这个功能.下面就尽量全面的解析.总结一下MySQL中lock tables与unlock tables的功能,如有不足或不正确的地方,欢迎指点一二.     锁定表的语法:   LOCK TABLES tbl_name

mysqldump参数详解

参数 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导出全部表空间. mysqldump -uroot -p --all-databases --all-tablespaces --no-tablespaces , -y 不导出任何表空间信息. mysqldump -uroot -p --all-databases --no-tablespaces --a

MySQL中mysqldump参数使用说明

例 mysqldump备份: mysqldump -u用户名 -p密码 -h主机 数据库 a -w "sql条件" --lock-all-tables > 路径 mysqldump还原: mysqldump -u用户名 -p密码 -h主机 数据库 < 路径 mysqldump按条件导出: mysqldump -u用户名 -p密码 -h主机 数据库 a --where "条件语句" --no-建表> 路径 mysqldump -uroot -p123

Mysql中mysqldump参数解释

实用程序,为备份或为把数据转移到另外的SQL服务器上倾倒一个数据库或许多数据库.倾倒将包含 创建表或充实表的SQL语句. shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被倾倒. 通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表. 注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在倾倒结果前装载整个结果集到 内存中,如果你正在倾倒一个大的数据

phpadmin导入数据提示lock tables tablename write

使用mysqldump导出的数据库,在phpadmin导入时出错提示:lock tables tablename write .access denied.没有权限, 解决方法:  代码如下 复制代码 mysqldump导出数据时加上-skIP-lock-tables选项, 例 mysqldump -uroot -p123 –skip-lock-tables itlogger>itlogger.sql

mysql下普通用户备份数据库时无lock tables权限的解决方法_Mysql

[root@jb51.net]# mysqldump -u dbuser -ppass db > db.sql mysqldump: Got error: 1044: Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES 解决一: 加上-skip-lock-tables选项即可.即: [root@jb51.net]# mysqldump -u dbuser -ppass db --s

mysql中lock tables与unlock tables(锁表/解锁)使用总结

php mysql lock tables 使用有感 mysql 的 表锁 lock tables 感觉就像一个 封闭的空间 mysql发现 lock tables 命令的时候,会将带有锁标记的表(table) 带入封闭空间,直到 出现 unlock tables 命令 或 线程结束, 才关闭封闭空间. 进入封闭空间时 , 仅仅只有锁标记的表(table) 可以在里面使用,其他表无法使用. 锁标记 分为 read 和 write 下面是 两种 锁的区别 ---------------------

MySQL的lock tables和unlock tables使用详解

lock tables 命令是为当前线程锁定表.这里有2种类型的锁定,一种是读锁定,用命令 lock tables tablename read;另外一种是写锁定,用命令lock tables tablename write.下边分别介绍: 1. lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作. 下边我们测试下,测试表为user表. 不同的线程,可以通过开多个命令行MySQL客户端来实现: 时刻点  线程A(命令

错误代码:1100 Table &#039;t_depart_info&#039; was not locked with LOCK TABLES的解决方法_数据库其它

一步步来分析错误代码的生成原因,大家要有耐心哦. 第一步,错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:insert into emp values(11,'h',23,'女') 错误代码: 1100 Table 't_depart_info' was not locked with LOCK TABLES 执行耗时 : 0 sec 传送时间 : 0 sec 总耗时 : 0 sec 第二步,错误原因       将emp数