percona-toolkit工具包的安裝和使用

lhrbest發表於2019-07-23


percona-toolkit工具包的安裝和使用


下載: https://www.percona.com/downloads/percona-toolkit/LATEST/





percona-toolkit工具包同percona-xtrabackup一樣都是用Perl寫的工具包,percona-toolkit工具包是一組高階的管理mysql的工具包集,可以用來執行各種通過手工執行非常複雜和麻煩的mysql和系統任務,在生產環境中能極大的提高效率,安裝也很簡單。


1.檢查和安裝與Perl相關的模組

    PT工具是使用Perl語言編寫和執行的,所以需要系統中有Perl環境。

    依賴包檢查命令為:

rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL

    如果有依賴包確實,可以使用下面的命令安裝:

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

wget http://pkgs.repoforge.org/perl-TermReadKey/perl-TermReadKey-2.30-1.el3.rf.x86_64.rpm 
rpm -ivh perl-TermReadKey-2.30-1.el3.rf.x86_64.rpm 
wget https://www.percona.com/downloads/percona-toolkit/2.2.14/RPM/percona-toolkit-2.2.14-1.noarch.rpm 
rpm -ivh percona-toolkit-2.2.14-1.noarch.rpm

 如果不能下載: 直接進入頁面下載rpm包:

   1,https://centos.pkgs.org/   搜尋: perl-TermReadKey  下載

   2,https://www.percona.com/downloads/  進入下載頁面下載

[root@rhel6lhr Packages]# rpm -ivh perl-Net-LibIDN-0.12-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:perl-Net-LibIDN        ########################################### [100%]
[root@rhel6lhr Packages]# rpm -ivh perl-Net-SSLeay-1.35-9.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:perl-Net-SSLeay        ########################################### [100%]
[root@rhel6lhr Packages]# rpm -ivh  perl-IO-Socket-SSL-1.31-2.el6.noarch.rpm 
Preparing...                ########################################### [100%]
   1:perl-IO-Socket-SSL     ########################################### [100%]


注意:需要安裝Term::ReadKey 包,否則會報perl(Term::ReadKey) is needed by percona-toolkit-2.2.14-1.noarch


2:下載和安裝percona toolkit的包

http://pkgs.repoforge.org/perl-TermReadKey/(key)

https://www.percona.com/downloads/percona-toolkit/ (tool)


yum install percona-toolkit

或:

tar  -zxvf percona-toolkit-3.0.13_x86_64.tar.gz
export PATH=$PATH:/usr/local/percona-toolkit-3.0.13/bin

可以加入/etc/profile檔案中。

安裝後,可以通過下面的命令確認是否安裝成功:

# pt-query-digest --help

# pt-table-checksum --help

如果命令提示可以正常顯示,則說明pt工具已經正常安裝和使用了。



3)pt-online-schema-change

        RSU只避免了執行DDL的節點對其它節點的阻塞,但對於同一節點上DDL與DML的相互影響問題卻無能為力。在當前階段,解決非阻塞線上DDL的終極解決方案是使用pt-online-schema-change。


        pt-online-schema-change是percona-toolkit中的一個工具,功能是無鎖定線上修改表結構,要求被修改表具有主鍵或唯一索引。percona-toolkit工具包的安裝和使用非常簡單。例如,從https://www.percona.com/downloads/percona-toolkit/LATEST/下載percona-toolkit,然後執行下面的命令進行安裝:


# 安裝依賴包

yum install perl-TermReadKey.x86_64 

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

 

# 安裝percona-toolkit

rpm -ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm

        執行類似下面的命令修改表結構:


pt-online-schema-change --alter="add column c1 int;" --execute D=test,t=t1,u=root,p=P@sswo2d

        alter引數指定修改表結構的語句,execute表示立即執行,D、t、u、p分別指定庫名、表名、使用者名稱和密碼,執行期間不阻塞其它並行的DML語句。pt-online-schema-change還有許多選項,具體用法可以使用pt-online-schema-change --help檢視聯機幫助。官方文件連結為:https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html。


        pt-online-schema-change工作原理其實很簡單:


如果存在外來鍵,根據alter-foreign-keys-method引數的值,檢測外來鍵相關的表,做相應設定的處理。如果被修改表存在外來鍵定義但沒有使用 --alter-foreign-keys-method 指定特定的值,該工具不予執行。

建立一個新的表,表結構為修改後的資料表,用於從源資料表向新表中匯入資料。

建立觸發器,用於記錄從拷貝資料開始之後,對源資料表繼續進行資料修改的操作記錄下來,資料拷貝結束後,執行這些操作,保證資料不會丟失。如果表中已經定義了觸發器這個工具就不能工作了。

拷貝資料,從源資料表中拷貝資料到新表中。

修改外來鍵相關的子表,根據修改後的資料,修改外來鍵關聯的子表。

rename源資料表為old表,把新表rename為源表名,並將old表刪除。

刪除觸發器。





有的32個命令,可以分為7大類:

工具類別

工具命令

工具作用

備註

開發類

pt-duplicate-key-checker

列出並刪除重複的索引和外來鍵

pt-online-schema-change

線上修改表結構

pt-query-advisor

分析查詢語句,並給出建議,有 bug

已廢棄

pt-show-grants

規範化和列印許可權

pt-upgrade

在多個伺服器上執行查詢,並比較不同

效能類

pt-index-usage

分析日誌中索引使用情況,並出報告

pt-pmp

為查詢結果跟蹤,並彙總跟蹤結果

pt-visual-explain

格式化執行計劃

pt-table-usage

分析日誌中查詢並分析表使用情況

pt 2.2新增命令

配置類

pt-config-diff

比較配置檔案和引數

pt-mysql-summary

mysql配置和 status進行彙總

pt-variable-advisor

分析引數,並提出建議

監控類

pt-deadlock-logger

提取和記錄 mysql死鎖資訊

pt-fk-error-logger

提取和記錄外來鍵資訊

pt-mext

並行檢視 status樣本資訊

pt-query-digest

