Назад | Перейти на главную страницу

Как автоматически перемещать определенные таблицы MySQL с одной машины на другую?

У меня есть база данных MySQL с таблицами в виде "shard_0", "shard_1", "shard_2", и т.д.

Я хочу добавить еще один сервер БД и переместить четные сегменты ("shard_0", "shard_2", "shard_4", ...) на новую машину.

Как я могу это сделать? Таблиц много, поэтому в идеале мне не нужно было бы вводить имя каждой таблицы отдельно, а делать что-то автоматически.

Спасибо

Синтаксис будет варьироваться в зависимости от того, какой язык вы хотите использовать, но поскольку вам нужны четные таблицы, вы будете перебирать таблицы в базе данных и добавлять условный оператор (if) для проверки имени с помощью оператора модуля (остаток деления, в данном случае деления на 2), чтобы определить, четное ли это число. Если он четный, сделайте дамп mysql, иначе пропустите.

в псевдокоде:

  • для каждой таблицы в базе данных
  • разобрать число из имени таблицы
    • если% 2 == 0 #% 2 - "модуль 2 равен 0"; "модуль упругости" иногда называют "модулем"
      • {mysqldump [параметры];}
    • конец, если
  • следующий
  • rsync / scp на другой сервер

Затем на другом сервере импортируйте файлы дампа.

Вы можете использовать следующий сценарий оболочки:

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

Вы можете сбросить таблицы вот так

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