天天看點

更改mysql表引擎(shell)

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&gt;$logfile</code>

<code>    </code><code>exec</code> <code>2&gt;$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&lt;=$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 &gt;&gt; $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 ]] &amp;&amp; </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>&lt; $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,如需轉載請自行聯系原作者