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

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

我有一个 MySQL 数据库,其中的表形式为"shard_0""shard_1“,,"shard_2"等。

我想添加另一台数据库服务器并将偶数分片(、、、...)移动到"shard_0"新机器。"shard_2""shard_4"

我该怎么做?有很多表格,所以理想情况下我不需要单独输入每个表格名称,而是自动执行一些操作。

谢谢

答案1

您可以像这样转储表格

#!/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

答案2

您可以使用以下 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

答案3

语法将根据您要使用的语言而有所不同,但由于您需要偶数表,因此您将遍历数据库中的表并添加条件语句 (if) 以使用模数运算符(除法的余数,在本例中为除以 2)检查名称,以确定它是否为偶数。如果是偶数,则执行 mysql 转储,否则跳过。

伪代码如下:

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

然后在另一台服务器上导入您的转储文件。

相关内容