1. 程式人生 > >mysql5.5 中mysqldump 與metadata lock及其引數--dump_slave問題注意

mysql5.5 中mysqldump 與metadata lock及其引數--dump_slave問題注意

週末閒的無事,在家折騰mysql的各種備份工具,測試出以前沒有注意的一些東東,現記錄如下:

mysql 版本 5.5.34

1,mysqldump 與metadata lock

[[email protected] bin]# ./mysqldump -uroot -pxxx  -h 127.0.0.1 -P 3308 --single-transaction   --databases   yiqifa_xxx  test  > backup.test.dmp 

開啟另一個會話在test庫下執行:

(user:root  time: 21:08)[db: test]alter table test2 modify name varchar(50); 
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

test在後面的時候在dump沒有完成時依然可以對test 庫執行ddl即,沒有dump到的庫表不會加metadata lock  


將資料庫順序調換一下順序test放前面


[[email protected] bin]# ./mysqldump -uroot -pxxx  -h 127.0.0.1 -P 3308 --single-transaction   --databases test  yiqifa_xxx   > backup.test.dmp

 開啟另一個會話在test庫執行       alter table test2 modify name varchar(500)  發現
| 106517 | root        | localhost | test      | Query   |     8 | Waiting for table metadata lock
            | alter table test2 modify name varchar(500)  

只要所有的庫沒有都dump完成,那麼任何庫表上的metadata lock 一直不釋放 (如果想備份的時候依然可以對其他尚未備份的庫進行ddl,那麼你可以將小庫放在最後面)

這裡還需要注意一點:雖然備份過程中對已經存在的表無法進行ddl操作,但在備份時間點之後的新建表和刪除新建的表等操作是沒有metadata lock的

ERROR 1317 (70100): Query execution was interrupted
(user:root  time: 21:02)[db: test]create table a (id int ); drop table a;
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)

(user:root  time: 21:02)[db: test]use yiqifa_xxx;
Database changed
(user:root  time: 21:03)[db: yiqifa_xxx]create table a (id int ); drop table a;
Query OK, 0 rows affected (0.01 sec)

奇思怪想:如何才能人為在dump的時候消除metadata lock (當然這個一般沒啥意義)

其實可以直接把  --single-transaction 去掉另外加上--skip-lock-tables 這樣就可以。 

2, mysqldump 引數 --dump_slave對mysql的影響

先看一下關於該引數的解釋:

