天天看點

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

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

<code>一、腳本說明</code>

<code>1、需要備份2個庫(mysqltest1 mysqltest)</code>

<code>2、開啟4個程序</code>

<code>3、可以選擇進行備份不壓縮和備份壓縮</code>

<code>4、可以對不需要的資料庫剔除</code>

<code>5、backup使用者在資料庫裡的權限</code>

<code>grant </code><code>select</code><code>,reload,super,lock tables,create view,show view on *.* to </code><code>'backup'</code><code>@</code><code>'localhost'</code> <code>identified by </code><code>'backup'</code><code>;</code>

<code>flush privileges;</code>

<code>6、計劃任務</code>

<code>00 00 * * * </code><code>cd</code> <code>/opt/dbbak</code> <code>&amp;&amp; </code><code>bash</code> <code>mysqlback.sh mysqlbackupconf &gt;&gt; </code><code>/opt/dbbak/dbbackup</code><code>.log 2&gt;&amp;1</code>

<code>7、會删除三天前的binlog</code>

<code>8、mysql版本5.5的</code>

<code>9、debian7.4 (3.2.54-2 x86_64)</code>

<code>二、具體腳本如下</code>

<code>cat</code> <code>mysqlback.sh</code>

<code>#!/bin/bash</code>

<code>#--------------------------------------------------</code>

<code>#Author:jimmygong</code>

<code>#Email:[email protected]</code>

<code>#FileName:mysqlback.sh</code>

<code>#Function: </code>

<code>#Version:1.0 </code>

<code>#Created:2015-06-29</code>

<code>if</code> <code>[[ $</code><code># -ne 1 ]]</code>

<code>then</code>

<code>    </code><code>echo</code> <code>-e </code><code>"Usage:$0 mysqlbackupconf"</code>

<code>    </code><code>exit</code> <code>1</code>

<code>else</code>

<code>    </code><code>config=$1</code>

<code>    </code><code>if</code> <code>[[ ! -f $config ]]</code>

<code>    </code><code>then</code>

<code>        </code><code>echo</code> <code>-e </code><code>"Usage:$0 mysqlbackupconf"</code>

<code>        </code><code>exit</code> <code>1</code>

<code>    </code><code>fi</code>

<code>fi</code>

<code>source</code> <code>$config</code>

<code>dbname=</code><code>""</code>

<code>currdate=$(</code><code>date</code> <code>+%Y%m%d)</code>

<code>haveinnodb=0</code>

<code>localip=$(</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>function</code> <code>purgebinlog ()</code>

<code>{</code>

<code>    </code><code>purdate=`</code><code>date</code> <code>"+%F %T"</code> <code>--</code><code>date</code><code>=</code><code>'3 day ago'</code><code>`</code>

<code>    </code><code>pur=</code><code>"purge master logs before '$purdate'"</code>

<code>    </code><code>echo</code> <code>"$pur"</code><code>|mysql -u</code><code>"$dbuser"</code> <code>-p</code><code>"$dbpass"</code>

<code>}</code>

<code>function</code> <code>redirectlog ()</code>

<code>    </code><code>logfile=$logdir/${currdate}_${localip}_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>checkdestdir ()</code>

<code>    </code><code>destdir=$destdir/$currdate</code>

<code>    </code><code>if</code> <code>[[ ! -d $destdir ]]</code>

<code>        </code><code>mkdir</code> <code>-p $destdir</code>

<code>function</code> <code>runcommand ()</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>-sNe </code><code>"$comm"</code>

<code>function</code> <code>generateschema ()</code>

<code>    </code><code>i=0</code>

<code>    </code><code>result=`runcommand </code><code>'show databases'</code><code>`</code>

<code>    </code><code>for</code> <code>db </code><code>in</code> <code>$result</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>guessengine ()</code>

<code>    </code><code>innodb=`runcommand </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>haveinnodb=1</code>

<code>function</code> <code>dobackupsql ()</code>

<code>    </code><code>db=$1</code>

<code>    </code><code>destname=$destdir/$db.sql</code>

<code>    </code><code>if</code> <code>[[ $haveinnodb -</code><code>eq</code> <code>1 ]]</code>

<code>        </code><code>dumpcomm=</code><code>"mysqldump --opt -u$dbuser -p$dbpass --single-transaction --databases"</code>

<code>    </code><code>else</code>

<code>        </code><code>dumpcomm=</code><code>"mysqldump --opt -u$dbuser -p$dbpass --databases"</code>

<code>    </code><code>$dumpcomm $db &gt; $destname</code>

<code>function</code> <code>dobackupgzip ()</code>

<code>    </code><code>destname=$destdir/$db.sql.gz</code>

<code>    </code><code>$dumpcomm $db|</code><code>gzip</code> <code>&gt; $destname</code>

<code>function</code> <code>backup ()</code>

<code>    </code><code>actioncommand=$1</code>

<code>    </code><code>if</code> <code>[[ $commpress -</code><code>eq</code> <code>1 ]]</code>

<code>        </code><code>actioncommand=</code><code>"dobackupgzip"</code>

<code>        </code><code>actioncommand=</code><code>"dobackupsql"</code>

<code>    </code><code>echo</code> <code>-en </code><code>"`date`\tBACKUP\t$db\n"</code>    

<code>    </code><code>$actioncommand $db</code>

<code>function</code> <code>backupalldb ()</code>

<code>    </code><code>count=0</code>

<code>    </code><code>for</code> <code>db </code><code>in</code> <code>${dbname[@]}</code>

<code>        </code><code>backup $db &amp;</code>

<code>        </code><code>let</code> <code>count+=1</code>

<code>        </code><code>[[ $((count%$processnum)) -</code><code>eq</code> <code>0 ]] &amp;&amp; wait</code>

<code>    </code><code>wait</code>

<code>    </code><code>echo</code> <code>"all backup done"</code>

<code>purgebinlog</code>

<code>redirectlog</code>

<code>checkdestdir</code>

<code>generateschema</code>

<code>guessengine</code>

<code>runcommand </code><code>"flush logs"</code>

<code>backupalldb</code>

<code>exit</code> <code>0</code>

<code>三、具體配置資訊</code>

<code>cat</code> <code>mysqlbackupconf</code>

<code>dbuser=</code><code>"backup"</code>

<code>dbpass=</code><code>"backup"</code>

<code>exclude=</code><code>'mysql information_schema performance_schema'</code>

<code>destdir=</code><code>/opt/dbbak</code>

<code>logdir=</code><code>/opt/dbbak/log</code>

<code>commpress=1</code>

<code>processnum=4</code>

<code>四、備份後結果</code>

<code>1、[email protected]:~</code><code># ll /opt/dbbak/20150629/</code>

<code>-rw-r--r-- 1 root root 4443602410 Jun 29 19:18 mysqltest1.sql.gz</code>

<code>-rw-r--r-- 1 root root 4443601959 Jun 29 19:19 mysqltest.sql.gz</code>

<code>2、[email protected]:~</code><code># ll /opt/dbbak/log/</code>

<code>-rw-r--r-- 1 root root 109 Jun 29 19:19 20150629_10.131.172.202_log</code>

本文轉自 xdoujiang 51CTO部落格,原文連結:http://blog.51cto.com/7938217/1669168,如需轉載請自行聯系原作者