分析查詢日誌,併產生報告

常用命令

pt-trend

按照時間段讀取 slow日誌資訊

已廢棄

複製類

pt-heartbeat

監控 mysql複製延遲

pt-slave-delay

設定從落後主的時間

pt-slave-find

查詢和列印所有 mysql複製層級關係

pt-slave-restart

監控 salve錯誤,並嘗試重啟 salve

pt-table-checksum

校驗主從複製一致性

pt-table-sync

高效同步表資料

系統類

pt-diskstats

檢視系統磁碟狀態

pt-fifo-split

模擬切割檔案並輸出

pt-summary

收集和顯示系統概況

pt-stalk

出現問題時,收集診斷資料

pt-sift

瀏覽由 pt-stalk建立的檔案

pt 2.2新增命令

pt-ioprofile

查詢程式 IO並列印一個 IO活動表

pt 2.2新增命令

實用類

pt-archiver

將表資料歸檔到另一個表或檔案中

pt-find

查詢表並執行命令

pt-kill

Kill掉符合條件的 sql

常用命令

pt-align

對齊其他工具的輸出

pt 2.2新增命令

pt-fingerprint

將查詢轉成密文

pt 2.2新增命令

 

 

上面是pt工具各個命令的基本功能介紹,可以使用 command --help 來檢視每個命令的具體作用和使用方法;

有的命令也可以使用 man command 命令查詢相關命令詳細資訊。

目前使用的比較多的命令是: pt-query-digest ,pt-kill等命令。

加欄位例子:

   

pt-online-schema-change  --alter "add column attribute3 varchar(100)" h=192.168.1.142,P=3306,p=cc.123,u=root,D=orabenlai,t=oraesb  --no-check-replication-filters  --execute

   說明: 1, 如果有  binlog_ignore_db = mysql 選型會報 check-replication-filters 錯誤,必須加上  --no-check-replication-filters

              2, --execute 前面是有2個"-"

              3,加多個欄位可以使用: "add column attribute1 varchar(100),add column attribute2 varchar(100)"




percona-toolkit 使用教程  

一、  percona-toolkit 簡介  

percona-toolkit 是一組高階命令列工具的集合,用來執行各種通過手工執行非常複雜和麻煩的 mysql 任務和系統任務,這些任務包括:  

檢查 master slave 資料的一致性  

有效地對記錄進行歸檔

  查詢重複的索引  

對伺服器資訊進行彙總  

分析來自日誌和 tcpdump 的查詢  

當系統出問題的時候收集重要的系統資訊  

percona-toolkit 源自 Maatkit Aspersa 工具,這兩個工具是管理 mysql 的最有名的工具,現在 Maatkit 工具已經不維護了,請大家還是使用 percona-toolkit 吧!這些工具主要包括開發、效能、配置、監控、複製、系統、實用六大類,作為一個優秀的 DBA ,裡面有的工具非常有用,如果能掌握並加以靈活應用,將能極大的提高工作效率。  

二、  percona-toolkit 工具包安裝  

1.   軟體包下載  

訪問 http://www.percona.com/software/percona - toolkit/   載最新版本的 Percona Toolkit 或者通過如下命令列來獲取最新的版本:  

wget percona . com /get/ percona - toolkit . tar . gz wget percona . com /get/ percona - toolkit . rpm

我這裡選擇直接從網站上找到最新版本下載:  

wget http://www.percona.com/redir/downloads/percona - toolkit/2.1.1/percona - t oolkit - 2.1.1 - 1.noarch.rpm   wget http://www.percona.com/redir/downloads/percona - toolkit/2.1.1/percona - t oolkit - 2.1.1.tar.gz  

  http://pkgs.repoforge.org/perl - TermReadKey/ 載最新的 TermReadKey  

wget http://pkgs.repoforge.org/perl - TermReadKey/perl - TermReadKey - 2.30 - 1.el5.

rf.x86_64.rpm  

 

2.   軟體包安裝  

我的環境是 Centos 5.5 64 BIT

A.  percona - toolkit rpm 安裝方式  

rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm rpm -ivh percona-toolkit-2.1.1-1.noarch.rpm

注意:需要安裝 Term::ReadKey 包,否則會報 perl(Term::ReadKey) >= 2.10

is needed by percona-toolkit-2.1.1-1.noarch 錯誤  

B.  percona - toolkit 的編譯安裝方式  

tar xzvf percona-toolkit-2.1.1.tar.gz cd percona-toolkit-2.1.1 perl Makefile.PL make make test

make install

 

三、   percona-toolkit 的使用  

根據 percona-toolkit 的工具型別可以總結出下面五個類別,方便大家進行學習和實踐,下面就針對這些不同的類別來分別介紹這些工具的用法。  

( )   開發類工具  

1.  pt-duplicate-key-checker

功能介紹:功能為從 mysql 表中找出重複的索引和外來鍵,這個工具會將重複的索引和外來鍵都列出來,並生成了刪除重複索引的語句,非常方便  

用法介紹:  

pt-duplicate-key-checker [OPTION...] [DSN]

包含比較多的選項,具體的可以通過命令 pt-duplicate-key-checker  

--help 來檢視具體支援那些選項,我這裡就不一一列舉了。 DNS 為資料庫或者表。  

使用示例:  

檢視 test 資料庫的重複索引和外來鍵使用情況使用如下命令  

pt-duplicate-key-checker   --host=localhost

--password=zhang@123  --databases=test

--user=root

   

2.  pt-online-schema-change

功能介紹:功能為在 alter 操作更改表結構的時候不用鎖定表,也就是說執行 alter 的時候不會阻塞寫和讀取操作, 注意執行這個工具的時候必須做好備份,操作之前最好詳細讀一下官方文件 http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-ch ange.html  

