한 줄에 같은 이름으로 사용자와 데이터베이스를 만듭니다.

한 줄에 같은 이름으로 사용자와 데이터베이스를 만듭니다.

다음은 Bash에서 직접 MySQL 인증된 모든 권한을 가진 데이터베이스 사용자와 동일한 이름을 가진 해당 데이터베이스 인스턴스를 생성하는 방법입니다.

echo "CREATE USER "${domain}"@"localhost" IDENTIFIED BY \"${dbup}\";" | mysql -u root -p"${dbrp}"
echo "CREATE DATABASE ${domain};" | mysql -u root -p"${dbrp}"
echo "GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;" | mysql -u root -p"${dbrp}"

처음 두 명령을 어떻게든 하나의 명령으로 결합할 수 있습니까?

답변1

일명 "여기에 문서"를 사용합니다.트레독. 예를 들어:

cat <<EOF | mysql -u root -p"${dbrp}"
CREATE USER '${domain}'@localhost IDENTIFIED BY '${dbup}';
CREATE DATABASE '${domain}';
GRANT ALL PRIVILEGES ON ${domain}.* TO '${domain}'@localhost;
EOF

불행하게도 mysqlCREATE USER, CREATE DATABASE, GRANT 등의 롤백은 아직 지원되지 않습니다.암시적 커밋DDL 작업의 경우) 그렇지 않으면 이러한 모든 명령을 트랜잭션으로 래핑해야 한다고 말하고 싶습니다(그러면 하나가 실패하면 모두 실패하고 모든 것이 원래 상태로 되돌아갑니다).

답변2

왜 더 간단하지 않습니까? 세 가지 작업을 모두 수행하려면 너무 길지 않은 줄이면 충분합니다.

[[email protected]][~]# mysql -e'show databases' | grep test_se          # not exists yet
[[email protected]][~]# domain=test_se
[[email protected]][~]# mysql -v -e"create database ${domain};grant all on ${domain}.* to ${domain}@localhost identified by 'mysuperpassw00rd'"
--------------
create database test_se
--------------

--------------
grant all on test_se.* to test_se@localhost identified by 'mysuperpassw00rd'
--------------

[[email protected]][~]# mysql -e'show databases' | grep test_se           # here we are!
test_se

나는 거의 사용하지 않습니다 create user. 내 관점에서는 동일한 사용자를 많은 데이터베이스에 추가해야 하는 경우가 아니면 쓸모가 없습니다. 또한 ;보시다시피 연결 및 작동이 매우 잘됩니다.

-v자세한 출력을 끄려면 제거하세요 .

관련 정보