mysql скрипт копирования базы данных с использованием bash - PullRequest
1 голос
/ 19 марта 2020

Я хочу создать скрипт, который копирует все таблицы в базе данных в другую базу данных.

Очевидно, я нашел это быстрее, чем dump & restore с помощью mysqldump.

Сценарий ниже работает нормально, но таблицы копируются по порядку. (только один идентификатор процесса)

Чтобы работать быстрее, я хочу, чтобы все таблицы копировались одновременно.

Справка.

#!/bin/bash
HOSTNAME='127.0.0.1'
QUERY1="select concat('create table ', ' $1','.',table_name , ' like ' , '$2','.',table_name,';') as '' from information_schema.tables where table_schema = '$2'"
QUERY2="select concat('insert into ', ' $1','.',table_name , ' select * from ' , '$2','.',table_name, ';') as '' from information_schema.tables where table_schema = '$2'"
Q1=`mysql -uaccount -ppass -h$HOSTNAME -e "$QUERY1"`
Q11=`mysql -uaccount -ppass -h$HOSTNAME -e "$QUERY2"`

C1=`mysql -uaccount-ppass -h$HOSTNAME -e "CREATE DATABASE $1"`

Q2=`mysql --default-character-set=utf8 -v -t -uaccount-ppass -h$HOSTNAME -e "$Q1"`
Q22=`mysql --default-character-set=utf8 -v -t -uaccount-ppass -h$HOSTNAME -e "$Q11"`


sh тест. sh newdb_01 olddb_01

1 Ответ

2 голосов
/ 19 марта 2020

Вы пробовали параллельно (https://www.gnu.org/software/parallel/)

Подход, который я предлагаю, состоит в том, чтобы сначала получить список имен таблиц и создать базу данных.

Затем передать имена таблиц, параллельных вашему сценарию. Некоторые примеры здесь -> https://www.freecodecamp.org/news/how-to-supercharge-your-bash-workflows-with-gnu-parallel-53aab0aea141/

В вашем случае это должно работать так: -

cat table_name_list | parallel -j10 test.sh args...

Надеюсь, это поможет. Не стесняйтесь исследовать параллель для вашего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...