我正在编写一个简单的 bash 脚本来在 Ubuntu 上安装 MySQL。
#!/bin/bash
apt-get update
# Install MySQL5
aptitude -y install mysql-server mysql-client libmysqlclient15-dev
但是 MySQL 会提示输入密码并进行确认。如何传递根密码。我可以使用回声吗?
我正在编写一个简单的 bash 脚本来在 Ubuntu 上安装 MySQL。
#!/bin/bash
apt-get update
# Install MySQL5
aptitude -y install mysql-server mysql-client libmysqlclient15-dev
但是 MySQL 会提示输入密码并进行确认。如何传递根密码。我可以使用回声吗?
这要容易得多..
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server
如果您的 shell 不支持here-strings
(zsh、ksh93 和 bash 支持它们),请使用:
echo ... | sudo debconf-set-selections
感谢您对期望的提示。我通过搜索 Ubuntu 管理论坛找不到任何东西,所以我选择了期望。从这篇文章的时间戳可以看出,我花了 3 个小时才让它工作。这是代码,我希望它可以帮助某人:
#!/bin/bash
apt-get update
apt-get install expect
VAR=$(expect -c '
spawn apt-get -y install mysql-server
expect "New password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect "Repeat password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect eof
')
echo "$VAR"
apt-get -y install mysql-client libmysqlclient15-dev
#For some reason important to restart - otherwise possible errors
/etc/init.d/mysql stop
/etc/init.d/mysql start
这是我的新服务器设置脚本的摘录。除了密码之外,您应该能够逐字复制它。
如果您还不是 root,则需要使用 sudo 运行它。
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install mysql-server
echo "Give mysql server time to start up before we try to set a password..."
sleep 5
mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD('yourpasswordhere') WHERE User='root'; FLUSH PRIVILEGES;"
EOSQL
echo "Done setting mysql password."
其他答案使用了 -y ,这使得 apt-get 总是对问题回答是。-q 隐藏了一些进度指示器,因此您可以将输出发送到日志。你也可以使用-qq,它会自动给你一个-y。这是 apt-get 的手册页。
这<<EOSQL
是一个 bash heredoc 语法以提高可读性。
我从这个人那里得到了这个解决方案的heredoc部分:http: //padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu
使用heredoc要记住的是,结束字符串之前的空格会破坏它。所以不要缩进那行。这是关于 heredoc 语法的页面:http: //tldp.org/LDP/abs/html/here-docs.html
最简单的方法是使用 DEBIAN_FRONTEND 环境变量和 aptitude -q 和 -y 标志:
sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server
或者更笼统地说,假设 sudo 密码已经以某种方式得到满足:
#!/bin/bash
INSTALLER_LOG=/var/log/my-installer.log
installnoninteractive(){
sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG"
}
installnoninteractive mysql-server
此脚本在以超级用户身份启动时成功:
#!/bin/bash
export temp_mysql_password="**********"
export DEBIAN_FRONTEND=noninteractive
debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password"
apt-get update
apt-get -y upgrade
apt-get -y install mysql-server
研究使用期望
它可用于自动化大多数交互式会话,尽管我不会使用 root 密码
期望可能是矫枉过正。查看 Debian 或 Ubuntu 管理员论坛之一——FAI 等人长期以来一直使用预置来解决 debconf 问题。你应该也可以在这里使用它。
最后,您可能还可以使用 apt-get 本身或其他前端。