Импортировать вывод команды linux в таблицу MySQL - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь создать инвентаризацию моих экземпляров SQL в облаке Google и сохранить ее в отдельной базе данных MySQL, чтобы я мог включить ее в наш существующий локальный инвентарь.

Чтобы получить список экземпляров gcloud, я могу запустить следующее:

$> gcloud sql instances list

Который вернет что-то вроде:

NAME    DATABASE_VERSION  LOCATION        TIER         ADDRESS         STATUS
inst3   MYSQL_5_7         europe-west4-b  db-f1-micro  xx.xx.xx.xx     RUNNABLE
inst2   MYSQL_5_6         europe-west4-b  db-f1-micro  xx.xx.xx.xx     RUNNABLE
zandra  MYSQL_5_7         europe-west4-c  db-f1-micro  xx.xx.xx.xx     RUNNABLE

В скрипте bash, если я запускаю это как:

$> allinstances=`gcloud sql instances list`

чтобы установить переменную с именем allinstances, как мне вставить это в таблицу mysql с именем gcloudinv

Я пробовал это, ожидая ошибки:

$> mysql -uuser -ppassword gcloudinv < allinstances

Я знаю, что это не сработает, но то, что мне нужно было бы сделать между ними, чтобы преобразовать вывод в формат, с которым может работать mysql.

В идеале я буду ежедневно перезаписывать этот базовый инвентарь.

Спасибо

1 Ответ

0 голосов
/ 16 сентября 2018
# just craete table if does not exists query
query="CREATE TABLE IF NOT EXISTS 'gcloud' ( NAME varchar(255), DATABASE_VERSION  varchar(255), LOCATION varchar(255), TIER varchar(255), ADDRESS varchar(255), STATUS varchar(255) ); "
# convert the lines in format `string[spaces]string[spaces] and so on` into a `insert into 'gcloud' ( string , string, and so on );`
query+="$(  gcloud sql instances list | tail -n +2 | while read -r name database_location location tier address status; do echo "insert into 'gcloud' ( '$name', '$database_location', '$location', '$tier', '$address', '$status' );"; done )"
# execute the query
mysql -uuser -ppassword gcloudinv -e "$query"

Примечания:

  • tail -n +2 удаляет первую строку из ввода
  • Не используйте `` для получения вывода команды, она устарела и не можетбыть вложенным.Используйте $( .. )
  • Вы можете передать содержимое переменной в команду, используя HERE-строки, например: mysql -uuser -ppassword gcloudinv <<<"$allinstances"
  • После удаления первой строки это метра преобразования строкив оператор вставки MySQL.
...