Instale o MySQL no Ubuntu sem um prompt de senha

305

Como escrevo um script para instalar o servidor MySQL no Ubuntu?

sudo apt-get install mysql será instalado, mas também solicitará que uma senha seja inserida no console.

Como faço isso de maneira não interativa? Ou seja, escreva um script que possa fornecer a senha?

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

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

Respostas:

431
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

Para versões específicas, como mysql-server-5.6, você precisará especificar a versão da seguinte maneira:

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

Para mysql-community-server, as chaves são ligeiramente diferentes:

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

Substitua sua senha com a senha raiz desejada. (parece que sua senha também pode ser deixada em branco para uma senha raiz em branco.)

Se o seu shell não suporta strings here ( zsh , ksh93 e bash as suportam), use:

echo ... | sudo debconf-set-selections 
Dimitre Radoulov
fonte
1
Certifique-se de alterar a mysql-server-5.1parte para a versão atual do mysql!
Dean Em vez
19
Esta resposta é traduzida para MariaDB da seguinte maneira substituindo mysql-server-<version>por maria-db-<server>. O seguinte occurency de mysql-server/ permanece intocado
Lukx
5
- parte <versão> é desnecessária - funciona como um encanto para mim e é mais genérica sem isso.
msztolcman
2
Isso funciona bem com depoissudo apt-get install debconf-utils
Nazin
4
@Lukx para MariaDB, o pacote é mariadb-server, não maria-db-server. Obrigado pela nota de qualquer maneira.
Ywarnier
238

Isso deve fazer o truque

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

Obviamente, ele deixa uma senha de root em branco - portanto, você deseja executar algo como

mysqladmin -u root password mysecretpasswordgoeshere

Depois, adicione uma senha à conta.

Mez
fonte
3
Testado e funcionando em nova instância Ubuntu 12.04 com o MySQL 5.5
Alberto megia
21
Se você estiver instalando com o sudo, use -E para que a variável de ambiente seja transmitida. Por exemplo. sudo -E apt-get -q -y instala o mysql-server.
Patrick Cullen
35
Você também pode adicionar a variável env diretamente no comando (sem poluir o ambiente externo) precedendo-a -DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server
yoniLavi
2
A senha do mysql será armazenada em um log do bash quando feito dessa maneira.
DutGRIFF
3
Trabalhei para mim no Debian 8.2 - eu combinei de @PatrickCullen e @yoniLavi para DEBIAN_FRONTEND=noninteractive sudo -E apt-get -q -y install mysql-servertrabalhar - como um encanto!
MuffinTheMan
31

Outra maneira de fazê-lo funcionar:

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

Observe que isso simplesmente define a senha como "root". Não foi possível definir uma senha em branco usando aspas simples '', mas esta solução foi suficiente para mim.

Com base em uma solução aqui .

chrisfargen
fonte
1
eco 'mysql-server-5.5 mysql-server / root_password password' | sudo debconf-set-selections funciona para especificar uma senha em branco para mim.
Tsuneo Yoshioka
4
@TsuneoYoshioka Não funciona para mim. Se eu colocar dois espaços no final, ele definirá minha senha para um único espaço. Com um espaço, ele ainda tenta fornecer o prompt e depois estraga a instalação.
MPEN
3

Usar:

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'"
POTHULA DE BALAJI
fonte
Obrigado! definir variáveis ​​fora do sudo sempre me entende.
Gaston Sanchez