自动安装(卸载)MySQL

自动安装(卸载)MySQL

我目前正在尝试自动清除并重新安装 Ubuntu 上的 MySQL(用于 Vagrant)。但是,我遇到了各种问题。

以下是我所拥有的:

# Uninstall old MySQL version
sudo systemctl stop mysql
sudo apt-get remove mysql-* -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

# ...
# Do other stuff.
# ...

# Install MySQL latest, see
# https://gist.github.com/kpietru/a3cb08ee074a4418795a
MYSQL_PASSWORD="root"

export MYSQL_PASSWORD="$MYSQL_PASSWORD"

sudo expect -c '
    spawn apt-get install -y mysql-server

    expect "*password* user:"
    send "$env(MYSQL_PASSWORD)\r"

    expect "*password* user:"
    send "$env(MYSQL_PASSWORD)\r"

    expect "\r"
    send "enter\r"

interact'

sudo systemctl unmask mysql.service
sudo service mysql start

mysql --version

这有效,我的 Vagrant box 加载得很好。但是,当我尝试像这样使用 MySQL 时:

mysql -uroot -proot

我收到与套接字相关的错误消息(请参阅https://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq)。我不想在这里修复错误。我希望之前的脚本能够正常工作。因此,我不会深入修复套接字错误。

我的第一直觉是使用sudo apt-get purge -y mysql-*而不是remove,但后来我必须使用 来自动执行提示响应expect。我尝试使用 来做到这一点autoexpect,但expect生成的脚本似乎不起作用。

你们能帮助我吗?我还能尝试其他方法吗?

提前致谢并欢呼

答案1

我的一位同事设法找到了解决这个问题的方法。我会在这里发布它,这样我就可以减轻其他人的负担 :)

# Remove previous MySQL versions
####################################################################

export DEBIAN_FRONTEND=noninteractive

sudo systemctl stop mysql
sudo apt-get remove mysql-* -y

sudo dpkg --configure -a
sudo -E apt-get purge mysql-*
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

sudo apt-get autoremove
sudo apt-get autoclean

# Install MySQL 8.0
####################################################################

sudo apt-get update
sudo apt install mysql-server-8.0 -o Dpkg::Options::="--force-confnew" -y

# Enable native password authentication
#
# Otherwise you would have to open MySQL as root:
# `sudo mysql -u root`
####################################################################

echo "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;" | sudo mysql -u root

相关内容