我有一个在新的 Linux OS 16.10 中安装软件的脚本。
假设该文件名为 insert_app.txt。
我这样调用这个脚本:
# source insert_app.txt.
然后以非交互模式安装软件。
这是安装 MariaDb 的部分
sudo apt-get update
sudo apt-get install -y mariadb-server
效果很好。安装数据库后,我需要创建用户并设置权限,如下所示:
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'psswordUser1';
GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost';
FLUSH PRIVILEGES;
为此,我需要等待所有软件安装完毕,然后进入数据库,如 mysql -uroot -pPassword,然后运行前面的命令来创建用户。
我的问题是:
有没有办法把这些命令放在同一个管道中?我的意思是,像这样:
....
sudo apt-get update
sudo apt-get install -y mariadb-server
mysql -uroot -pPsswrd
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'psswordUser1';
GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost';
FLUSH PRIVILEGES;
...
COntinue install the softwares...
它不起作用。
一些帮助?
答案1
这是我在 16.04 或 16.10 上执行的操作,因为:
mariaDB 安装后,如果您没有配置任何其他内容,它只会授予 root 访问权限。因此您需要使用
sudo
来运行它。我的意思是(假设密码是“x”):sudo mysql -uroot -px
代替
mysql -uroot -px
现在要运行整行,您需要执行以下操作。 在我的例子中,我创建了一个名为“cyrex”的用户,密码为“x”:
sudo mysql -uroot -px -e "CREATE USER 'cyrex'@'localhost' IDENTIFIED BY 'x'; GRANT ALL PRIVILEGES ON *.* TO 'cyrex@localhost'; FLUSH PRIVILEGES;"
或者不带用户和密码参数:
sudo mysql -e "CREATE USER 'cyrex'@'localhost' IDENTIFIED BY 'x'; GRANT ALL PRIVILEGES ON *.* TO 'cyrex@localhost'; FLUSH PRIVILEGES;"
完成此操作后,您可以通过执行以下操作(不带 sudo 部分)进行测试:
mysql -ucyrex -px
就可以正常工作了。我提供了一张图片,以便您看到混乱,因为我习惯于使用 MySQL 而无需这样做,但使用 MariaDB 时情况略有不同。
您还可以通过运行以下命令更改密码和一些选项
mysql_secure_installation
或者mysql_setpermission
可以帮助配置默认设置。
答案2
尝试-e
mysql客户端的参数:
mysql -uroot -pPsswrd -e "CREATE USER 'user1'@'localhost' IDENTIFIED BY 'psswordUser1';"
mysql -uroot -pPsswrd -e "GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost';"
mysql -uroot -pPsswrd -e "FLUSH PRIVILEGES;"
即使只用一个命令也可以工作:
mysql -uroot -pPsswrd -e "CREATE USER 'user1'@'localhost' IDENTIFIED BY 'psswordUser1'; GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost'; FLUSH PRIVILEGES;"