반응형
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
반응형
'bestsource' 카테고리의 다른 글
adb 명령을 찾을 수 없습니다. (0) | 2023.09.01 |
---|---|
Python: 현재 실행 중인 스크립트와 관련하여 sys.path에 추가하는 가장 좋은 방법 (0) | 2023.09.01 |
파이썬에서 신호에 노이즈 추가 (0) | 2023.09.01 |
MariaDB 도커에서 skip_name_resolve 사용 안 함 (0) | 2023.08.27 |
NSURL 쿼리 속성 구문 분석 (0) | 2023.08.27 |