首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

[转]Simple Bash Script to install MySQL - Need some help

作者:  时间: 2011-04-13

I am writing a simple bash script to install MySQL on Ubuntu.

#!/bin/bash
apt
-get update

# Install MySQL5
aptitude
-y install mysql-server mysql-client libmysqlclient15-dev

However MySQL prompts for a password and confirmation. How do I pass along a root password. Is there an echo I can use?

Thank you,

Cei

 

 

Thank you for the tip on expect. I couldn't find anything by searching Ubuntu admin forums so I went with expect. As you can see by the timestamp of this post, it took me 3 hours to get it working. Here is the code, I hope it can help someone:

#!/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 

 

 

 

This is an excerpt from my setup script for new servers. You should be able to copy it word-for-word except for the password.

You'll need to run this using sudo if you're not already root.

#!/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." 

 

 Other answers have used the -y which makes apt-get always answer yes to questions. The -q hides some progress indicators so you can send the output to a log. You could also use -qq, which automatically gives you a -y. This is in the man page for apt-get.

 

The <<EOSQL is a bash heredoc syntax for readability.

 The easiest way to do this is to use the DEBIAN_FRONTEND environment variable and the aptitude -q and -y flags:

 

sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server

Or more generically, assuming sudo password has been catered for some-how:

#!/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

原文链接:http://stackoverflow.com/questions/1202347/simple-bash-script-to-install-mysql-need-some-help