bestsource

bash에서 mysql 쿼리를 제공하는 방법

bestsource 2023. 9. 1. 21:10
반응형

bash에서 mysql 쿼리를 제공하는 방법

mysql 사용자와 데이터베이스를 생성하는 bash 스크립트를 만들려고 하는데 mysql을 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에 쿼리를 제공하는 방법은 무엇입니까?

다음과 같이 시도:

echo "select 1" | mysql

다음과 같은 문서를 사용해 보십시오.

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
mysql --batch --silent -e 'SHOW TABLES';

배치 및 사일런트는 출력을 파이프로 연결하려는 경우에 유용합니다.

당신의 시도가 효과가 없었던 이유는<파일 이름이 필요하며 사용자가 문자열을 입력했습니다.당신은 다음과 같은 것을 해야 할 것입니다.

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

에 대한 켄의 제안

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

작동할 수 있지만 쿼리에서 bash 변수를 사용하려고 하면 매개 변수 확장에 위반될 수 있습니다.

QUERY="select * from $MYTABLE WHERE name=\"silly@place.com\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname

당신이 기대하는 것을 하지 않을 수도 있습니다.한 가지 옵션은 사용입니다.

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

쿼리 문자열에 적절한 따옴표가 포함된 경우 작동합니다.또 다른 옵션은 도그베인이 제안한 "여기" 문서입니다.

해보셨습니까mysql -e query?

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

bash 스크립트에서 큰 쿼리의 경우 다음을 시도할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/6150675/how-to-feed-mysql-queries-from-bash

반응형