我有一个以"shard_0" , "shard_1 ”, "shard_2"等forms存在的MySQL数据库。
我想添加另一个数据库服务器,并将偶数编号的碎片( "shard_0" , "shard_2" , "shard_4" ,…)移动到新机器上。
我怎么做? 有很多表格非常理想,我不必单独input每个表名,而是自动执行某些操作。
谢谢
你可以像这样转储表
#!/bin/bash DATABASE="YourDatabaseName" TNAME=shard_ TVAL="0" while [ $TVAL -lt 10 ] do mysqldump -u user -pPassword "$DATABASE" "$TNAME$TVAL" > "$TNAME$TVAL.sql" TVAL=$[$TVAL+2] done
你将最终得到文件shard_0.sql … shard_8.sql。 将它们转移到新的机器,但是你想要的东西,但像下面的代码应该工作
for FILE in `ls shard_*.sql` do scp "$FILE" user@newhost:"$FILE" done
然后将这些文件导入到新机器的数据库中
for FILE in `ls shard_*.sql` do mysql -u user -pPassword YourDataBaseName <"$FILE" done
你可以使用下面的shell脚本:
table="shard_" for i in `seq 0 10` ; do r=`expr $i % 2` if [ $r -eq 0 ] ; then table_name="$table$i" echo "Exporting Table: $table_name" mysqldump -u user -pPass database $table_name > "$table_name.sql" # Here, you can copy/transfer the file fi done
语法将根据您要使用的语言而有所不同,但由于您需要偶数表,因此您将遍历数据库中的表并添加条件语句(if)以使用模运算符检查名称(其余在这种情况下除以2)来确定它是否是偶数。 如果是偶数,请执行mysql dump,否则跳过。
在伪代码中:
然后在另一台服务器上,导入你的dumpfiles。