1. 程式人生 > >mysqldump 多 個 db

mysqldump 多 個 db

with 方法 操作 strip err import 進行 urn hds

背景

機器下架,需要將源db遷移到新機器上, db_xx 有固定前綴,按照號段號段分100個庫, 需要將該100個

現在需要向辦法將這 100個 db 遷移到 新機器上。

由於之前使用過mysqldump 備份過數據庫,這裏也想使用 mysqldump方法.

1.mysqldump 備份 簡介

mysqldump 備份少數數據庫:
mysqldump -uusername -ppassword  -hxxxxx --databases db1 db2 > db1db2.sql

mysqldump 備份少量數據庫時,可以通過--databases 將要備份的db 列出來, 進行備份,但 如果使用這種方法,將會使 --databases 後的 列表很長, 而且 很容易漏寫( 除非你用腳本羅列 拼接)

2.source 恢復簡介

mysqldump出的數據,可以通過  source命令來恢復,使用方法:
mysql> source db1db2.sql;
該方法要求進入mysql , 當然還有其他方法。

3.思考使用腳本批量備份

要想使用腳本,需要解決下面的問題:
1.需要備份的db名字列表
2.能在shell管理臺執行備份操作

3.1 獲取db列表

show databases like ‘db%’ 來獲取 需要備份 的 db列表,並導出到文件:
mysql -hxxx -uxxx -pxxx -e "show databases like ‘db%‘"  > db.txt

3.2 shell側執行備份

mysql -hxxx -uxxx -pxxx -e 
-e 參數能夠在shell命令行 執行 一些 mysql語句,而不用進入mysql 客戶端.

4. 腳本備份

該腳本備份方法是,對每個db, mysqldump 後, 立即 導入到 目的db
import sys 
import commands
with open(‘db.txt‘, ‘r‘) as f:

    for line in f.readlines():
        line = line.strip()
        if(line == ""):
            continue;

        print "dump: %s ..." % line

        cmd = ‘mysqldump -hxxxx -uxxxx -pxxx -B ‘ + line + ‘ > ‘ + line + ‘.sql‘
        (status, result) = commands.getstatusoutput(cmd)

        print "dump: %s ... return %d:%s" % (line,status,result)
        if status != 0:
            print "dump: %s ... error " % line
            exit(-1)

        sourc_cmd = "mysql -hdstip -udstuser -pdstcode -e ‘source " + line + ".sql‘"
        (status, result) = commands.getstatusoutput(sourc_cmd)

        print "source: %s, return %d:%s" % (sourc_cmd, status, result)
        if status != 0:
            print "source: %s ... error " % line
            exit(-1)

print "end"

mysqldump 多 個 db