天天看點

MySQL分庫,分表備份的思路和方法

分庫備份的意義是什麼 ? 

  有時一個企業的資料庫裡面有多個庫,例如(www,bbs,cms),但是出問題時可能是某一個庫,如果在備份時候把所有的庫備份成一個資料檔案的話,恢複資料就比較麻煩。

分庫分表的缺點:檔案多,碎

1,備份一個完整全備,再做一個分庫分表的備份

2,腳本批量服務多個SQL檔案

3,資料量太大不合适以上方法

#以下是完整的分庫,分表的備份腳本和思路

分庫:

1)程式設計思想

<code> </code> 

<code>mysqldump -uroot -p db1 &gt;db1.sql</code>

<code>mysqldump -uroot -p db2 &gt;db2.sql</code>

2)拿到庫名,清單

<code>mysql -uroot -p123456 -e </code><code>"show databases"</code><code>|</code>

<code> </code><code>grep</code> <code>-Evi </code><code>"database|information_schema|performance_schema"</code> <code>|</code>

<code> </code><code>sed</code> <code>-r 's</code><code>#^([a-z].*$)#mysqldump -uroot -p123456 --events -B \1 |</code>

<code> </code><code>gzip</code> <code>&gt;</code><code>/root/back/</code><code>\1.sql.gz</code><code>#g'|sh</code>

3)循環db,dump

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

<code>#Date</code>

<code>#by</code>

<code>#Desc</code>

<code>MYUSER=root</code>

<code>MYPASSWD=123456</code>

<code>BACKDIR=</code><code>"/root/back"</code>

<code>MYHOST=</code><code>'127.0.0.1'</code>

<code>MYCMD=</code><code>"mysql -u$MYUSER -p$MYPASSWD  -h$MYHOST"</code>

<code>MYDUMP=</code><code>"mysqldump -u$MYUSER -p$MYPASSWD  -h$MYHOST -x -E -B -F -R "</code>

<code>DBLIST=`$MYCMD   -e </code><code>"show databases;"</code><code>|</code><code>grep</code> <code>-Evi </code><code>"database|_schema|mysql"</code><code>`</code>

<code>[ ! -d $BACKDIR ] &amp;&amp; </code><code>mkdir</code> <code>$BACKDIR</code>

<code>for</code> <code>dbname </code><code>in</code> <code>$DBLIST </code>

<code>do</code>

<code>    </code><code>$MYDUMP $dbname|</code><code>gzip</code> <code>&gt; $BACKDIR/${dbname}_$(</code><code>date</code> <code>+%F).sql.gz </code>

<code>done</code>

分表:

<code>MYDUMP=</code><code>"mysqldump -u$MYUSER -p$MYPASSWD  -h$MYHOST -x "</code>

<code>do</code> 

<code>    </code><code>TLIST=`$MYCMD -e </code><code>"show tables from $dbname;"</code> <code>|</code><code>sed</code> <code>1d`</code>

<code>    </code><code>for</code> <code>tname </code><code>in</code> <code>$TLIST</code>

<code>    </code><code>do</code>

<code>      </code><code>mkdir</code> <code>-p $BACKDIR/$dbname</code>

<code>      </code><code>$MYDUMP $dbname $tname|</code><code>gzip</code> <code>&gt; $BACKDIR/${dbname}/${dbname}_${tname}_$(</code><code>date</code> <code>+%F).sql.gz </code>

<code>    </code><code>done</code>

<code></code>

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