通过CentOS在没有密码提示的情况下脚本安装mysql服务器

通过CentOS在没有密码提示的情况下脚本安装mysql服务器,mysql,linux,bash,shell,centos,Mysql,Linux,Bash,Shell,Centos,我的操作系统是CentOS 6.6,我想知道如何通过shell脚本自动安装mysql服务器 我发现有一个话题讨论了同一个问题,但在CentOS 6上失败了: 这是我的基本脚本 #!/bin/sh # Make sure only root can run our script if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" 1>&2 exit 1 fi #password settin

我的操作系统是CentOS 6.6,我想知道如何通过shell脚本自动安装mysql服务器

我发现有一个话题讨论了同一个问题,但在CentOS 6上失败了:

这是我的基本脚本

#!/bin/sh
# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

#password setting
root_password='abc123'

#install mysql-server
yum install mysql mysql-server 

#start service
service mysqld start

#MySQL Initial Setup
mysql_secure_installation

#This command needs root password and answers(y/n) for secure questions 
是否有任何方法可以自动填写根密码并回答大多数安全问题的“y”

或者它有其他方法来实现同样的目标。即,自动安装myaql服务器的脚本,无需密码提示


非常感谢您的帮助。

mysql\u secure\u安装是一个shell脚本。 因此,您可以在脚本或任何其他用户交互部分中编辑set_root_password()函数。

如何

echo  "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('secret');" | mysql -u root

此代码适用于我的文件:

password_match=`awk '/A temporary password is generated for/ {a=$0} END{ print a }' /var/log/mysqld.log | awk '{print $(NF)}'`
mysql -u root -p$password_match --connect-expired-password -e "SET password FOR root@localhost=password('$password_match');"
mysql -u root -p$password_match -e "SHOW VARIABLES LIKE 'validate_password%';"
mysql -u root -p$password_match -e "SET GLOBAL validate_password_length=4;"
mysql -u root -p$password_match -e "SET GLOBAL validate_password_policy=LOW;"
mysql -u root -p$password_match -e "SHOW VARIABLES LIKE 'validate_password%';"
mysql -u root -p$password_match -e "SET password for root@localhost=password('root');"
mysql -u root -proot -e "flush privileges;"

echo "character-set-server=utf8" >> /etc/my.cnf
echo "default_password_lifetime=0" >> /etc/my.cnf
echo "validate_password_policy=LOW" >> /etc/my.cnf
echo "validate_password_length=4" >> /etc/my.cnf

systemctl restart mysqld

请注意,debconf utils是一个仅用于基于Debian的发行版的包。这就是命令失败的原因。
echo  "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('secret');" | mysql -u root
password_match=`awk '/A temporary password is generated for/ {a=$0} END{ print a }' /var/log/mysqld.log | awk '{print $(NF)}'`
mysql -u root -p$password_match --connect-expired-password -e "SET password FOR root@localhost=password('$password_match');"
mysql -u root -p$password_match -e "SHOW VARIABLES LIKE 'validate_password%';"
mysql -u root -p$password_match -e "SET GLOBAL validate_password_length=4;"
mysql -u root -p$password_match -e "SET GLOBAL validate_password_policy=LOW;"
mysql -u root -p$password_match -e "SHOW VARIABLES LIKE 'validate_password%';"
mysql -u root -p$password_match -e "SET password for root@localhost=password('root');"
mysql -u root -proot -e "flush privileges;"

echo "character-set-server=utf8" >> /etc/my.cnf
echo "default_password_lifetime=0" >> /etc/my.cnf
echo "validate_password_policy=LOW" >> /etc/my.cnf
echo "validate_password_length=4" >> /etc/my.cnf

systemctl restart mysqld