-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命令时,是一次性锁定当前库的所有表。而不是锁定当前导出表。