Instalação não-interativa (silenciosa) do MySQL 5.7 no Ubuntu 16.04 LTS

3

O MySQL 5.7 (5.6+ na verdade) mudou como mysql_secure_installation funciona. Isso tornou difícil encontrar uma instalação silenciosa e com script para o Ubuntu 16.04 LTS. Como você instalaria o MySQL de forma segura e não interativa?

    
por Michael Johansen 12.06.2016 / 23:46

4 respostas

6

O script completo abaixo pode ser colocado em um arquivo chamado "install.sh" e executado da seguinte forma:

touch install.sh      # Create empty file
chmod 700 install.sh  # Make executable
nano install.sh       # Copy contents into script here
./install.sh          # Run it

Em relação ao script abaixo:

  1. Lembre-se de definir MYSQL_ROOT_PASSWORD substituindo o ponto de interrogação na linha 4 pela sua senha.
  2. Se estiver executando como root, remova o sudo.
  3. O script instala a opção Esperar. Ele também pode eliminar (desinstalar) Esperar após a conclusão se você descomentar a linha 50.

Conteúdo do script:

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

MYSQL_ROOT_PASSWORD='?' # SET THIS! Avoid quotes/apostrophes in the password, but do use lowercase + uppercase + numbers + special chars

# Install MySQL
# Suggestion from @dcarrith (http://serverfault.com/a/830352/344471):
echo debconf mysql-server/root_password password $MYSQL_ROOT_PASSWORD | sudo debconf-set-selections
echo debconf mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD | sudo debconf-set-selections
#sudo debconf-set-selections <<< "mysql-server-5.7 mysql-server/root_password password $MYSQL_ROOT_PASSWORD"
#sudo debconf-set-selections <<< "mysql-server-5.7 mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD"
sudo apt-get -qq install mysql-server > /dev/null # Install MySQL quietly

# Install Expect
sudo apt-get -qq install expect > /dev/null

# Build Expect script
tee ~/secure_our_mysql.sh > /dev/null << EOF
spawn $(which mysql_secure_installation)

expect "Enter password for user root:"
send "$MYSQL_ROOT_PASSWORD\r"

expect "Press y|Y for Yes, any other key for No:"
send "y\r"

expect "Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:"
send "2\r"

expect "Change the password for root ? ((Press y|Y for Yes, any other key for No) :"
send "n\r"

expect "Remove anonymous users? (Press y|Y for Yes, any other key for No) :"
send "y\r"

expect "Disallow root login remotely? (Press y|Y for Yes, any other key for No) :"
send "y\r"

expect "Remove test database and access to it? (Press y|Y for Yes, any other key for No) :"
send "y\r"

expect "Reload privilege tables now? (Press y|Y for Yes, any other key for No) :"
send "y\r"

EOF

# Run Expect script.
# This runs the "mysql_secure_installation" script which removes insecure defaults.
sudo expect ~/secure_our_mysql.sh

# Cleanup
rm -v ~/secure_our_mysql.sh # Remove the generated Expect script
#sudo apt-get -qq purge expect > /dev/null # Uninstall Expect, commented out in case you need Expect

echo "MySQL setup completed. Insecure defaults are gone. Please remove this script manually when you are done with it (or at least remove the MySQL root password that you put inside it."
    
por 12.06.2016 / 23:53
1

A resposta de MrClean foi ótima. Mas, eu estava recebendo o seguinte erro ao tentar executar o script no servidor Ubuntu 16.04 (bash ou fish shell):

Files/scripts/install_mysql.sh: 7: Files/scripts/install_mysql.sh: Syntax error: redirection unexpected

Então, eu mudei as duas linhas em "# Install MySQL" para isso:

# Install MySQL
echo debconf mysql-server/root_password password $MYSQL_ROOT_PASSWORD | \
  sudo debconf-set-selections
echo debconf mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD | \
  sudo debconf-set-selections

Então, funcionou como um encanto.

    
por 03.02.2017 / 08:01
0

Eu não fui para a verificação de versões do mysql_secure, mas a instalação silenciosa do MySQL 5.7 no Ubuntu 16 foi um desafio, já que não consegui colocar a senha em funcionamento que foi lida como descarregada.

Então tive que instalar com a raiz de exemplo de senha padrão e, em seguida, mudei para a requisitada imediatamente.

Espero que isso ajude.

echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mysql-server-5.7 mysql-client >> $LOGFILE 2>&1

mysql -u root -proot -e "use mysql; UPDATE user SET authentication_string=PASSWORD('$MYSQLPASSWORD') WHERE User='root'; flush privileges;"

Observe como o MySQL 5.7 em diante implementa o "authentication_string" para alterar a senha do root.

BTW esta era uma parte de uma instalação LAMP + WORDPRESS autônoma que eu estava tentando que você pode encontrar em link

    
por 25.03.2017 / 14:00
0
ROOT_SQL_PASS=foo123
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password $ROOT_SQL_PASS"
sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $ROOT_SQL_PASS"
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
    
por 09.02.2018 / 06:24