shell腳本:<批量檢查並更改MySQL數據庫表的存儲引擎>
Work Description: 在搭建完Percona XtraDB Cluster(一種MySQL架構,簡稱PXC),需要把old mysql中的數據導入到new mysql中,但PXC只支持InnoDB表,非InnoDB表無法同步到PXC的其它節點上,因此我需要批量統一表的引擎。
Event Description:
1.需要寫個shell腳本,完成兩個目的:<1>查詢(ck)ENGINE的狀態 <2>更改(al)引擎狀態
2.需要在管理機上,訪問遠程MySQL
<方式:mysql -uadmin -h10.10.10.12 -P3001 -ppassword -e"sql_cmd">
3.mysql存儲引擎的查看方式選擇:
<1>:select ENGINE from information_schema.TABLES where TABLE_SCHEMA='DB_NAME' and TABLE_NAME=TB_NAME};
<2>:SHOW CREATE TABLE tb_name;
4.達到目的:
<1>:希望執行命令之後,屏幕上能顯示<庫名、表名、以及引擎狀態> 方便直接浏覽
<2>:表數量很大,希望統計下各引擎表數量並輸出,以便分析al時產生的影響
<3>:不希望每次al前都執行ck,也不希望ck工程中就al了,我想ck 和al 可以在一起用也可以單獨用,這樣就靈活了
<4>:考慮過寫個ip列表的文件,批量對多台機器ck(不太適用我的環境,還要每次vim文件),我希望對單台server 進行ck,這樣會比較靈活
<5>:我只ck非系統庫表(系統庫:mysql,test,information_schema,performance_schema)
<6>:執行sh ck_engine_status.sh 後面所跟參數不夠,會打印幫助信息
5.腳本check_engine.sh見附件或者鏈接地址:http://yunpan.cn/cLeVbLN9AnItQ (提取碼:08d7)
Script Execution And Description:
Execution:
$sh ck_engine_status.sh 10.10.10.12 3001 ck'#查看ENGINE STATUS
$sh ck_engine_status.sh 10.10.10.12 3001 al'#更改ENGINE STATUS
Description:
1.腳本中需要靈活改動的變量:<用戶:USER 密碼:PASS> 具有1.遠程訪問權限
2.select權限 <自己定義:check_log文件路徑>
2.執行ck,屏幕只會列出engine狀態,不會做al
3.ck完成之後,自動將MyISAM表以:db_name.tb_name格式寫入:check_log中<只涉及MyISAM和InnoDB> <ck前會自動刪check_log>
4.al會讀取check_log中的MyISAM表,並做更改。<al後會自動刪check_log,避免多次al><al時會先判斷log文件是否存在,不存在會報錯提示>
5.可以手動將特定的表寫入check_log中,並執行al
相關截圖:
幫助信息
ck結果
al結果