1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<code>我的部落格已遷移到xdoujiang.com請去那邊和我交流</code>
<code>一、基礎環境</code>
<code>1、版本</code>
<code>cat</code> <code>/etc/redhat-release</code>
<code>CentOS release 6.6 (Final)</code>
<code>2、核心</code>
<code>uname</code> <code>-r</code>
<code>2.6.32-504.el6.x86_64</code>
<code>3、ip(eth0)</code>
<code>10.1.10.23</code>
<code>二、shell腳本函數說明</code>
<code>redirectlog </code><code>#記錄日志用的</code>
<code>checkengine </code><code>#檢查innodb是否支援及檢視預設引擎</code>
<code>generatedb </code><code>#導出需要的DB庫</code>
<code>generatetable </code><code>#導出需要更改引擎表到某個檔案</code>
<code>alterengine </code><code>#将某個檔案中的表進行引擎更改</code>
<code>三、</code><code>cat</code> <code>myisamtoinnodb.sh</code>
<code>#!/bin/bash</code>
<code>#--------------------------------------------------</code>
<code>#Author:jimmygong</code>
<code>#Email:[email protected]</code>
<code>#FileName:myisamtoinnodb.sh</code>
<code>#Function: </code>
<code>#Version:1.0 </code>
<code>#Created:2015-08-07</code>
<code>currdate=$(</code><code>date</code> <code>+%Y%m%d)</code>
<code>dates=`</code><code>date</code> <code>"+%s"</code><code>`</code>
<code>sleeptime=2</code>
<code>dbuser=</code><code>"test"</code>
<code>dbpass=</code><code>"123456"</code>
<code>dbport=</code><code>"3306"</code>
<code>dbip=$(</code><code>ifconfig</code> <code>eth0|</code><code>awk</code> <code>'/inet addr:/'</code><code>|</code><code>awk</code> <code>-F: </code><code>'{print $2}'</code><code>|</code><code>awk</code> <code>-F</code><code>" "</code> <code>'{print $1}'</code><code>)</code>
<code>logdir=</code><code>"/opt/myisamtoinnodb"</code>
<code>exclude=</code><code>"mysql information_schema"</code>
<code>function</code> <code>mysqlcmd ()</code>
<code>{</code>
<code> </code><code>comm</code><code>=$1</code>
<code> </code><code>mysql -u</code><code>"$dbuser"</code> <code>-p</code><code>"$dbpass"</code> <code>-h</code><code>"$dbip"</code> <code>-P</code><code>"$dbport"</code> <code>-sNe </code><code>"$comm"</code>
<code>}</code>
<code>function</code> <code>redirectlog ()</code>
<code> </code><code>logfile=$logdir/${currdate}_${dbip}_log</code>
<code> </code><code>mkdir</code> <code>-p $logdir</code>
<code> </code><code>exec</code> <code>1>$logfile</code>
<code> </code><code>exec</code> <code>2>$logfile</code>
<code>function</code> <code>checkengine ()</code>
<code> </code><code>defaultengine=`mysqlcmd </code><code>'show engines'</code><code>|</code><code>grep</code> <code>-i default|</code><code>awk</code> <code>'{print $1,$2}'</code><code>`</code>
<code> </code><code>echo</code> <code>"$defaultengine"</code>
<code> </code><code>innodb=`mysqlcmd </code><code>'show engines'</code><code>|</code><code>grep</code> <code>-i innodb|</code><code>grep</code> <code>-i </code><code>yes</code><code>`</code>
<code> </code><code>if</code> <code>[[ ! -z </code><code>"$innodb"</code> <code>]]</code>
<code> </code><code>then</code>
<code> </code><code>echo</code> <code>"innodb enabled"</code>
<code> </code><code>fi</code>
<code>function</code> <code>generatedb ()</code>
<code> </code><code>i=0</code>
<code> </code><code>dblist=`mysqlcmd </code><code>'show databases'</code><code>`</code>
<code> </code><code>for</code> <code>db </code><code>in</code> <code>$dblist</code>
<code> </code><code>do</code>
<code> </code><code>rv=`</code><code>echo</code> <code>$exclude|</code><code>grep</code> <code>-w -i $db`</code>
<code> </code><code>if</code> <code>[[ -n </code><code>"$rv"</code> <code>]]</code>
<code> </code><code>then</code>
<code> </code><code>continue</code><code>;</code>
<code> </code><code>fi</code>
<code> </code><code>dbname[i]=$db</code>
<code> </code><code>let</code> <code>i++</code>
<code> </code><code>done</code>
<code>function</code> <code>generatetable ()</code>
<code> </code><code>for</code> <code>db </code><code>in</code> <code>${dbname[@]}</code>
<code>do</code>
<code> </code><code>alltable=`mysqlcmd </code><code>"use $db;show tables"</code><code>|</code><code>wc</code> <code>-l`</code>
<code> </code><code>for</code> <code>((j=1;j<=$alltable;j++))</code>
<code> </code><code>table=`mysqlcmd </code><code>"use $db;show tables;"</code><code>|</code><code>sed</code> <code>-n $j</code><code>"p"</code><code>`</code>
<code> </code><code>for</code> <code>tablename </code><code>in</code> <code>$table</code>
<code> </code><code>do</code>
<code> </code><code>engine=`mysqlcmd </code><code>"use $db;show create table $tablename;"</code><code>|</code><code>grep</code> <code>-w -i </code><code>"engine=myisam"</code><code>`</code>
<code> </code><code>if</code> <code>[[ $? = 0 ]]</code>
<code> </code><code>then</code>
<code> </code><code>echo</code> <code>$db $table >> $logdir</code><code>/table</code><code>.$dates</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code>done</code>
<code>function</code> <code>alterengine ()</code>
<code> </code><code>[[ ! -e $logdir</code><code>/table</code><code>.$dates ]] && </code><code>exit</code> <code>1</code>
<code> </code><code>while</code> <code>read</code> <code>db table </code>
<code> </code><code>mysqlcmd </code><code>"alter table $db.$table engine=innodb;"</code>
<code> </code><code>sleep</code> <code>$sleeptime</code>
<code> </code><code>echo</code> <code>$db $table $(</code><code>date</code> <code>+%F:%T)</code>
<code> </code><code>done</code> <code>< $logdir</code><code>/table</code><code>.$dates</code>
<code>redirectlog</code>
<code>checkengine</code>
<code>generatedb</code>
<code>generatetable</code>
<code>alterengine</code>
<code>exit</code> <code>0</code>
本文轉自 xdoujiang 51CTO部落格,原文連結:http://blog.51cto.com/7938217/1682734,如需轉載請自行聯系原作者