工作原理是建立一個和你要執行 alter 操作的表一樣的空表結構,執行表結構修改,然後從原表中 copy 原始資料到表結構修改後的表,當資料 copy 完成以後就會將原表移走,用新表代替原表,預設動作是將原表 drop 掉。在 copy 資料的過程中,任何在原表的更新操作都會更新到新表,因為這個工具在會在原表上建立觸發器,觸發器會將在原表上更新的內容更新到新表。 如果表中已經定義了觸發器這個工具就不能工作了。  

用法介紹:  

pt-online-schema-change [OPTIONS] DSN

options 可以自行檢視 help DNS 為你要操作的資料庫和表。這裡有兩個引數需要介紹一下:  

--dry-run   這個引數不建立觸發器,不拷貝資料,也不會替換原表。只是建立和更改新表。  

-- execute     這個引數的作用和前面工作原理的介紹的一樣,會建立觸發器,來保證最新變更的資料會影響至新表。 注意:如果不加這個引數,這個工具會在執行一些檢查後退出。這一舉措是為了讓使用這充分了解了這個工具的原理,同時閱讀了官方文件。  

使用示例:範例 1 :線上更改表的的引擎,這個尤其在整理 innodb 表的時候非常有用,示例如下:  

pt-online-schema-change --user=root --password=zhang@123 --host=l ocalhost --lock-wait-time=120 --alter="ENGINE=InnoDB" D=test,t=oss_ pvinfo2 --execute

從下面的日誌中可以看出它的執行過程:  

Altering `test`.`oss_pvinfo2`...

Creating new table...

Created new table test._oss_pvinfo2_new OK.

Altering new table...

Altered `test`.`_oss_pvinfo2_new` OK.

Creating triggers...

Created triggers OK.

Copying approximately 995696 rows...

Copied rows OK.

Swapping tables...

Swapped original and new tables OK.

Dropping old table...

Dropped old table `test`.`_oss_pvinfo2_old` OK.

Dropping triggers...

Dropped triggers OK.

Successfully altered `test`.`oss_pvinfo2`.

範例 2 :大表新增欄位的,語句如下 :

pt-online-schema-change --user=root --password=zhang@123 --host=l ocalhost --lock-wait-time=120 --alter="ADD COLUMN domain_id INT"  D=test,t=oss_pvinfo2 --execute

3.  pt-query-advisor

功能介紹:根據一些規則分析查詢語句,對可能的問題提出建議,這些評判規則大 http://www.percona.com/doc/percona - toolkit/2.1/pt - query - advisor.ht

ml 這裡就不詳細列舉了。那些查詢語句可以來自慢查詢檔案、 general 日誌檔案或者使用 pt-query-digest 截獲的查詢語句。目前這個版本有 bug ,當日志檔案非常大的時候會需要很長時間甚至進入死迴圈。  

用法介紹:  

pt-query-advisor /path/to/slow-query.log

pt-query-advisor --type genlog mysql.log pt-query-digest --type tcpdump.txt --print --no-report | pt-query-advisor

 

使用示例:分析一個語句的例子:  

pt-query-advisor --query "select * from aaa"

分析 general log 中的查詢語句的例子:  

pt-query-advisor /data/dbdata/general.log

分析慢查詢中的查詢語句的例子:  

pt-query-advisor /data/dbdata/localhost-slow.log

 

4.  pt-show-grants

功能介紹:規範化和列印 mysql 許可權,讓你在複製、比較 mysql 許可權以及進行版本控制的時候更有效率!  

用法介紹:  

pt-show-grants [OPTION...] [DSN]

選項自行用 help 檢視, DSN 選項也請檢視 help ,選項區分大小寫。  

使用示例:檢視指定 mysql 的所有使用者許可權:  

pt-show-grants --host='localhost' --user='root' --password='zhang@123'

檢視執行資料庫的許可權:  

pt-show-grants --host='localhost' --user='root' --password='zhang@123'  

--database='hostsops'

檢視每個使用者許可權生成 revoke 收回許可權的語句:  

pt-show-grants --host='localhost' --user='root' --password='zhang@123'  

--revoke

 

5.  pt-upgrade

功能介紹:在多臺伺服器上執行查詢,並比較有什麼不同!這在升級伺服器的時候非常有用,可以先安裝並導資料到新的伺服器上,然後使用這個工具跑一下 sql 看看有什麼不同,可以找出不同版本之間的差異。  

用法介紹:  

pt-upgrade [OPTION...] DSN [DSN...] [FILE]

比較檔案中每一個查詢語句在兩個主機上執行的結果,並檢查在每個伺服器上執行的結果、錯誤和警告。  

使用示例:只檢視某個 sql 在兩個伺服器的執行結果範例:  

pt-upgrade h='localhost' h=192.168.3.92 --user=root --password=zha ng@123 --query="select * from user_data.collect_data limit 5"

檢視檔案中的對應 sql 在兩個伺服器的執行結果範例:  

pt-upgrade h='localhost' h=192.168.3.92 --user=root --password=zha ng@123  aaa.sql

檢視慢查詢中的對應的查詢 SQL 在兩個伺服器的執行結果範例:  

pt-upgrade h='localhost' h=192.168.3.92 --user=root --password=zha ng@123  slow.log

此外還可以執行 compare 的型別,主要包含三個 query_times,results,warnings ,比如下面的例子,只比較 sql 的執行時間  

pt-upgrade h=192.168.3.91 h=192.168.3.92 --user=root --password=z hang@123 --query="select * from user_data.collect_data" --compar e query_times

 

( )   效能類工具  

1.  pt-index-usage

功能介紹:從 log 檔案中讀取插敘語句,並用 explain 分析他們是如何利用索引。

完成分析之後會生成一份關於索引沒有被查詢使用過的報告。  

用法介紹:  

pt-index-usage [OPTION...] [FILE...]

可以直接從慢查詢中獲取 sql FILE 檔案中的 sql 格式必須和慢查詢中個是一致,如果不是一直需要用 pt-query-digest 轉換一下。也可以不生成報告直接儲存到資料庫中,具體的見後面的示例  

使用示例:從滿查詢中的 sql 檢視索引使用情況範例:  

pt-index-usage /data/dbdata/localhost-slow.log --host=localhost --use r=root --password=zhang@123

