我有两个脚本 - 主要执行一些不同的操作并调用第二个脚本,以及第二个安装MySQL的脚本。
从我的主脚本我做这样的事情:
...
read -p "Set the password for the database [min. 4 characters]: " MPASS
# Install MySQL
path/to/setup-mysql.sh "$MPASS"
mysql --user="root" --password=${MPASS} -e "GRANT ALL ON *.* TO root@'${IPADDRESS}' IDENTIFIED BY '${MPASS}';"
mysql --user="root" --password=${MPASS} -e "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '${MPASS}';"
service mysql restart
mysql --user="root" --password=${MPASS} -e "SET GLOBAL validate_password_policy = 'LOW'; SET GLOBAL validate_password_length = 4; CREATE USER 'johndoe'@'${IPADDRESS}' IDENTIFIED BY '${MPASS}';"
mysql --user="root" --password=${MPASS} -e "GRANT ALL ON *.* TO 'johndoe'@'${IPADDRESS}' IDENTIFIED BY '${MPASS}' WITH GRANT OPTION;"
mysql --user="root" --password=${MPASS} -e "GRANT ALL ON *.* TO 'johndoe'@'%' IDENTIFIED BY '${MPASS}' WITH GRANT OPTION;"
mysql --user="root" --password=${MPASS} -e "FLUSH PRIVILEGES;"
setup-mysql.sh
看起来像这样:
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
debconf-set-selections <<< "mysql-community-server mysql-community-server/data-dir select ''"
debconf-set-selections <<< "mysql-community-server mysql-community-server/root-pass password ${1}"
debconf-set-selections <<< "mysql-community-server mysql-community-server/re-root-pass password ${1}"
apt-get install -y mysql-server
# Start mysql on boot
update-rc.d mysql defaults
# Configure Password Expiration
echo "default_password_lifetime = 0" >> /etc/mysql/my.cnf
# Configure Access Permissions For Root
sed -i '/^bind-address/s/bind-address.*=.*/bind-address = */' /etc/mysql/my.cnf
对我来说,这看起来应该可行,但是,当bash执行这一行时:
mysql --user="root" --password=${MPASS} -e "GRANT ALL ON *.* TO root@'${IPADDRESS}' IDENTIFIED BY '${MPASS}';"
它说密码错误。当我尝试手动登录时它不会工作。当我跳过密码字段(mysql -u root
)时,它可以工作。所以密码根本没有设置。
此外,当我在echo $1
中setup-mysql.sh
时,它会正确显示MPASS
包含的内容。
为什么debconf-set-selections
没有为我的MySQL安装正确设置密码。我真的很困惑。
答案 0 :(得分:1)
您似乎正在编写MySQL安装后初始化shell脚本。
在我个人看来:更改您的shell脚本设计方法。
在您的脚本中,您使用mysql --user="root" --password=${MPASS}
提示错误信息。您可以使用mysql参数 --defaults-file
,将mysql登录用户root
和相应的密码写入临时文件,如
[client]
user=root
password=YOURPASSWORD
假设文件路径为/tmp/mysql.cnf
(分配变量mysql_my_cnf
)
然后使用mysql --defaults-file="$mysql_my_cnf"
登录,它将成功登录。
将变量分配给mysql --defaults-file="$mysql_my_cnf"
,例如mysql_command
mysql --user="root" --password=${MPASS} -e "GRANT ALL ON *.* TO root@'${IPADDRESS}' IDENTIFIED BY '${MPASS}';"
${mysql_command} -e "GRANT ALL ON *.* TO root@'${IPADDRESS}' IDENTIFIED BY '${MPASS}';"
你可以尝试一下。
我写了MySQL and its variants installation and initialization shell script,它可能对你有帮助。