ChatGPT解决这个技术问题 Extra ChatGPT

Install MySQL on Ubuntu without a password prompt

How do I write a script to install MySQL server on Ubuntu?

sudo apt-get install mysql will install, but it will also ask for a password to be entered in the console.

How do I do this in a non-interactive way? That is, write a script that can provide the password?

#!/bin/bash
sudo apt-get install mysql  # To install MySQL server

# How to write script for assigning password to MySQL root user
# End

s
stefansundin
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server

For specific versions, such as mysql-server-5.6, you'll need to specify the version in like this:

sudo debconf-set-selections <<< 'mysql-server-5.6 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.6 mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server-5.6

For mysql-community-server, the keys are slightly different:

sudo debconf-set-selections <<< 'mysql-community-server mysql-community-server/root-pass password your_password'
sudo debconf-set-selections <<< 'mysql-community-server mysql-community-server/re-root-pass password your_password'
sudo apt-get -y install mysql-community-server

Replace your_password with the desired root password. (it seems your_password can also be left blank for a blank root password.)

If your shell doesn't support here-strings (zsh, ksh93 and bash support them), use:

echo ... | sudo debconf-set-selections 

Make sure to change the mysql-server-5.1 part to the current mysql version!
This Answer translates to MariaDB as follows by replacing mysql-server-<version> with maria-db-<server>. The following occurency of mysql-server/ remains untouched
- part is unnecessary - works like a charm for me, and is more generic without that.
This works fine with after sudo apt-get install debconf-utils
@Lukx for MariaDB, the package is mariadb-server, not maria-db-server. Thanks for the note anyway.
M
Mez

This should do the trick

export DEBIAN_FRONTEND=noninteractive
sudo -E apt-get -q -y install mysql-server

Of course, it leaves you with a blank root password - so you'll want to run something like

mysqladmin -u root password mysecretpasswordgoeshere

Afterwards to add a password to the account.


Tested and working in new Ubuntu 12.04 instance with MySQL 5.5
seems to work in a Dockerfile with ENV DEBIAN_FRONTEND noninteractive but not in a bash (12.04)
If you are installing with sudo, use -E so that the environment variable is passed along. Eg. sudo -E apt-get -q -y install mysql-server.
You can also add the env variable directly into the command (without polluting the external environment) by prepending it - DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server
Worked for me on Debian 8.2--I combined from @PatrickCullen and @yoniLavi to get DEBIAN_FRONTEND=noninteractive sudo -E apt-get -q -y install mysql-server--worked like a charm!
c
chrisfargen

Another way to make it work:

echo "mysql-server-5.5 mysql-server/root_password password root" | debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password root" | debconf-set-selections
apt-get -y install mysql-server-5.5

Note that this simply sets the password to "root". I could not get it to set a blank password using simple quotes '', but this solution was sufficient for me.

Based on a solution here.


echo 'mysql-server-5.5 mysql-server/root_password password ' | sudo debconf-set-selections works to specify blank password for me.
@TsuneoYoshioka Doesn't work for me. If I put two spaces at the end it sets my password to a single space. With one space it still tries to give the prompt and then screws up the installation.
P
Peter Mortensen

Use:

sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server

sudo mysql -h127.0.0.1 -P3306 -uroot -e"UPDATE mysql.user SET password = PASSWORD('yourpassword') WHERE user = 'root'"

Thanks! defining variables outside sudo always gets me.