当前位置: 首页 > 科技观察

MySQLump参数解析--Lock-Tables

时间:2023-03-23 10:05:44 科技观察

本文转载自微信公众号《DBA闲思杂想》,作者潇湘隐士。转载本文请联系DBA杂念公众号。Mysqldump有一个参数--lock-tables。之前对这个参数并没有深入了解,直到上次有网友问到“lock-tables这个参数是一次性锁定当前数据库中的所有表,还是锁定当前导出的表?”",我一直以为只是锁住当前导出的表,后面看了参数说明,-l,--lock-tablesLockalltablesforread.(Defaultstoon;use--skip-lock-tablestodisable.)没确认我自己,所以当时就测试了一下,准备一个稍微大一点的库,如果数据库太小,mysqldum命令可能会一次性把所有的库都导出来,导致实验结果看不清楚。执行以下命令做逻辑备份[root@DB-Server~]#mysqldump-uroot-p--default-character-set=utf8--opt--extended-insert=false--lock-tablesMyDB>db_backup_MyDB.sqlEnterpassword:同时立即执行以下命令mysql>showopentableswherein_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||Myster|cwd_application|1|0||MyDB|c1|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命令时,使用showopentableswhereIn_use>0命令,会看到MyDB中所有表的In_use值为1,也就是说执行mysqldump命令时,一次性锁定当前数据库中的所有表,而不是当前导出表。in_use解释表的表锁或锁请求的数量。例如,如果一个客户端使用LOCKTABLEt1WRITE为表获取锁,则In_use将为1。如果另一个客户端在表保持锁定时发出LOCKTABLEt1WRITE,则客户端将阻塞等待锁,但锁请求导致In_use为2。如果计数为零,则表已打开但当前未被使用。In_use也由HANDLER...OPEN语句增加,由HANDLER...CLOSE减少。参考:https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.htmlhttps://oracle-base.com/articles/mysql/mysql-identify-locked-tables

最新推荐
猜你喜欢