將分析結果儲存到資料庫範例:  

pt-index-usage /data/dbdata/localhost-slow.log --host=localhost --use r=root --password=zhang@123  --no-report --create-save-results-data base

  使用 --create-save-results-database 會自動生成資料庫和表來儲存結果。  

2.  pt-pmp

功能介紹:為查詢程式執行聚合的 GDB 堆疊跟蹤,先進性堆疊跟蹤,然後將跟蹤資訊彙總。  

用法介紹:  

pt-pmp [OPTIONS] [FILES]

使用示例:  

pt-pmp -p 21933 pt-pmp -b /usr/local/mysql/bin/mysqld_safe

3.  pt-visual-explain

功能介紹:  

格式化 explain 出來的執行計劃按照 tree 方式輸出,方便閱讀。  

用法介紹:  

pt-visual-explain [OPTION...] [FILE...]

option 請參閱官方網站,這裡不一一例舉!  

使用示例:檢視包含 explain 結果的 aaa 檔案的範例:  

pt-visual-explain  aaa

檢視包含查詢語句的 aaa 檔案的範例:  

pt-visual-explain --connect aaa --user=root --password=zhang@123  

通過管道直接檢視 explain 輸出結果的範例:  

mysql -uroot -pzhang@123  -e "explain select email from test.colle ct_data where id=101992419" |pt-visual-explain

 

( )   配置類工具  

1.  pt-config-diff

功能介紹:比較 mysql 配置檔案和伺服器引數  

用法介紹:  

pt-config-diff [OPTION...] CONFIG CONFIG [CONFIG...]

CONFIG 可以是檔案也可以是資料來源名稱,最少必須指定兩個配置檔案源,就像 unix 下面的 diff 命令一樣,如果配置完全一樣就不會輸出任何東西。  

使用示例:範例 1 :檢視本地和遠端伺服器的配置檔案差異:  

pt-config-diff h=localhost h=192.168.3.92 --user=root --password=zha ng@123

比較出來內容如下:  

22 config differences

Variable                                   localhost.localdomain localhost.localdomain

========================= =====================

===================== binlog_cache_size         8388608               2097152 have_ndbcluster           DISABLED              NO innodb_additional_mem_... 16777216              33554432 innodb_buffer_pool_size   1677721600            1073741824

 

範例 2 :比較本地配置檔案和遠端伺服器的差異:  

pt-config-diff /etc/my.cnf h=192.168.3.92 --user=root --password=zha ng@123   

比較出來內容如下:  

12 config differences

Variable                  /etc/my.cnf localhost.localdomain ========================= =========== ===================== binlog_cache_size         8388608     2097152 binlog_format             mixed       MIXED

 

範例 3 :比較本地兩個配置檔案的差異:  

pt-config-diff /usr/local/mysql/share/mysql/my-large.cnf  /usr/local/m ysql/share/mysql/my-medium.cnf

2.  pt-mysql-summary

功能介紹:精細地對 mysql 的配置和 sataus 資訊進行彙總,彙總後你直接看一眼就能看明白。  

用法介紹:  

pt-mysql-summary [OPTIONS] [-- MYSQL OPTIONS]

工作原理:連線 mysql 後查詢出 status 和配置資訊儲存到臨時目錄中,然後用 awk 和其他的指令碼工具進行格式化。 OPTIONS 可以查閱官網的相關頁面。  

使用示例:範例 1 :彙總本地 mysql 伺服器的 status 和配置資訊:  

pt-mysql-summary -- --user=root --password=zhang@123 --host=local host

範例 2 :彙總本地 mysql 伺服器 192.168.3.92 status 和配置資訊:  

pt-mysql-summary -- --user=root --password=zhang@123 --host=192. 168.3.92

3.  pt-variable-advisor

功能介紹:分析 mysql 的引數變數,並對可能存在的問題提出建議  

用法介紹:  

pt-variable-advisor [OPTION...] [DSN]

原理:根據預先定義的規則檢查 show variables 中的配置錯誤的設定和值。  

使用示例:  

範例 1 :從 localhost 獲取變數值  

pt-variable-advisor --user=root --password=zhang@123  localhost 範例 2 :從指定的檔案中讀取配置,這個有格式要求  

pt-variable-advisor --user=root --password=zhang@123  

--source-of-variables my.cnf   

 

( )   監控類工具  

1.  pt-deadlock-logger

功能介紹:提取和記錄 mysql 死鎖的相關資訊  

用法介紹:  

pt-deadlock-logger [OPTION...] SOURCE_DSN

收集和儲存 mysql 上最近的死鎖資訊,可以直接列印死鎖資訊和儲存死鎖資訊到資料庫中,死鎖資訊包括髮生死鎖的伺服器、最近發生死鎖的時間、死鎖執行緒 id 、死鎖的事務 id 、發生死鎖時事務執行了多長時間等等非常多的資訊。詳情見下面的示例。  

使用示例:範例 1 :列印本地 mysql 的死鎖資訊  

pt-deadlock-logger  --user=root --password=zhang@123 h=localhost

–print

範例 2 :將本地的 mysql 死鎖資訊記錄到資料庫的表中,也列印出來  

pt-deadlock-logger  --user=root --password=zhang@123 h=localhost

--print D=test,t=deadlocks

2.  pt-fk-error-logger

功能介紹:提取和記錄 mysql 外來鍵錯誤資訊  

用法介紹:  

pt-fk-error-logger [OPTION...] SOURCE_DSN

通過 SHOW INNODB STATUS 提取和儲存 mysql 資料庫最近發生的外來鍵錯誤資訊。可以通過引數控制直接列印錯誤資訊或者將錯誤資訊儲存到資料庫的表中。  

使用示例:我在伺服器上執行的時候一直報如下錯誤:  

Use of uninitialized value in concatenation (.) or string at /usr/bin

/pt-fk-error-logger line 2045

我懷疑是這個程式有問題,回頭換一個版本試一下或者除錯一下那個程式。  

 

