在Ubuntu上安装MySQL而没有密码提示


305

如何编写脚本在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

Answers:


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

对于特定的版本(例如)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

对于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

将your_password替换为所需的根密码。(似乎your_password也可以留空以获取空白的root密码。)

如果您的外壳不支持此处字符串zshksh93bash支持它们),请使用:

echo ... | sudo debconf-set-selections 

1
确保将部件更改mysql-server-5.1为当前的mysql版本!
院长拉瑟

19
这个答案转化为MariaDB的更换如下mysql-server-<version>maria-db-<server>mysql-server/ 遗留物的
Lukx 2013年

5
-<version>部分是不必要的-对我来说就像一个咒语,如果没有,它会更通用。
msztolcman

2
此功能可在之后sudo apt-get install debconf-utils
Nazin 2014年

4
@Lukx for MariaDB,该软件包是mariadb-server,而不是maria-db-server。无论如何,感谢您的来信。
ywarnier

238

这应该可以解决问题

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

当然,它为您提供了一个空的root密码-因此,您需要运行类似

mysqladmin -u root password mysecretpasswordgoeshere

然后向该帐户添加密码。


3
经过测试并在新的Ubuntu 12.04实例中使用MySQL 5.5并在其中工作
AlbertoMegía2013年

21
如果使用sudo安装,请使用-E以便传递环境变量。例如。sudo -E apt-get -q -y安装mysql服务器。
Patrick Cullen 2014年

35
您还可以通过在变量前添加env变量直接添加到命令中(而不污染外部环境)DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server
yoniLavi 2014年

2
这样,mysql密码将存储在bash日志中。
DutGRIFF

3
在Debian 8.2上为我工作-我将@PatrickCullen和@yoniLavi结合在一起- DEBIAN_FRONTEND=noninteractive sudo -E apt-get -q -y install mysql-server像魅力一样工作!
MuffinTheMan

31

使其工作的另一种方法:

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

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

根据这里的解决方案。


1
回显'mysql-server-5.5 mysql-server / root_password密码'| sudo debconf-set-selections可以为我指定空白密码。
2014年

4
@TsuneoYoshioka对我不起作用。如果我在末尾放置两个空格,它将密码设置为一个空格。只需一个空格,它仍然会提示您,然后拧紧安装。
mpen 2014年

3

采用:

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

谢谢!在sudo之外定义变量总是让我受益。
加斯顿·桑切斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.