天天看点

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,如需转载请自行联系原作者