Как автоматически перемещать определенные таблицы MySQL с одной машины на другую?
У меня есть база данных MySQL с таблицами в виде "shard_0"
, "shard_1
", "shard_2"
, так далее.
Я хочу добавить еще один сервер БД и переместить четные осколки ("shard_0"
, "shard_2"
, "shard_4"
...) к новой машине.
Как я могу это сделать? Существует много таблиц, поэтому в идеале мне не нужно было бы печатать каждое имя таблицы по отдельности, а делать что-то автоматически.
Спасибо
3 ответа
Вы можете сбросить таблицы, как это
#!/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
Вы можете использовать следующий скрипт:
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, иначе пропустите.
в псевдокоде:
- для каждой таблицы в базе данных
- разобрать номер по названию таблицы
- если%2 == 0 # %2 равно "модуль 2 равен 0"; "Модуль иногда называют" мод "
- {mysqldump [options];}
- конец, если
- если%2 == 0 # %2 равно "модуль 2 равен 0"; "Модуль иногда называют" мод "
- следующий
- rsync / scp на другой сервер
Затем на другом сервере импортируйте свои файлы дампа.