3.  pt-mext

功能介紹:  

並行檢視 SHOW GLOBAL STATUS 的多個樣本的資訊。  

用法介紹:  

pt-mext [OPTIONS] -- COMMAND

原理: pt-mext 執行你指定的 COMMAND ,並每次讀取一行結果,把空行分割的內容儲存到一個一個的臨時檔案中,最後結合這些臨時檔案並行檢視結果。  

使用示例:範例 1 :每隔 10s 執行一次 SHOW GLOBAL STATUS ,並將結果合併到一起檢視  

pt-mext  -- mysqladmin ext -uroot -pzhang@123  -i10 -c3

 

4.  pt-query-digest

功能介紹:分析查詢執行日誌,併產生一個查詢報告,為 MySQL PostgreSQL  memcached 過濾、重放或者轉換語句。  

用法介紹:  

pt-query-digest [OPTION...] [FILE]

解析和分析 mysql 日誌檔案  

使用示例:範例 1 :分析本地的慢查詢檔案  

pt-query-digest --user=root --password=zhang@123 /data/dbdata/loc alhost-slow.log

範例 2 :重新回顧滿查詢日誌,並將結果儲存到 query_review 中,注意 query_review 表的表結構必須先建好,表結構如下:  

CREATE TABLE query_review (    checksum     BIGINT UNSIGNED NOT NULL PRIMARY KEY,    fingerprint  TEXT NOT NULL,    sample       TEXT NOT NULL,    first_seen   DATETIME,    last_seen    DATETIME,    reviewed_by  VARCHAR(20),    reviewed_on  DATETIME,    comments     TEXT

);

命令如下:  

pt-query-digest --user=root --password=zhang@123 --review h=localh ost,D=test,t=query_review /data/dbdata/localhost-slow.log

5.   pt-trend

功能介紹:居於一組時間序列的資料點做統計。  

用法介紹:  

pt-trend [OPTION...] [FILE ...]

讀取一個慢查詢日誌,並輸出統計資訊。也可以指定多個檔案。如果不指定檔案的話直接從標準輸入中讀取資訊。  

使用示例:範例 1 :讀取本地慢查詢日誌並輸出統計資訊  

pt-trend /data/dbdata/localhost-slow.log

          這裡輸出的資訊沒有說明,有點看不明白!  

 

( )   複製類工具  

1.   pt-heartbeat

功能介紹:監控 mysql 複製延遲  

用法介紹:  

pt-heartbeat [OPTION...] [DSN] --update|--monitor|--check|--stop

測量複製落後主 mysql 或者主 PostgreSQL 多少時間,你可以使用這個指令碼去更新主或者監控複製,具體用法見後面的示例 .

原理: pt-heartbeat 通過真實的複製資料來確認 mysql postgresql 複製延遲,這個避免了對複製機制的依賴,從而能得出準確的落後複製時間,包含兩部分:第一部分在主上 pt-heartbeat --update 執行緒會在指定的時間間隔更新一個時間戳,第二部分是 pt-heartbeat --monitor 執行緒或者 --check 執行緒連線到從上檢查複製的心跳記錄(前面更新的時間戳),並和當前系統時間進行比較,得出時間的差異。  

你可以手工建立 heartbeat 表或者新增 - - create - table   數,推薦使用 MEMORY 引擎。表結構為:  

CREATE TABLE heartbeat (   ts              varchar(26) NOT NULL,   server_id        int unsigned NOT NULL PRIMARY KEY,   file             varchar(255) DEFAULT NULL,    -- SHOW MASTER STATUS   position         bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS   relay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUS   exec_master_log_pos  bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS

);

 

l   使用示例:  

範例 1 :建立一個後臺程式定期更新主上的 test 庫的 heartbeat 表()預設是 1s ,可以 --interval 指定,執行後會成一個 heartbeat 表, test 庫為我監控的同步庫:  

pt-heartbeat -D test --update --user=root --password=zhang@123 -h

192.168.3.135 --create-table –daemonize

範例 2 :監控複製在 slave 上的落後程度(會一直監控):  

pt-heartbeat -D test --monitor --user=root --password=zhang@123 h192.168.3.92

監控結果如下:  

0.00s [  0.00s,  0.00s,  0.00s ] 0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

0.00s [  0.00s,  0.00s,  0.00s ]

範例 3 :監控複製在 slave 上的落後程度(監控一次退出):  

pt-heartbeat -D test --check --user=root --password=zhang@123 -h1

92.168.3.92

範例 4 :監控 PostgreSQL 需要新增 --dbi-driver Pg  

pt-heartbeat -D test --check --user=root --password=zhang@123 -h1 92.168.3.92 --dbi-driver Pg

 

2.  pt-slave-delay

功能介紹:設定從伺服器落後於主伺服器指定時間。  

用法介紹:  

pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]

原理:通過啟動和停止複製 sql 執行緒來設定從落後於主指定時間。預設是基於從上 relay 日誌的二進位制日誌的位置來判斷,因此不需要連線到主伺服器,如果 IO 程式不落後主伺服器太多的話,這個檢查方式工作很好,如果網路通暢的話,一般 IO 執行緒落後主通常都是毫秒級別。一般是通過 -- delay   and --delay"+"--interval 來控制。 --interval 是指定檢查是否啟動或者停止從上 sql 執行緒的頻繁度,預設的是 1 分鐘檢查一次。  

使用示例:範例 1 :使從落後主 1 分鐘,並每隔 1 分鐘檢測一次,執行 10 分鐘  

pt-slave-delay --user=root --password=zhang@123 --delay 1m --run-t ime 10m --host=192.168.3.92

如果不加 --run-time 引數會一直執行。  

範例 2 :使從落後主 1 分鐘,並每隔 15 秒鐘檢測一次,執行 10 分鐘  

pt-slave-delay --user=root --password=zhang@123 --delay 1m --inter val 15s --run-time 10m --host=192.168.3.92

執行結果如下:  

2012-05-20T16:34:50 slave running 0 seconds behind

