저는 EditLine 래퍼를 사용하여 Bash 및 MySQL Ver 14.14 Distrib 5.7.21과 Linux(x86_64)에서 Ubuntu 16.04를 사용하고 있습니다.
명령줄에서 직접 웹앱(WordPress)용 DB 스택을 생성하려고 하는데, 여기서 제가 아는 가장 좋은 방법과 제가 겪고 있는 문제를 공유하고 있습니다(답변이 더 나은 방법을 제공할 수 있음).
다음 MySQL CLI 코드를 실행해 보았습니다. 여기에서 권한이 부여된 전체 권한 사용자 + 동일한 이름의 데이터베이스 인스턴스를 생성했습니다.
cat <<-EOF | mysql -u root -p"$dbrootp_1"
DROP USER IF EXISTS "$domain"@"localhost";
DROP DATABASE IF EXISTS "$domain";
CREATE USER "$domain"@"localhost" IDENTIFIED BY "$dbuserp_1";
CREATE DATABASE "$domain";
GRANT ALL PRIVILEGES ON "$domain".* TO "$domain"@"localhost";
EOF
실행하면 다음 오류가 출력됩니다.
2행의 오류 1064(42000): SQL 구문에 오류가 있습니다.
줄 1 "example.com" 근처에서 사용할 올바른 구문은 MySQL 서버 버전 설명서를 확인하세요.
이 오류에 대해 혼란스럽습니다. 문제가 라인 1에 있습니까, 아니면 2에 있습니까? 여기서 구문 오류는 무엇입니까? 변수 확장을 사용해야 합니다.
답변을 기반으로 업데이트
사용자l0b0, 보여주신 ${x}
대안을 사용해 보았지만 "$x"
불행하게도 다음과 같은 오류가 출력됩니다.
1행의 오류 1064(42000): SQL 구문이 잘못되었습니다. 1행의 "-law.co.il@localhost" 근처에서 사용할 올바른 구문은 MySQL 서버 버전 설명서를 확인하세요.
mysql에 데이터를 파이핑하지 않고 Cat 출력:
DROP USER IF EXISTS example.com@localhost;
DROP DATABASE IF EXISTS example.com;
CREATE USER example.com@localhost IDENTIFIED BY MYPASSWORD;
CREATE DATABASE example.com;
GRANT ALL PRIVILEGES ON example.com.* TO example.com@localhost;
답변1
@jordanm이 지적했듯이,여기에 파일인용문은 문법이 아닌 문자 그대로입니다. 그래서 당신이 원하는
mysql -u root -p"$dbrootp_1" <<-EOF
DROP USER IF EXISTS ${domain}@localhost;
DROP DATABASE IF EXISTS ${domain};
CREATE USER ${domain}@localhost IDENTIFIED BY ${dbuserp_1};
CREATE DATABASE ${domain};
GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
EOF
$domain
또는 특수 문자가 포함된 경우 $dbuserp_1
해당 문자를 따옴표로 묶어야 합니다.백틱:
mysql -u root -p"$dbrootp_1" <<-EOF
DROP USER IF EXISTS \`${domain}\`@localhost;
DROP DATABASE IF EXISTS \`${domain}\`;
CREATE USER \`${domain}\`@localhost IDENTIFIED BY \`${dbuserp_1}\`;
CREATE DATABASE `${domain}`;
GRANT ALL PRIVILEGES ON \`${domain}\`.* TO \`${domain}\`@localhost;
EOF