成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQLDBA必備工具使用的6大錦囊妙計

老張我呢不僅是個金庸迷,還是個三國迷。就是喜歡看后期蜀國諸葛亮與魏國司馬懿之間的斗智斗勇。各種錦囊妙計的使用,堪稱經(jīng)典。針對管理MySQL數(shù)據(jù)庫這塊,張老師也有很多妙計,今后一一給大家介紹。說回三國,我個人更傾向于蜀國可以統(tǒng)一,但事與愿違,很可惜,最終還是魏國司馬炎統(tǒng)一了天下。有人把蜀國失敗的原因歸結(jié)于一個扶不起的劉嬋,也有人把原因歸結(jié)于天命,更有甚者說是"臥龍鳳雛得其一"才可得天下,而劉備兩人兼得了。現(xiàn)在聽聽很可笑,其實任何人的命運還都是掌握在自己手中的。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),香坊企業(yè)網(wǎng)站建設(shè),香坊品牌網(wǎng)站建設(shè),網(wǎng)站定制,香坊網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,香坊網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

我們要學(xué)會盡人事知天命,努力去做好每一件事兒,不放過一個小小的細(xì)節(jié)。尤其是從事數(shù)據(jù)庫這個領(lǐng)域,更要細(xì)致細(xì)心。曾經(jīng)我的一位老師跟我說過,你要學(xué)會把你從事的工作,融入到自己的血液當(dāng)中去。只有真正地愛上它,才能去用心去研究它!

每次老張寫博之前,都喜歡說一些心靈雞湯,不愛聽的老鐵們,也希望你們見諒!其實就是希望大家能夠用心去做每一件事兒,不管在哪個行業(yè),你早晚會成功。

老張的 MySQL 網(wǎng)絡(luò)課程部分也在51CTO學(xué)院正式上線了,想學(xué)習(xí)的同學(xué)們可以去訪問

有任何問題都可以及時跟老師溝通。

今兒給大家分享一篇,關(guān)于MySQL DBA必備工具的使用。可以方便幫助我們管理我們的數(shù)據(jù)庫,讓我們的工作更高效。

這款工具是 MySQL 一個重要分支 percona 的,名稱叫做 percona-toolkit(一把鋒利的瑞士×××),它呢是一組命令的集合。今兒給大家介紹幾個我們在生產(chǎn)環(huán)境中最長用到的。

工具包的下載地址:https://www.percona.com/downloads/percona-toolkit/LATEST/

安裝過程很簡單,先解壓:

tar -zxvf percona-toolkit-3.0.3_x86_64.tar.gz

由于是二進(jìn)制的包,解壓完可以直接進(jìn)到percona-toolkit-3.0.3/bin目錄下使用。

錦囊妙計一:

pt-online-schema-change

功能可以在線整理表結(jié)構(gòu),收集碎片,給大表添加字段和索引。避免出現(xiàn)鎖表導(dǎo)致阻塞讀寫的操作。針對 MySQL 5.7 版本,就可以不需要使用這個命令,直接在線 online DDL 就可以了。

展現(xiàn)過程如下:

由于是測試環(huán)境,就不創(chuàng)建一張數(shù)據(jù)量特大的表,主要讓大家理解這個過程。

這是表里面數(shù)據(jù)的情況和表結(jié)構(gòu)

mysql> select count(*) from su;
+----------+
| count(*) |
+----------+
|   100000 | 
+----------+
1 row in set (0.03 sec)
mysql> desc su;
+-------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type             | Null | Key | Default           | Extra                       |
+-------+------------------+------+-----+-------------------+-----------------------------+
| id    | int(10) unsigned | NO   | PRI | NULL              | auto_increment              | 
| c1    | int(11)          | NO   |     | 0                 |                             | 
| c2    | int(11)          | NO   |     | 0                 |                             | 
| c3    | int(11)          | NO   |     | 0                 |                             | 
| c4    | int(11)          | NO   |     | 0                 |                             | 
| c5    | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| c6    | varchar(200)     | NO   |     |                   |                             |

在線增加字段的過程:

[root@node3 bin]# ./pt-online-schema-change --user=root --password=root123 
--host=localhost  --alter="ADD COLUMN city_id INT" D=test,t=su --execute

No slaves found.  See --recursion-method if host node3 has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
  analyze_table, 10, 1
  copy_rows, 10, 0.25
  create_triggers, 10, 1
  drop_triggers, 10, 1
  swap_tables, 10, 1
  update_foreign_keys, 10, 1
Altering `test`.`su`...
Creating new table...
Created new table test._su_new OK.
Altering new table...
Altered `test`.`_su_new` OK.
2017-08-10T14:53:59 Creating triggers...
2017-08-10T14:53:59 Created triggers OK.
2017-08-10T14:53:59 Copying approximately 100163 rows...
2017-08-10T14:54:00 Copied rows OK.
2017-08-10T14:54:00 Analyzing new table...
2017-08-10T14:54:00 Swapping tables...
2017-08-10T14:54:00 Swapped original and new tables OK.
2017-08-10T14:54:00 Dropping old table...
2017-08-10T14:54:00 Dropped old table `test`.`_su_old` OK.
2017-08-10T14:54:00 Dropping triggers...
2017-08-10T14:54:00 Dropped triggers OK.
Successfully altered `test`.`su`.

