标签:令行 continue 文件 txt end lin 前缀 and sql语句
背景机器下架,需要将源db迁移到新机器上, db_xx 有固定前缀,按照号段号段分100个库, 需要将该100个
现在需要向办法将这 100个 db 迁移到 新机器上。
由于之前使用过mysqldump 备份过数据库,这里也想使用 mysqldump方法.
mysqldump 备份少数数据库:
mysqldump -uusername -ppassword -hxxxxx --databases db1 db2 > db1db2.sql
mysqldump 备份少量数据库时,可以通过--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 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"
标签:令行 continue 文件 txt end lin 前缀 and sql语句
原文地址:http://blog.51cto.com/searchcoding/2134574