percona-toolkit的安裝和使用

percona-toolkit簡介

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

  • 檢查masterslave數據的一致性

  • 有效地對記錄進行歸檔

  • 查找重複的索引

  • 對服務器信息進行彙總

  • 分析來自日誌和tcpdump的查詢

  • 當系統出問題的時候收集重要的系統信息

percona-toolkit工具包安裝

#wget https://www.percona.com/downloads/percona-toolkit/2.2.20/deb/percona-toolkit_2.2.20-1.tar.gz

#tar zxf percona-toolkit_2.2.20-1.tar.gz

#cd percona-toolkit-2.2.20/

#perl Makefile.PL  報錯如下:

[root@b0d81312ea9e percona-toolkit-2.2.20]# perl Makefile.PL 

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.

BEGIN failed--compilation aborted at Makefile.PL line 1.

該錯誤解決辦法:

#yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y

問題解決,下面我繼續安裝

#perl Makefile.PL 

#make && make install


安裝成功!

---------------------------------------------------------------------------------------------------------

下面我使用percona-toolkit中的pt-online-schema-change來給一個表增加字段

pt-online-schema-change用處:

ALTER tables without locking them.修改過程中不會造成讀寫阻塞,用於給大表添加字段。

實現原理:

如果表有外鍵,除非使用 –alter-foreign-keys-method 指定特定的值,否則工具不予執行。
1 創建一個和你要執行 alter 操作的表一樣的空表結構。
2 執行表結構修改,然後從原表中的數據到copy到 表結構修改後的表,
3 在原表上創建觸發器將 copy 數據的過程中,在原表的更新操作 更新到新表.
注意:如果表中已經定義了觸發器這個工具就不能工作了。
4 copy 完成以後,用rename table 新表代替原表,默認刪除原表。


# pt-online-schema-change --alter "ADD COLUMN num INT" D=sls,t=lisa

//給我mysql中的sls數據庫的lisa表增加一個num字段   D:指定數據庫  t:指定表

報錯如下:

Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/bin/pt-online-schema-change line 3727.

BEGIN failed--compilation aborted at /usr/local/bin/pt-online-schema-change line 3727.

該錯誤的意思是:系統沒有安裝Perl的Time組件

該錯誤解決辦法:

# yum -y install perl-Time*

解決問題後再次添加字段:

# pt-online-schema-change --alter "ADD COLUMN num INT" D=sls,t=lisa

再次報錯如下:

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

Exiting without altering `sls`.`lisa` because neither --dry-run nor --execute was specified.  Please read the tool's documentation carefully before using this tool.

解決辦法:

# pt-online-schema-change --alter "ADD COLUMN num INT" D=sls,t=lisa --user=sls --socket=/tmp/mysql.sock --password=122541 --execute

報錯如下:

You do not have the PROCESS privilege at /usr/local/bin/pt-online-schema-change line 4330.

錯誤原因:沒有給sls用戶授權

解決辦法

mysql>grant all privileges on *.* to sls@localhost identified by "122541";

mysql> flush privileges;

解決問題後再次添加字段:

# pt-online-schema-change --alter "ADD COLUMN num INT" D=sls,t=lisa --user=sls --socket=/tmp/mysql.sock --password=122541 --execute

報錯如下:

No slaves found.  See --recursion-method if host b0d81312ea9e 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 `sls`.`lisa`...

Creating new table...

Created new table sls._lisa_new OK.

Altering new table...

Altered `sls`.`_lisa_new` OK.

2016-12-24T08:54:54 Dropping new table...

2016-12-24T08:54:54 Dropped new table OK.

`sls`.`lisa` was not altered.

The new table `sls`.`_lisa_new` does not have a PRIMARY KEY or a unique index which is required for the DELETE trigger.


錯誤原因:沒有給lisa表創建主鍵

解決辦法:

mysql> alter table lisa add id int not null primary key auto_increment;

//id列必須是lisa表中不存在的列。存在會報錯。


解決問題後再次添加字段:

# pt-online-schema-change --alter "ADD COLUMN num INT" D=sls,t=lisa --user=sls --socket=/tmp/mysql.sock --password=122541 --execute

成功了!!!

No slaves found.  See --recursion-method if host b0d81312ea9e 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 `sls`.`lisa`...

Creating new table...

Created new table sls._lisa_new OK.

Altering new table...

Altered `sls`.`_lisa_new` OK.

2016-12-24T09:09:15 Creating triggers...

2016-12-24T09:09:15 Created triggers OK.

2016-12-24T09:09:15 Copying approximately 12 rows...

2016-12-24T09:09:15 Copied rows OK.

2016-12-24T09:09:15 Analyzing new table...

2016-12-24T09:09:15 Swapping tables...

2016-12-24T09:09:15 Swapped original and new tables OK.

2016-12-24T09:09:15 Dropping old table...

2016-12-24T09:09:15 Dropped old table `sls`.`_lisa_old` OK.

2016-12-24T09:09:15 Dropping triggers...

2016-12-24T09:09:15 Dropped triggers OK.

Successfully altered `sls`.`lisa`.

成功了!!!


wKiom1hePXuT69UnAAA805-HHP0113.png-wh_50


終於成功了!!我已經愛上我自己!!哈哈哈

















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章