Использование оболочки script для вставки данных в удаленную базу данных MYSQL

Я пытаюсь получить оболочку (bash) script, чтобы вставить строку в базу данных REMOTE, но у меня были некоторые проблемы: (

script предназначен для загрузки файла на сервер, получения URL, HASH и файла, подключения к удаленной базе данных mysql и вставки данных в существующую таблицу. Я начал работать до удаленной базы данных MYSQL.

Он выглядит следующим образом:

#!/bin/bash

zxw=randomtext
description=randomtext2

for file in "[email protected]"
 do
 echo -n *****
 ident= *****
 data= ****
 size=` ****
 hash=`****
mysql --host=randomhost --user=randomuser --password=randompass randomdb
insert into table (field1,field2,field3) values('http://www.site.com/$hash','$file','$size');
echo "done"
done

Я все время программировал в программировании, поэтому yeh: P

В любом случае, я добавил \, чтобы избежать скобок, когда получаю ошибки. Как сейчас, script работает нормально, пока не подключится к базе данных mysql. Он просто подключается к базе данных mysql и не выполняет команду insert (и я даже не знаю, будет ли команда вставки работать в bash).

PS: Я пробовал обе команды mysql из командной строки один за другим, и они работали, хотя я определил хэш/файл/размер и не имел экранирование "\".

В любом случае, что вы, ребята, думаете? Это то, что я пытаюсь сделать даже возможно? Если да, то как?

Любая помощь будет оценена:)

Ответы

Ответ 1

Оператор insert должен быть отправлен в mysql, а не в другой строке в оболочке script, поэтому вам нужно сделать его "здесь документом".

mysql --host=randomhost --user=randomuser --password=randompass randomdb << EOF
insert into table (field1,field2,field3) values('http://www.site.com/$hash','$file','$size');
EOF

<< EOF означает, что все перед следующей строкой, которая содержит только EOF (без пробелов в начале), является стандартным входом в программу.

Ответ 2

Это может быть не совсем то, что вы ищете, но это вариант.

Если вы хотите обойти раздражение фактически включая ваш запрос в sh script, вы можете сохранить запрос как .sql файл (полезно иногда, когда запрос ДЕЙСТВИТЕЛЬНО большой и сложный). Это можно сделать с помощью простого файла ввода-вывода на любом языке, который вы используете.

Затем вы можете просто включить в свой sh-скрипт что-то вроде:

mysql -u youruser -p yourpass -h remoteHost < query.sql &

Это называется исполнением пакетного режима. При желании вы можете включить амперсанд в конце, чтобы убедиться, что эта строка sh script не блокируется.

Также, если вы обеспокоены тем, что одни и те же данные вводятся несколько раз, а ваши rdbms становятся непоследовательными, вы должны исследовать транзакции MySql (фиксация, откат и т.д.).

Ответ 3

Не используйте raw SQL из bash; bash не имеет здравого смысла для предварительной очистки данных. Создайте файл CSV и загрузите его.