查看結(jié)果新增了一個 city_id 的字段:

mysql> desc su;
+---------+------------------+------+-----+-------------------+-----------------------------+
| Field   | Type             | Null | Key | Default           | Extra                       |
+---------+------------------+------+-----+-------------------+-----------------------------+
| id      | int(10) unsigned | NO   | PRI | NULL              | auto_increment              | 
| c1      | int(11)          | NO   |     | 0                 |                             | 
| c2      | int(11)          | NO   |     | 0                 |                             | 
| c3      | int(11)          | NO   |     | 0                 |                             | 
| c4      | int(11)          | NO   |     | 0                 |                             | 
| c5      | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| c6      | varchar(200)     | NO   |     |                   |                             | 
| city_id | int(11)          | YES  |     | NULL              |                             | 
+---------+------------------+------+-----+-------------------+-----------------------------+

錦囊妙計二:

pt-query-digest

功能:現(xiàn)在捕獲線上TOP 10 慢 sql 語句。

大家都知道數(shù)據(jù)庫大多數(shù)的性能問題是 sql 語句造成的,所以我們要抓住它們這些犯罪分子。及時做相關(guān)的優(yōu)化處理。

展現(xiàn)過程如下:

可以根據(jù)時間間隔,來采樣慢 sql 語句。since 是可以調(diào)整的 sql 語句

[root@node3 bin]# ./pt-query-digest --since=24h /data/mysql/slow.log > 1.log

查看 sql 報告,總結(jié)慢語句有哪些,并可以看針對時間的消耗。

如下只是部分報告過程

cat 1.log
# Profile
# Rank Query ID           Response time Calls R/Call  V/M   Item
# ==== ================== ============= ===== ======= ===== ==============
#    1 0x040ADBE3A1EED0A2 16.8901 87.2%     1 16.8901  0.00 CALL insert_su
#    2 0x8E44F4ED46297D4C  1.3013  6.7%     3  0.4338  0.18 INSERT SELECT test._su_new test.su
#    3 0x12E7CAFEA3145EEF  0.7431  3.8%     1  0.7431  0.00 DELETE su
# MISC 0xMISC              0.4434  2.3%     3  0.1478   0.0  <3ITEMS>

# Query 1: 0 QPS, 0x concurrency, ID 0x040ADBE3A1EED0A2 at byte 19060 ____
# Scores: V/M = 0.00
# Time range: all events occurred at 2017-08-02 12:12:07
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count          2       1
# Exec time     47     18s     18s     18s     18s     18s       0     18s
# Lock time      0   103us   103us   103us   103us   103us       0   103us
# Rows sent      0       0       0       0       0       0       0       0
# Rows examine   0       0       0       0       0       0       0       0
# Query size     0      21      21      21      21      21       0      21
# String:
# Databases    test
# Hosts        localhost
# Users        root
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s
#  10s+  ################################################################
call insert_su(50000)\G

可以看到報告中,列舉出了一些sql語句響應(yīng)時間占比情況,和sql語句的執(zhí)行時間情況。方便我們可以很直觀的觀察哪些語句有問題。(這里只列舉了一條sql)

錦囊妙計三:

pt-heartbeat

功能監(jiān)控主從延遲。監(jiān)控從庫落后主庫大概多少時間。

環(huán)境介紹:192.168.56.132主庫,192.168.56.133從庫

操作如下:

在主庫上執(zhí)行:

[root@node3 bin]# ./pt-heartbeat --database test --update 
--create-table --daemonize -uroot -proot123

test為我監(jiān)控同步的庫,在該庫下創(chuàng)建一張監(jiān)控表heartbeat,后臺進(jìn)程會時時更新這張表。

在從庫上執(zhí)行監(jiān)控主從同步延遲時間的語句:

master-server-id是主庫的server-id, -h(主庫ip)

[root@node4 bin]# ./pt-heartbeat --master-server-id=1323306
--monitor --database test  -uzs -p123456 -h 192.168.56.132
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 ]

時間是0s,目前沒有延遲的出現(xiàn)。

錦囊妙計四:

pt-table-checksum

功能檢查主從復(fù)制一致性

原理:在主上執(zhí)行檢查語句去檢查 mysql主從復(fù)制的一致性,生成 replace 語句,然后通過復(fù)制傳遞到從庫,再通過update 更新 master_src 的值。最后通過檢測從上 this_src 和 master_src 的
值從而判斷復(fù)制是否一致。

比較test庫的差異情況,在主庫上面執(zhí)行:

[root@node3 bin]# ./pt-table-checksum --no-check-binlog-format --nocheck-replication-filters
 --databases=test --replicate=test.checksums --host=192.168.56.132 -uzs -p123456
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
08-10T16:01:02      0      0        1       1       0   0.013 test.heartbeat
08-10T16:01:02      0      0        0       1       0   0.015 test.su
08-10T16:01:02      0      0        0       1       0   0.011 test.t

可見diff都為0,證明主從的test庫沒有差異情況。

比較test庫哪些表有差異(需要添加replicate-check-only),在主庫上面執(zhí)行:

[root@node3 bin]# ./pt-table-checksum --no-check-binlog-format 
--nocheck-replication-filters --databases=test --replicate=test.checksums  
--replicate-check-only  --host=192.168.56.132 -uzs -p123456
Differences on node4
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
test.t 1 1 1

可見test庫下面t這張表主從數(shù)據(jù)不一致。

錦囊妙計五:

pt-slave-restart

功能:監(jiān)控主從錯誤,并嘗試重啟MySQL主從

注意事項:跳過錯誤這個命令,解決從庫多數(shù)據(jù)的現(xiàn)象(錯誤代碼1062)。如果從庫少數(shù)據(jù),還跳過錯誤,就不能從根兒上解決主從同步的問題了(錯誤代碼1032),就需要先找到缺少的數(shù)據(jù)是什么了,如果缺少的特別多,建議重新搭建主從環(huán)境。

從庫出現(xiàn)1062的錯誤:

Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
Last_Error: Could not execute Write_rows event on table test.t; 
Duplicate entry '1' for key 'PRIMARY', 
Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; 
the event's master log mysql-bin.000006, end_log_pos 757482

需要在從庫上面執(zhí)行:

[root@node4 bin]# ./pt-slave-restart -uroot -proot123 --error-numbers=1062
2017-08-10T16:28:12 p=...,u=root node4-relay-bin.000002      751437 1062

跳過錯誤之后,檢查主從結(jié)果:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

同步狀態(tài)又恢復(fù)一致了。

錦囊妙計六:

pt-ioprofile

功能:方便定位IO問題,可通過IO吞吐量來定位。

[root@node3 bin]# ./pt-ioprofile 
Thu Aug 10 16:33:47 CST 2017
Tracing process ID 3907
     total       read     pwrite      write      fsync filename
 13.949355   0.839006   0.000000   0.286556  12.823793 /data/mysql/mysql-bin.000006
  7.454844   0.000000   2.913702   0.000000   4.541142 /data/mysql/ib_logfile0
  0.000193   0.000000   0.000000   0.000193   0.000000 /data/mysql/slow.log
  
read:從文件中讀出數(shù)據(jù)。要讀取的文件用文件描述符標(biāo)識,數(shù)據(jù)讀入一個事先定義好的緩沖區(qū)。

write:把緩沖區(qū)的數(shù)據(jù)寫入文件中。

pread:由于lseek和read調(diào)用之間,內(nèi)核可能會臨時掛起進(jìn)程,所以對同步問題造成了問題,
調(diào)用pread相當(dāng)于順序調(diào)用了lseek和read,這兩個操作相當(dāng)于一個捆綁的原子操作。

pwrite:由于lseek和write調(diào)用之間,內(nèi)核可能會臨時掛起進(jìn)程,所以對同步問題造成了問題,
調(diào)用pwrite相當(dāng)于順序調(diào)用了lseek 和write,這兩個操作相當(dāng)于一個捆綁的原子操作。

fsync:確保文件所有已修改的內(nèi)容已經(jīng)正確同步到硬盤上,該調(diào)用會阻塞等待直到設(shè)備報告IO完成。

filename:與磁盤交互的文件名稱

通過這個報告我們可以看到,哪個文件占用IO的時間比較多,跟磁盤交互最為繁忙,便于鎖定IO問題。

因為這個工具集命令很多,今兒先給大家介紹這些比較常用的,其他的一些大家感興趣可以私下去研究下。

官方地址:https://www.percona.com/doc/percona-toolkit/LATEST/index.html

最后老張希望大家都可以成為"臥龍或者鳳雛",得你們其中任何的一位,公司的數(shù)據(jù)庫無憂矣?。?/strong>

網(wǎng)站欄目:MySQLDBA必備工具使用的6大錦囊妙計
標(biāo)題路徑:http://jinyejixie.com/article0/pppoio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、網(wǎng)站內(nèi)鏈軟件開發(fā)、小程序開發(fā)網(wǎng)站設(shè)計公司、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

谢通门县| 武川县| 张家川| 平昌县| 中超| 和田县| 安阳市| 都江堰市| 连南| 德保县| 巫山县| 汝南县| 汝南县| 建昌县| 太原市| 师宗县| 郓城县| 托里县| 潞西市| 东阳市| 盐津县| 平安县| 焦作市| 共和县| 木兰县| 日照市| 贵定县| 抚宁县| 乳源| 闸北区| 富裕县| 瑞昌市| 榆社县| 上栗县| 广丰县| 昆山市| 法库县| 常熟市| 绥滨县| 内丘县| 罗甸县|