2012-05-20T16:34:50 STOP SLAVE until 2012-05-20T16:35:50 at mas ter position mysql-bin.000032/4392054

2012-05-20T16:35:05 slave stopped at master position mysql-bin.00 0032/4397124

2012-05-20T16:35:20 slave stopped at master position mysql-bin.00 0032/4402194

2012-05-20T16:35:35 slave stopped at master position mysql-bin.00

0032/4407264

2012-05-20T16:35:50 no new binlog events

2012-05-20T16:36:05 START SLAVE until master 2012-05-20T16:35:0 5 mysql-bin.000032/4397124

 

3.  pt-slave-find

功能介紹:查詢和列印 mysql 所有從伺服器複製層級關係  

用法介紹:  

pt-slave-find [OPTION...] MASTER-HOST

原理 : 連線 mysql 主伺服器並查詢其所有的從,然後列印出所有從伺服器的層級關係。  

使用示例:  

範例 1 :查詢主伺服器為 192.168.3.135 mysql 有所有從的層級關係:  

pt-slave-find --user=root --password=zhang@123 --host=192.168.3.13 5

4.  pt-slave-restart

功能介紹:  

監視 mysql 複製錯誤,並嘗試重啟 mysql 複製當複製停止的時候  

用法介紹:  

pt-slave-restart [OPTION...] [DSN]

監視一個或者多個 mysql 複製錯誤,當從停止的時候嘗試重新啟動複製。你可以指定跳過的錯誤並執行從到指定的日誌位置。  

使用示例:  

範例 1 :監視 192.168.3.92 的從,跳過 1 個錯誤  

pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.

92 --skip-count=1

  範例 2 :監視 192.168.3.92 的從,跳過錯誤程式碼為 1062 的錯誤。  

pt-slave-restart --user=root --password=zhang@123 --host=192.168.3.

92 --error-numbers=1062

5.   pt-table-checksum

功能介紹:檢查 mysql 複製一致性   

用法介紹:  

pt-table-checksum [OPTION...] [DSN]

工作原理: pt-table-checksum 在主上執行檢查語句線上檢查 mysql 複製的一致性,生成 replace 語句,然後通過複製傳遞到從,再通過 update 更新 master_src 的值。通過檢測從上 this_src master_src 的值從而判斷複製是否一致。  

注意:使用的時候選擇業務地峰的時候執行,因為執行的時候會造成表的部分記錄鎖定。使用 -- max - load   指定最大的負載情況,如果達到那個負載這個暫停執行。如果發現有不一致的資料,可以使用 pt-table-sync 工具來修復。  

注意:和 1.0 版本不同,新版本的 pt-table-checksum 只需要在 master 上執行即可。  

通過  –explain 引數再結合二進位制日誌就可以看出指令碼的工作原理,如我的 test 庫有一個名字為 zhang 的表,我們通過抓取二進位制日誌來檢視指令碼的原理:  

