在没有密码提示的情况下在Ubuntu上安装MySQL

Ven*_*kat 299 mysql bash ubuntu apt

如何编写脚本在Ubuntu上安装MySQL服务器?

sudo apt-get install mysql 将安装,但它也会要求在控制台中输入密码.

我如何以非交互方式执行此操作?也就是说,编写一个可以提供密码的脚本?

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

# How to write script for assigning password to MySQL root user
# End
Run Code Online (Sandbox Code Playgroud)

Dim*_*lov 428

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
Run Code Online (Sandbox Code Playgroud)

对于特定版本,例如mysql-server-5.6,您需要像这样指定版本:

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
Run Code Online (Sandbox Code Playgroud)

对于mysql-community-server,密钥略有不同:

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
Run Code Online (Sandbox Code Playgroud)

将your_password替换为所需的root密码.(对于空白的root密码,似乎your_password也可以留空.)

如果你的shell不支持here-strings(zsh,ksh93bash支持它们),请使用:

echo ... | sudo debconf-set-selections 
Run Code Online (Sandbox Code Playgroud)

  • 通过将`mysql-server- <version>`替换为`maria-db- <server>`,本答案将如下转换为MariaDB.以下出现的`mysql-server /`**仍未触及** (19认同)
  • 这对我来说在Vagrant中使用shell配置器. (10认同)
  • - <version>部分是不必要的 - 对我来说就像一个魅力,如果没有它就更通用. (5认同)
  • @Lukx for MariaDB,包是mariadb-server,而不是maria-db-server.无论如何,谢谢你的说明. (4认同)
  • 在``sudo apt-get install debconf-utils``之后,这很好用 (2认同)

Mez*_*Mez 236

这应该可以解决问题

export DEBIAN_FRONTEND=noninteractive
sudo -E apt-get -q -y install mysql-server
Run Code Online (Sandbox Code Playgroud)

当然,它会留下一个空白的root密码 - 所以你想要运行类似的东西

mysqladmin -u root password mysecretpasswordgoeshere
Run Code Online (Sandbox Code Playgroud)

然后为帐户添加密码.

  • 你也可以通过预先添加env变量直接添加到命令中(不污染外部环境) - `DEBIAN_FRONTEND = noninteractive apt-get -y install mysql-server` (34认同)
  • 如果要使用sudo进行安装,请使用-E以便传递环境变量.例如.sudo -E apt-get -q -y install mysql-server. (21认同)
  • 使用MySQL 5.5在新的Ubuntu 12.04实例中进行测试和工作 (3认同)
  • 在Debian 8.2上为我工作 - 我从@PatrickCullen和@yoniLavi合并得到`DEBIAN_FRONTEND =非交互式sudo -E apt-get -q -y install mysql-server` - 像魅力一样工作! (3认同)
  • 似乎可以在带有“ENV DEBIAN_FRONTEND noninteractive”的 Dockerfile 中工作,但不能在 bash (12.04) 中工作 (2认同)
  • 以这种方式完成时,mysql密码将存储在bash日志中. (2认同)

chr*_*gen 29

使其工作的另一种方法:

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
Run Code Online (Sandbox Code Playgroud)

请注意,这只是将密码设置为"root".我无法使用简单的引号设置空白密码'',但这个解决方案对我来说已经足够了.

基于这里的解决方案.

  • @TsuneoYoshioka不适合我.如果我在末尾放置两个空格,则将我的密码设置为单个空格.只有一个空间,它仍然会尝试提示,然后拧紧安装. (3认同)