在一行中创建同名的用户和数据库

在一行中创建同名的用户和数据库

这是我直接从 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

不幸的是,mysql仍然不支持 CREATE 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以关闭详细输出。

相关内容