REPLACE INTO `test`.`checksums` (db, tbl, chunk, chunk_index, lowe r_boundary, upper_boundary, this_cnt, this_crc) SELECT 'test', 'zhan g', '1', NULL, NULL, NULL, COUNT(*) AS cnt, COALESCE(LOWER(CON V(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `id`, `name`, CONCAT(ISNULL

(`name`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `test`.`zhang`

 /*checksum table*/;

UPDATE `test`.`checksums` SET chunk_time = '0.000563', master_crc  = '31012777', master_cnt = '4' WHERE db = 'test' AND tbl = 'zha ng' AND chunk = '1'

從這裡可以很明顯的看出原理了,前面已經說了,這裡就不贅述了。  

l   使用示例:範例 1 :比較 test 資料庫同步是否一致,結果顯示所有的表。  

pt-table-checksum  --nocheck-replication-filters --databases=test --re plicate=test.checksums --create-replicate-table  --host=192.168.3.135

  --port 3306  -uroot -pzhang@123

引數說明:第一次執行的時候需要新增 --create-replicate-table 引數,如果不加這個就需要手工執行新增表結構的 SQL, 表結構 SQL 如下:  

CREATE TABLE checksums (    db             char(64)     NOT NULL,    tbl            char(64)     NOT NULL,    chunk          int          NOT NULL,    chunk_time     float            NULL,    chunk_index    varchar(200)     NULL,    lower_boundary text             NULL,    upper_boundary text             NULL,    this_crc       char(40)     NOT NULL,    this_cnt       int          NOT NULL,    master_crc     char(40)         NULL,    master_cnt     int              NULL,    ts             timestamp    NOT NULL,

   PRIMARY KEY (db, tbl, chunk),

   INDEX ts_db_tbl (ts, db, tbl)

) ENGINE=InnoDB;

之所以使用 --nocheck-replication-filters 引數是因為我的 my.cnf 配置了 replicate-ignore-db replicate-wild-do-table 等引數。另外需要特別注意執行的 checksums 所在的資料庫必須是同步的資料庫。我剛開始使用的時候摸索的很久,官網也沒有範例。呵呵!結果如下:  

TS         ERRORS DIFFS  ROWS  CHUNKS SKIPPED  TIME TABLE

05-23T16:19:29  0   1        2   1  0  0.006 test.aaa

05-23T16:19:29  0   0        1   1  0  0.017 test.bbb

05-23T16:19:29  0   0        0   1  0  0.007 test.category_part

05-23T16:19:31  0   0   233617   6  0  1.887 test.collect_data

05-23T16:19:34  0   0   250346   5  0  2.709 test.effective_user

05-23T16:19:34  0   1        1   1  0  0.008 test.heartbeat

05-23T16:19:39  0   0  1000000  11  0  5.353 test.oss_pvinfo2

從結果中,我們可以看到 test.aaa test.heartbeat 表的 DIFFS 不為 ,那麼就是這兩個表不同步了。  

 

範例 2 :比較 test 資料庫同步是否一致,結果只顯示資料不一致的表

(新增 --replicate-check-only 引數即可)。  

pt-table-checksum  --nocheck-replication-filters --databases=test --re plicate=test.checksums --replicate-check-only --lock-wait-timeout=120   --host=192.168.3.135  --port 3306  --user=root --password=zhang

@123

結果如下:  

Differences on localhost.localdomain

TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDAR Y UPPER_BOUNDARY test.aaa 1 1 1    test.heartbeat 1 0 1

從結果可以看出,只顯示了兩個不同步的表。  

6.   pt-table-sync

功能介紹:高效同步 mysql 表的資料  

用法介紹:  

pt-table-sync [OPTION...] DSN [DSN...]

原理:總是在主上執行資料的更改,再同步到從上,不會直接更改成從的資料,在主上執行更改是基於主上現在的資料,不會更改主上的資料。注意使用之前先備份你的資料,避免造成資料的丟失 . 執行 execute 之前最好先換成 --print --dry-run 檢視一下會變更哪些資料。  

使用示例:  

範例 1 :同步 3.135 test 庫的 aaa 表到 192.168.3.92 ,在執行之前可以用 --execute 引數換成 --print 來檢視會變更什麼東西,後面那個主機必須是 master ,否則會報錯推出。  

pt-table-sync --execute --user=root --password=zhang@123 h=192.16

8.3.135,D=test,t=aaa h=192.168.3.92

範例 2 :將主的 test 資料庫同步到 192.168.3.92 ,使從上具有一樣的資料。  

pt-table-sync --execute --sync-to-master --user=root --password=zhan g@123  h=192.168.3.92 --database test

範例 3 :只同步指定的表  

pt-table-sync --execute --sync-to-master --user=root --password=zhan g@123  h=192.168.3.92 D=test,t=aaa

範例 4 :根據 pt-table-checksum 的結果進行資料同步  

pt-table-sync --execute --replicate test.checksums --user=root --pass word=zhang@123  h=192.168.3.135   

範例 5 :根據 pt-table-checksum 使從的資料和主的資料一致  

pt-table-sync --execute --replicate test.checksums --user=root --pass word=zhang@123  --sync-to-master h=192.168.3.92 D=test,t=aaa

 

( )   系統類工具  

1.  pt-diskstats

功能介紹:是一個對 GUN/LINUX 的互動式監控工具  

用法介紹:  

pt-diskstats [OPTION...] [FILES]

GUN/LINUX 列印磁碟 io 統計資訊,和 iostat 有點像,但是這個工具是互動式並且比 iostat 更詳細。可以分析從遠端機器收集的資料。  

使用示例:  

範例 1 :檢視本機所有的磁碟的狀態情況:  

pt-diskstats

範例 2 :只檢視本機 sda2 磁碟的狀態情況  

pt-diskstats --devices-regex sda2

 

2.  pt-fifo-split

功能介紹:模擬切割檔案並通過管道傳遞給先入先出佇列而不用真正的切割檔案  

用法介紹:  

pt-fifo-split [options] [FILE ...]

pt-fifo-split 讀取大檔案中的資料並列印到 fifo 檔案,每次達到指定行數就往 fifo 檔案中列印一個 EOF 字元,讀取完成以後,關閉掉 fifo 檔案並移走,然後重建 fifo 檔案,列印更多的行。這樣可以保證你每次讀取的時候都能讀取到制定的行數直到讀取完成。注意此工具只能工作在類 unix 作業系統。這個程式對大檔案的資料匯入資料庫非常有用,具體的可以檢視 http://www.mysqlperformanceblog.com/2008/07

/03/how - to - load - large - files - safely - into - innodb - with - load - data - infile/  

 

使用示例:範例 1 :一個每次讀取一百萬行記錄的範例:  

pt-fifo-split --lines 1000000 hugefile.txt while [ -e /tmp/pt-fifo-split ]; do cat /tmp/pt-fifo-split; done

範例 2 :一個每次讀取一百萬行,指定 fifo 檔案為 /tmp/my-fifo ,並使用 load data 命令匯入到 mysql 中:  

pt-fifo-split infile.txt --fifo /tmp/my-fifo --lines 1000000 while [ -e /tmp/my-fifo ]; do    mysql -e "set foreign_key_checks=0; set sql_log_bin=0; set uniq ue_checks=0; load data local infile '/tmp/my-fifo' into table load_t est fields terminated by '\t' lines terminated by '\n' (col1, col2);"    sleep 1; done

 

3.  pt-summary

功能介紹:友好地收集和顯示系統資訊概況,此工具並不是一個調優或者診斷工具,這個工具會產生一個很容易進行比較和傳送郵件的報告。  

用法介紹:  

pt-summary

原理:此工具會執行和多命令去收集系統狀態和配置資訊,先儲存到臨時目錄的檔案中去,然後執行一些 unix 命令對這些結果做格式化,最好是用 root 使用者或者有許可權的使用者執行此命令。  

使用示例:  

範例 1 :檢視本地系統資訊概況  

pt-summary

 

4.  pt-stalk

功能介紹:出現問題的時候收集 mysql 的用於診斷的資料  

用法介紹:  

pt-stalk [OPTIONS] [-- MYSQL OPTIONS]

pt-stalk 等待觸發條件觸發,然後收集資料幫助錯誤診斷,它被設計成使用 root 許可權執行的守護程式,因此你可以診斷那些你不能直接觀察的間歇性問題。預設的診斷觸發條件為 SHOW GLOBAL STATUS

也可以指定 processlist 為診斷觸發條件   ,使用 --function 引數指定。  

使用示例:範例 1 :指定診斷觸發條件為 status ,同時執行語句超過 20 的時候觸發,收集的資料存放在 /tmp/test 目錄下:  

pt-stalk  --function status --variable Threads_running --threshold 20

 --dest /tmp/test  -- -uroot -pzhang@123  -h192.168.3.135

範例 2 :指定診斷觸發條件為 processlist ,超過 20 個狀態為 statistics 觸發,收集的資料存放在 /tmp/test 目錄下:  

pt-stalk  --function processlist --variable State  --match statistics --t hreshold 20 --dest /tmp/test -- -uroot -pzhang@123  -h192.168.3.1

35

貼一下達到觸發條件以後收集的資訊:  

2012_06_04_17_31_49-df

2012_06_04_17_31_49-disk-space

2012_06_04_17_31_49-diskstats

2012_06_04_17_31_49-hostname

2012_06_04_17_31_49-innodbstatus1

2012_06_04_17_31_49-innodbstatus2

2012_06_04_17_31_49-interrupts

2012_06_04_17_31_49-log_error

2012_06_04_17_31_49-lsof

2012_06_04_17_31_49-meminfo

2012_06_04_17_31_49-mutex-status1

2012_06_04_17_31_49-mysqladmin

2012_06_04_17_31_49-netstat

2012_06_04_17_31_49-netstat_s

2012_06_04_17_31_49-opentables1

2012_06_04_17_31_49-opentables2

2012_06_04_17_31_49-output

2012_06_04_17_31_49-pmap

2012_06_04_17_31_49-processlist

2012_06_04_17_31_49-procstat

2012_06_04_17_31_49-procvmstat

2012_06_04_17_31_49-ps

2012_06_04_17_31_49-slabinfo

2012_06_04_17_31_49-sysctl

2012_06_04_17_31_49-top

2012_06_04_17_31_49-trigger

2012_06_04_17_31_49-variables

2012_06_04_17_31_49-vmstat

2012_06_04_17_31_49-vmstat-overall

 

( )   實用類工具  

1.   pt-archiver

功能介紹:將 mysql 資料庫中表的記錄歸檔到另外一個表或者檔案,也可以直接進行記錄的刪除操作。  

用法介紹:  

pt-archiver [OPTION...] --source DSN --where WHERE

這個工具只是歸檔舊的資料,不會對線上資料的 OLTP 查詢造成太大影響,你可以將資料插入另外一臺伺服器的其他表中,也可以寫入到一個檔案中,方便使用 load data infile 命令匯入資料。另外你還可以用它來執行 delete 操作。這個工具預設的會刪除源中的資料。使用的時候請注意。  

使用示例:  

範例 1 :將 192.168.3.135 上的 sanmao 庫的 oss_log id 小於 100000 的記錄轉移到 192.168.3.92 上的 sanmao 庫,並歸檔到 oss_log_archive_20120605.log 檔案中 :

pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root  --password=zhang@123 --dest h=192.168.3.92,D=sanmao,t=oss_log -

-file '/var/log/oss_log_archive_20120605.log' --where "id<=100000"  

--commit-each

範例 2 :將 192.168.3.135 上的 sanmao 庫的 oss_log 小於 160000 的記錄歸檔到 oss_log_archive_20120607.log 檔案中 :

pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root  --password=zhang@123 --file '/var/log/oss_log_archive_20120607.lo g' --where "id<=160000"  --commit-each

範例 3 :刪除 192.168.3.135 上的 sanmao 庫的 oss_log 表中 id 小於

167050 的記錄:  

pt-archiver --source h=192.168.3.135,D=sanmao,t=oss_log --user=root

 --password=zhang@123 --purge --where 'id<=167050'

注意:如果是字符集是 utf8 的話,需要在 my.cnf 中的 [client] 下面新增 default-character-set = utf8 ,否則匯出的檔案內容中文會亂碼。  

 

2.   pt-find

功能介紹:查詢 mysql 表並執行指定的命令,和 gnu find 命令類似。  

用法介紹:  

pt-find [OPTION...] [DATABASE...]

預設動作是列印資料庫名和表名  

使用示例:  

範例 1 :查詢 192.168.3.135 1 天以前建立的 InnoDB 的表  , 並列印。  

pt-find --ctime +1  --host=192.168.3.135 --engine InnoDB --user=roo t --password=zhang@123

範例 2 :查詢 192.168.3.135 1 天以前更改過的資料庫名字匹配 %hostsops% 的並且引擎為 MYISAM 的表,並將表的引擎更改為

InnoDB 引擎。  

pt-find --mtime +1 --dblike hostsops --engine MyISAM --host=192.1 68.3.135 --user=root --password=zhang@123  --exec "ALTER TABLE  %D.%N ENGINE=InnoDB"

範例 3 :查詢 192.168.3.135 aaa 庫和 zhang 庫中的空表,並刪除。  

pt-find --empty aaa zhang --host=192.168.3.135 --user=root --passw ord=zhang@123  --exec-plus "DROP TABLE %s"

範例 4 :查詢 192.168.3.135 中超過 100M 的表:  

pt-find --tablesize +100M --host=192.168.3.135 --user=root --passwo rd=zhang@123

 

3.   pt-kill

功能介紹:  

Kill 掉符合指定條件 mysql 語句  

用法介紹:  

pt-kill [OPTIONS]

假如沒有指定檔案的話 pt-kill 連線到 mysql 並通過 SHOW PROCESSLIST 找到指定的語句,反之 pt-kill 從包含 SHOW PROCESSLIST 結果的檔案中讀取 mysql 語句  

使用示例:範例 1 :查詢 192.168.3.135 伺服器執行時間超過 60s 的語句,並列印  

pt-kill --busy-time 60 --print --host=192.168.3.135 --user=root --pass word=zhang@123

範例 2 :查詢 192.168.3.135 伺服器執行時間超過 60s 的語句,並 kill

pt-kill --busy-time 60 --kill --host=192.168.3.135 --user=root --passw ord=zhang@123

範例 3 :從 proccesslist 檔案中查詢執行時間超過 60s 的語句  

mysql -uroot -pzhang@123 -h192.168.3.135 -e "show processlist" >  processlist.txt pt-kill --test-matching processlist.txt --busy-time 60 --print   

 

 





About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599(滿) 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-07-01 06:00 ~ 2019-07-31 24:00 在西安完成

● 最新修改時間:2019-07-01 06:00 ~ 2019-07-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2651466/,如需轉載,請註明出處,否則將追究法律責任。

相關文章