背景
机器下架,需要将源db迁移到新机器上, db_xx 有固定前缀,按照号段号段分100个库, 需要将该100个
现在需要向办法将这 100个 db 迁移到 新机器上。
由于之前使用过mysqldump 备份过数据库,这里也想使用 mysqldump方法.
mysqldump 备份少数数据库:mysqldump -uusername -ppassword -hxxxxx --databases db1 db2 > db1db2.sqlmysqldump 备份少量数据库时,可以通过--databases 将要备份的db 列出来, 进行备份,但 如果使用这种方法,将会使 --databases 后的 列表很长, 而且 很容易漏写( 除非你用脚本罗列 拼接)
mysqldump出的数据,可以通过 source命令来恢复,使用方法:mysql> source db1db2.sql;该方法要求进入mysql , 当然还有其他方法。
要想使用脚本,需要解决下面的问题:1.需要备份的db名字列表2.能在shell管理台执行备份操作
show databases like ‘db%’ 来获取 需要备份 的 db列表,并导出到文件:mysql -hxxx -uxxx -pxxx -e "show databases like ‘db%‘" > db.txt
mysql -hxxx -uxxx -pxxx -e -e 参数能够在shell命令行 执行 一些 mysql语句,而不用进入mysql 客户端.
该脚本备份方法是,对每个db, mysqldump 后, 立即 导入到 目的db
import sys import commandswith 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"