關於mysql source恢複資料過程中,select操作hang

來源:互聯網
上載者:User

用mysqldump主要資料庫到檔案中,資料庫中表的資料比較大,後在備庫上用source命令進行恢複,

mysqldump -u root -p dlsp >/DATA/mysql/dump/dump_dlsp.sql

source </DATA/mysql/dump/dump_dlsp.sql

在恢複資料過程中,對要恢複的表進行select操作,該操作就hang了。

用show processlist\G查看了一下;

*************************** 4. row ***************************     Id: 11   User: root   Host: localhost     db: dlspCommand: Query   Time: 334  State: Waiting for table metadata lock   Info: select count(1) from LSMP_LOTTERY

select操作在等待表的meta lock

那麼是什麼導致table meta lock了,原來dump出的檔案中會先把要操作的表lock住,直到insert表中的資料都操作完成才釋放鎖。

dump_dlsp.sql中在insert資料之前,有這樣一個操作,LOCK TABLES `LSMP_LOTTERY` WRITE,表的寫鎖,在釋放之前,該表一直處於開啟狀態,對該表的中繼資料鎖一直會佔用。

mysql> show open tables\G;
*************************** 21. row ***************************
   Database: dlsp
      Table: LSMP_LOTTERY
     In_use: 1
Name_locked: 0

這樣對錶的任何操作(包括DML),都會被鎖住。

附mysql的鎖的分類:

  1. Meta-data中繼資料鎖:在table cache緩衝裡實現的,為DDL(Data Definition Language)提供隔離操作。一種特別的meta-data中繼資料類型,叫Name Lock。(SQL層)
  2. 表級table-level資料鎖(SQL層) lock table xxxx write(read) 
  3. 儲存引擎特有機制 — row locks行鎖,page locks頁鎖,table locks表級,版本控制(在引擎中實現)
  4. 全域讀鎖 — FLUSH TABLES WITH READ LOCK(SQL層)

mysql鎖的執行流程

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.