1行に同じ名前でユーザーとデータベースを作成します。

1行に同じ名前でユーザーとデータベースを作成します。

以下は、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}"

最初の2つのコマンドを何らかの方法で1つのコマンドに結合できますか?

答え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操作の場合)そうでなければ、これらすべてのコマンドをトランザクションにラップする必要があると言いたいのですが(1つが失敗した場合はすべて失敗し、すべてが元の状態に戻ります)。

答え2

なぜもっと簡単ではないのですか? 3 つすべてを実行するには、あまりにも長くない行で十分です。

[[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詳細な出力をオフにするには削除してください。

関連情報