我正在编写一个简单的bash脚本,在Ubuntu上安装MySQL。
#!/bin/bash
apt-get update
# Install MySQL5
aptitude -y install mysql-server mysql-client libmysqlclient15-dev
然而,MySQL会提示输入密码和确认。我该如何传递root密码?是否有一种方式可以使用echo命令实现?
我正在编写一个简单的bash脚本,在Ubuntu上安装MySQL。
#!/bin/bash
apt-get update
# Install MySQL5
aptitude -y install mysql-server mysql-client libmysqlclient15-dev
然而,MySQL会提示输入密码和确认。我该如何传递root密码?是否有一种方式可以使用echo命令实现?
这样做会容易很多..
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
#!/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."
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
。 - user1623521最简单的方法是使用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
expect
方法,但一直遇到微妙的引用问题。DEBIAN_FRONTEND=noninteractive
技巧正是我正在寻找的。接着使用mysqladmin -u root password YOUR_DB_PASSWORD
,你很快就能完成了。 - Jonathan Eunice当以超级用户身份启动时,此脚本运行成功:
#!/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
Expect 可能有些过度了。可以在 Debian 或 Ubuntu 管理员论坛上查看 -- 诸如 FAI 等工具长期以来一直使用 preseeding 来回答 debconf 问题。你也应该能够在这里使用它。
最后,你可能还可以使用 apt-get 本身或其他前端工具。