Install MySQL on Ubuntu without a password prompt
如何编写在Ubuntu上安装mysql服务器的脚本?
将安装sudo apt-get install mysql,但它还将要求在控制台中输入密码。
我该如何以非交互方式完成这项工作?也就是说,编写一个可以提供密码的脚本?
1 2 3 4 5
| #!/bin/bash
sudo apt-get install mysql # To install MySQL server
# How to write script for assigning password to MySQL root user
# End |
- 副本:stackoverflow.com/questions/1202347/…
1 2 3
| 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,您需要这样指定版本:
1 2 3
| 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,密钥略有不同:
1 2 3
| 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 |
用所需的根密码替换您的密码。(对于空的根密码,您的_密码也可以保留为空。)
如果您的shell不支持这里的字符串(zsh、ksh93和bash支持这些字符串),请使用:
1
| echo ... | sudo debconf-set-selections |
- 一定要将mysql-server-5.1部分更改为当前的mysql版本!
- 调整好了,谢谢!
- 我在capistrano中使用过这个,但是不得不使用stackoverflow.com/questions/7747759/&hellip将shell格式sh改为bash。
- 运行echo ... | sudo ...很糟糕,因为它会将密码留在非特权用户的shell历史记录中。当然,有很多方法可以解决这个问题。
- 实际上,使用这里的字符串是否会给您带来相同的漏洞?在这种情况下,使用sudo -i,然后直接从根提示运行debconf set选择更安全。或者你可以绕开一个非常复杂的方法来避免这一点,但也是安全的。
- 这个答案翻译为Mariadb,用maria-db-替换mysql-server-。随后出现的mysql-server/仍然没有受到影响。
- -part是不必要的-对我来说就像是一种魅力,如果没有它,它就更通用。
- 如果我想在dev框中保留空白密码,这对我不起作用。
- 这对后面的sudo apt-get install debconf-utils很好。
- 这对我在《流浪汉》中的角色很有用,使用的是Shell Provider。
- 在这里评论未来的自我。在我的例子中,我必须使用"echo"方法,同时使用一个竹子实例来实现部署自动化和通用的git合并fu。
- 这在最初对我不起作用,但在执行sudo-apt-get更新后起作用;apt-get-y升级
- 这太棒了!它起作用了,谢谢。但你是怎么发现的呢?
- @Lukx对于Mariadb,包是Mariadb服务器,而不是Maria DB服务器。不管怎样,谢谢你的留言。
- 我试了一下sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password root',收到了错误信息:sh: 2: Syntax error: redirection unexpected。
- 试试这个,让我们知道它是否有效:printf 'mysql-server mysql-server/root_password password your_password' | sudo debconf-set-selection和printf 'mysql-server mysql-server/root_password_again password your_password' | sudo debconf-set-selection。
- @迪米特拉·多洛夫是的,这很有效——我在Ubuntu 14.04:)谢谢。请注意,您的评论中有错别字,debconf-set-selections末尾缺少"s"。
- 为了安全起见,以后是否应该以某种方式取消这些设置?
- 嗨,Janw,是的,看这篇文章。
- 仅供参考,因为我在这上面停留了一个小时:你必须设置一个密码。空字符串不起作用!一定是什么东西。
- 我不知道为什么这对我不起作用。我尝试了上面和其他答案中可能描述的所有方法,但密码始终保持为空,我甚至检查了deb set selections值,它们都正确存在。我最终做了类似的事情,首先使用默认文件连接,然后更改密码:stackoverflow.com/questions/46955693/&hellip;。PS:我在CircleCI中安装MySQL,这是机器类型的执行器,所以没有Docker。
这应该会起作用的
1 2
| export DEBIAN_FRONTEND=noninteractive
sudo -E apt-get -q -y install mysql-server |
当然,它会给你留下一个空白的根密码-所以你需要运行类似
1
| mysqladmin -u root password mysecretpasswordgoeshere |
然后向帐户添加密码。
- 这对我不起作用。
- 使用MySQL5.5在新的Ubuntu12.04实例中测试和工作
- 这对我来说不适用于Ubunutu 12.04 LTS 64位和MySQL5.5的Azure平台映像。
- 我在EC2上的Ubuntu 12.04不工作,上面的答案是
- 我在2004年12月为我工作,但被接受的回答让我无法以根用户身份登录。无法猜测密码
- 这使我无法以根用户身份登录,因为我猜不到密码。我把代码放在一个bash文件中并执行。使用Ubuntu 12.04。
- 不在Ubuntu 13.10上工作
- 似乎在与ENV DEBIAN_FRONTEND noninteractive的dockerfile中工作,但不在bash中工作(12.04)
- 在Ubuntu 14.04 LTS工作,也有非交互式。
- 如果使用sudo安装,请使用-e以便传递环境变量。sudo-e apt get-q-y安装mysql服务器。
- 您还可以通过预先设置env变量-EDOCX1[1]将该变量直接添加到命令中(不会污染外部环境)。
- 在做了apt-get update之后,它在Ubuntu 14.04 LTS和mysql-server-5.5上为我工作。
- 这样做时,mysql密码将存储在bash日志中。
- @在命令前添加一个空格,它不会出现在日志中。
- 在Debian 8.2上为我工作——我从@PatrickCullen和@Yonilavi合并得到了DEBIAN_FRONTEND=noninteractive sudo -E apt-get -q -y install mysql-server——工作得很有魅力!
- 这不管用。mysqladmin不会返回错误,但似乎也没有成功设置密码。
- 我无法让这个方法与Ubuntu16.04和MySQLServer5.7一起工作。但在我搬到16点04分之前,它确实起了作用。
- 您也可以执行sudo DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server,sudo知道如何处理传递给它的环境变量分配。
- 您能详细说明不同的命令行选项是什么,在这个上下文中的目的是什么吗?
- 在码头工作?喜欢迪米特的回答。
- 好吧,现在你怎么在一个"贝壳"的迷走神经阻滞中做到这一点?
另一种方法是:
1 2 3
| 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"。我不能让它用简单的引号''设置一个空密码,但这个解决方案对我来说已经足够了。
基于这里的解决方案。
- echo'mysql-server-5.5 mysql server/root_password password'sudo debconf set selections用于为我指定空密码。
- @新吉冈不适合我。如果在末尾放两个空格,它会将我的密码设置为一个空格。有了一个空间,它仍然会尝试给出提示,然后再把安装搞砸。
用途:
1 2 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'" |