--dump-slave[=#]    This causes the binary log position and filename of the
                      master to be appended to the dumped data output. Setting
                      the value to 1, will printit as a CHANGE MASTER command
                      in the dumped data output; if equal to 2, that command
                      will be prefixed with a comment symbol. This option will
                      turn --lock-all-tables on, unless --single-transaction is
                      specified too (in which case a global read lock is only
                      taken a short time at the beginning of the dump - don't
                      forget to read about --single-transaction below). In all
                      cases any action on logs will happen at the exact moment
                      of the dump.Option automatically turns --lock-tables off.

上面這段話大概的意思是:該引數會將當前備份複製到主庫的binlog檔名和相應位置記錄到備份檔案設定為1會新增change master 語句,2 則在1的基礎上在change master 的最前面添加註釋 即”--“ ,如果該引數和 --single-transaction 結合使用那麼在dump開始的很短時間裡會加一個全域性讀鎖,否則就會開啟 --lock-all-tables ,在任何情況下該引數都會使得--lock-tables失效。

現在測試如下

[[email protected] mysql_bak]# time mysqldump -uroot -pxxxx yiqifa_xxxx  --dump_slave=2   --single-transaction >yiqifa_xxxx.dmp

在dump過程中開啟另一個會話show slave status \G 檢視:
************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.5.112
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000294
          Read_Master_Log_Pos: 721937777
               Relay_Log_File: mysql-relay-bin.000876
                Relay_Log_Pos: 49712363
        Relay_Master_Log_File: mysql-bin.000294
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: %.%
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 721924316
              Relay_Log_Space: 721938225
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 127112
1 row in set (0.00 sec)


備份完成後開啟備份檔案,檢視前面50行左右可見到

--
-- Position to start replication or point-in-time recovery from (the master of this slave) 
--

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000294', MASTER_LOG_POS=721924316;

上述結果顯示:change master 裡面的值 master_log_file 表示當前備庫複製到主庫的binlog檔名,master_log_pos 表示當前備庫執行到主庫binlog
的位置(注意不是讀取到master的位置),同時你還會看到sql_thread 處於NO的狀態,可見加入--dump_slave後mysqldump會執行stop salve sql_thread 

操作,直到完成備份後才會重新開啟sql thread 因此,如果你有對複製程序進行監控的話這個時候可能會有大量的告警。

特別注意:

如果在dump過程中因為一些其他因素如手動ctrl+c 或kill掉程序等,那麼你必須手動執行start slave 否則sql_thread執行緒會一直處於NO狀態。

另外,同時新增--master-data=2 引數的話生效的也是--dump_slave=2 即--dump_slave 的優先順序高於--master-data (可以自行測試)
為了讓change master 更加詳細,你還可以新增--include-master-host-port引數dump後結果如下:

--
-- Position to start replication or point-in-time recovery from (the master of this slave)
--
-- CHANGE MASTER TO MASTER_HOST='192.168.5.112', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000294', MASTER_LOG_POS=728464927;


說到這裡不得不提一些另外一個mysql多執行緒備份工具mydumper (關於該工具的介紹會在之後分享),它在備份過程也會記錄複製的資訊但不會導致sql_thread的停止。

本文完.. ...

新浪微博:freedom3959

qq  : 554370286

相關推薦

mysql5.5 mysqldump metadata lock及其引數--dump_slave問題注意

週末閒的無事,在家折騰mysql的各種備份工具,測試出以前沒有注意的一些東東,現記錄如下: mysql 版本 5.5.34 1,mysqldump 與metadata lock [[email protected] bin]# ./mysqldump -uroot

mysql5.5-資料備份恢復

一、mysqldump的工作原理 mysql資料庫自帶了一個很好用的備份命令,就是mysqldump。 它的基本使用如下: 語法:mysqldump -u 使用者名稱 -p 密碼 資料庫名 > 備份的檔名 利用mysqldump命令備份資料的過程,實際

Linux CentOS 6.5安裝配置Tomcat-8方法

2. 下載jdk-8u20-linux-x64.rpm,執行rpm -ivh jdk-8u20-linux-x64.rpm安裝;第二步 安裝 tomcat  將apache-tomcat-8.0.0.RC3.tar.gz檔案上傳到/usr/local中執行以下操作:  複製程式碼程式碼如下: [[email&

linux CentOS 6.5 安裝配置JDK-7

系統環境:centos-6.5 安裝方式:rpm安裝 軟體:jdk-7u79-linux-x64.rpm 檢驗系統原版本 [[email protected] ~]# java -version java version "1.7.0_24" OpenJDK Ru

Python3.4+Nginx+Django1.8+Mysql5.5專案開發部署

折騰好幾天才將專案部署成功,現在用篇文章給記錄下來。我的專案是採用的Python3.4+Nginx+uswgi+Mysql5.5+django1.8+Ubuntu12環境。專案原始碼是放在我的Github上https://github.com/xiaokugua250/Gd

MySQL5.5的安裝配置

第一部分:MySQL簡介MySQL由瑞典MySQL AB公司開發,目前屬於Oracle公司。MySQL是一個開源的關係型資料庫管理系統。MySQL分為社群版和企業版第二部分:MySQL安裝方式MSI安裝ZIP安裝第三部分:MySQL安裝步驟1.雙擊MSI安裝檔案,直接Next

windows訊息機制lparamwparam兩個引數的分析

一. WPARAM 和 LPARAM 本質上沒有什麼區別:都是32位數, 但是區別也還是有的:MICROSOFT在使用時兩種引數分別代表不同的含義和內容,WPARAM常常代表一些控制元件的ID或者高位低位組合起來分別表示滑鼠的位置,如果訊息的傳送者需要將某種結構的指標或者是

CentOS-7安裝配置Tomcat8.5

ane dsc 配置 pub add ted tar.gz 分享 cal 第一步:下載Tomcat8.5,通過地址:http://tomcat.apache.org/download-80.cgi下載 最後得到下載文件 apache-tomcat-8.5.15.tar.g

Mysqldump參數大全(參數來源於mysql5.5.19源碼)

排序。 soc tmp unlock cti 協議 tran 包含 nbsp 參數 參數說明 --all-databases , -A 導出全部數據庫。 mysqldump -uroot -p --all-databases --all-tablespa

C/C++const關鍵字的用法及其宏定義的比較

類型安全 屬性 const關鍵字 code oid 程序 函數返回值 存儲空間 臨時對象 1.const關鍵字的性質 簡單來說:const關鍵字修飾的變量具有常屬性。 即它所修飾的變量不能被修改。 2.修飾局部變量 1 const int a = 10; 2 int co

關於Unity5.5自帶搖桿車輪碰撞器的使用

cti 添加組件 class 碰撞器 call 如果 blog ext 面板 在創建好項目目錄的基礎上 導入一個第三方的資源包,在Project面板裏面 右鍵---->Import Package---->Custom Package---->easy_t

Centos6.5實現python2python3的並存

centos6.5中實現python2與python3的並存linux下python的安裝安裝步驟如下1 準備編譯環境 yum groupinstall ‘Development Tools‘ yum install zlib-devel bzip2-devel openssl-devel ncur

python 基礎2.5 循環continuebreake用法

range clas bsp port size pytho import code -s 示例1: #循環退出,break continue。break 跳出最外層循環;continue跳出內層循環 #當 i=5時,通過continue 跳出當前if循環,不在執行if循

求100以內素數的5基本方法及其優化

其他 依然 都是 耗時 基本 for proc rime 數字 求100以內素數的5中基本方法及其優化方法1 基本做法 錯解比較:進入了小循環:有時加pass也可以。錯解:這裏的print也同樣註意不要寫到循環內。 註釋:1.兩種條件運用:為合數。2.以上錯誤點。方法二

Mysqldump引數大全(引數來源於mysql5.5.19原始碼)

Mysqldump引數大全(引數來源於mysql5.5.19原始碼)   引數 引數說明 --all-databases  , -A 匯出全部資料庫。 mysqldump  -uroot -p -

HelloWorld CMake CMake構建靜態庫動態庫及其使用

繼續完善Hello World,建立它的共享庫, 包括靜態庫和動態庫。   本節的任務: 1,建立一個靜態庫和動態庫,提供HelloFunc函式供其他程式程式設計使用,HelloFunc 向終端輸出Hello World字串。 2,安裝標頭檔案與

MySQL資料庫 InnoDB MyISAM的區別及其應用場景

InnoDB 與 MyISAM 都是MySQL資料庫的引擎。 1.他們的區別分為五點: (1).事務處理: MyISAM是非事務安全型的,而InnoDB是事務安全型的(支援事務處理等) (2).鎖機制不同: MyISAM是

mysql5.5-中文亂碼原因解決方法

一、出現中文亂碼的原因 1.檢視字符集 mysql> show variables like ‘%char%’; ±-------------------------±-----------------------------------------

CMake構建靜態庫動態庫及其使用(CMakeLists的一些解釋)

本節的任務: 1,建立一個靜態庫和動態庫,提供HelloFunc函式供其他程式程式設計使用,HelloFunc 向終端輸出Hello World字串。 2,安裝標頭檔案與共享庫。 3, 編寫一個程式使用建立的共享庫(靜態庫和動態庫)。 cd /home/ccj/

CentOS7.5 yum 安裝配置MySQL5.7.24

.aspx ystemd 文件路徑 med 開機啟動 error 安全檢查 load ras 安裝環境:CentOS7 64位 MINI版,安裝MySQL5.7 1、配置YUM源 在MySQL官網中下載YUM源rpm安裝包:https://dev.mysql.com/d