如何自动将特定的MySQL表从一台机器移动到另一台机器?

我有一个以"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,否则跳过。

在伪代码中:

  • 为数据库中的每个表
  • 从表名parsing出数字
    • 如果%2 == 0#%2是“模数2等于0”; “模数有时被称为”mod“
      • {mysqldump [options];}
    • 万一
  • 下一个
  • rsync / scp到其他服务器

然后在另一台服务器上,导入你的dumpfiles。