Подтвердить что ты не робот

Как передать запросы mysql из bash

Я пытаюсь создать bash script, который создает пользователя и базу данных mysql, но я не могу найти способ передать sql в mysql, я пытаюсь в этом формате:

mysql < echo "query"

Но это не работает, см. пример ниже:

mysql --host=localhost --user=user --password=password < echo "CREATE USER 'testuser'@'localhost' IDENTIFIED BY  'jakdJxct8W';
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON  'testuser_dev' . * TO  'testuser'@'localhost';
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON  'testuser_qa' . * TO  'testuser'@'localhost';"

Как передать mysql с запросами?

4b9b3361

Ответ 1

Попробуйте вот так:

echo "select 1" | mysql

Ответ 2

mysql --batch --silent -e 'SHOW TABLES';

Пакетные и тихие удобны, если вы планируете подключать выходные данные

Ответ 3

Попробуйте использовать здесь документ следующим образом:

mysql --host=localhost --user=user --password=password << END

CREATE USER 'testuser'@'localhost' IDENTIFIED BY  'jakdJxct8W';
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON  'testuser_dev' . * TO  'testuser'@'localhost';
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON  'testuser_qa' . * TO  'testuser'@'localhost';

END

Альтернативно поместите все команды в текстовый файл и запустите его:

mysql --host=localhost --user=user --password=password < commands.sql

Ответ 4

Причина, по которой ваша попытка не срабатывала, состояла в том, что < ожидает имя файла, и вы отправили ему строку. Вам нужно было сделать что-то вроде

echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile

ken предложение

 mysql  --host=localhost --user=user --password=password -e "QUERY" dbname

может работать, но если вы попытаетесь использовать переменные bash в своем запросе, вы можете ошибиться в расширении параметра. например,

QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname

может не делать то, что вы ожидаете. Один из вариантов - использование

echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname

который работает, если строка запроса содержит соответствующую цитату. Другим вариантом является документ "здесь", предложенный dogbane.

Ответ 5

Вы пробовали mysql -e query?

Ответ 6

Для больших запросов в bash script вы можете попробовать:

read -d '' SQL_QUERY_1 << EOF

SELECT prod.id as id, prod.title as title, comp.name as company, pho.id as photo_id, pho.image as photo_name
FROM products as prod
JOIN accounts as comp
ON comp.id = prod.account_id
JOIN photos as pho
ON pho.id = prod.featured_photo_id;

EOF

echo ${SQL_QUERY_1} | mysql

Ответ 7

cat <<EOD | mysql [-u user] [-ppassword] [database]
  select 1;
  select 2;
  select 3;
EOD

в вашем случае

cat <<EOD | mysql -u root -p
    CREATE DATABASE IF NOT EXISTS testuser_dev DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
    GRANT ALL PRIVILEGES ON  testuser_dev.* TO  "testuser"@"localhost";
    CREATE DATABASE IF NOT EXISTS testuser_qa DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
    GRANT ALL PRIVILEGES ON  testuser_qa.* TO  "testuser"@"localhost";
    FLUSH PRIVILEGES;
EOD