Назад | Перейти на главную страницу

Неинтерактивная (тихая) установка MySQL 5.7 на Ubuntu 16.04 LTS

MySQL 5.7 (на самом деле 5.6+) изменил способ mysql_secure_installation работает. Из-за этого было сложно найти работающую, тихую установку по сценарию для Ubuntu 16.04 LTS. Как бы вы установили MySQL безопасно, не взаимодействуя со сценарием?

Полный сценарий, представленный ниже, можно поместить в файл, который мы назовем «install.sh», и выполнить, выполнив следующие действия:

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

Что касается сценария ниже:

  1. Запомни установить MYSQL_ROOT_PASSWORD заменив вопросительный знак в строке 4 своим паролем.
  2. Если вы работаете с правами root, удалите файлы sudo.
  3. Скрипт устанавливает Expect. Он также может очистить (удалить) Expect после завершения, если вы раскомментируете строку 50.

Содержание скрипта:

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

Ответ MrClean был великолепен. Но я получал следующую ошибку при попытке запустить скрипт на сервере Ubuntu 16.04 (bash или fish shell):

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

Итак, я заменил две строчки в разделе «# Установить MySQL» на это:

# 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

Тогда это сработало как шарм.

Я не ходил на проверку версий mysql_secure, но на самом деле тихая установка MySQL 5.7 в Ubuntu 16 сама по себе была проблемой, поскольку мне не удалось получить пароль для работы, который был прочитан как невыполненный.

Поэтому пришлось установить с примером пароля по умолчанию root, а затем немедленно изменить его на требуемый.

Надеюсь это поможет.

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;"

Обратите внимание, как MySQL 5.7 и более поздних версий реализует «authentication_string» для изменения пароля root.

Кстати, это была часть автоматической установки LAMP + WORDPRESS, которую я пытался найти, которую вы можете найти на https://github.com/suraj2410/autowordpressinstall

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