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
只要所有的庫沒有都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訊息機制中lparam與wparam兩個引數的分析
一. 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中實現python2與python3的並存
centos6.5中實現python2與python3的並存linux下python的安裝安裝步驟如下1 準備編譯環境 yum groupinstall ‘Development Tools‘ yum install zlib-devel bzip2-devel openssl-devel ncur
python 基礎2.5 循環中continue與breake用法
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