在 Ubuntu 上脚本化安装 MySQL

Luk*_*uke 23 mysql scripting ubuntu installation

我需要编写一个脚本来从全新的 Ubuntu 服务器安装中构建我的服务器。在诸如 Apache 和 PHP 之类的东西中,它需要安装 MySQL。这里唯一的问题是,当我使用 apt-get 安装 MySQL 时,在某些时候安装会弹出一个对话框,允许我输入我的 root 密码。即,需要人机交互。

如何在安装过程中绕过此屏幕并在仍然使用 apt-get 安装 MySQL 的同时避免人为交互?

Ste*_*ven 31

您需要预置 debconf 数据库。在您尝试此操作之前,需要先安装 debconf。

mysql 和 ubuntu 的版本可以改变这一行:

echo mysql-server mysql-server/root_password select PASSWORD | debconf-set-selections
echo mysql-server mysql-server/root_password_again select PASSWORD | debconf-set-selections
Run Code Online (Sandbox Code Playgroud)

例如,你需要这个:

echo mysql-server-5.0 mysql-server/root_password password PASSWORD | debconf-set-selections
echo mysql-server-5.0 mysql-server/root_password_again password PASSWORD | debconf-set-selections
Run Code Online (Sandbox Code Playgroud)

  • `mysql -u root -p`怎么样 (3认同)

fat*_*ror 5

尽管 FAI 和类似系统在企业环境中很有帮助(他应该了解它们),但不幸的是,它们并不是万能药。

例如,如果他在远程机器上工作,可能是托管的、租用的服务器、没有受信任或专用网络的共置服务器,或者像 EC2 这样的云环境,该怎么办?任何 PXE 网络引导都不能在那里工作。然而,Puppet 和 Chef 似乎是可以帮助他的更通用的工具。

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage

Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
   ....
   ....
EOF
Run Code Online (Sandbox Code Playgroud)

您可以从已经设置好的系统上的 debconf 数据库中获取正确的值。这种技术可以让你把整个事情都放在一个 shell 脚本中。例如,来自 /var/cache/debconf/passwords.dat(注意在 Debian 和 5.1 和 Ubuntu 上同时使用 5.0 的能力,额外的条目不会伤害任何东西):

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get -qq -y install mysql-server
Name: mysql-server/root_password
Template: mysql-server/root_password
Value: YOURPASSWORD
Owners: mysql-server-5.1
Flags: seen

Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: YOURPASSWORD
Owners: mysql-server-5.1
Flags: seen

Name: mysql-server/root_password
Template: mysql-server/root_password
Value: YOURPASSWORD
Owners: mysql-server-5.0
Flags: seen

Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: YOURPASSWORD
Owners: mysql-server-5.0
Flags: seen

EOF
Run Code Online (Sandbox Code Playgroud)

另一种方法,也许更简单:(从 debconf-get-selections 或 debconf-utils 包中的 debconf-show 收集答案):

echo "Installing MySQL 5.0.."
sudo apt-get install -qqy debconf-utils
cat << EOF | debconf-set-selections
mysql-server-5.0 mysql-server/root_password password YOURPASSWORD
mysql-server-5.0 mysql-server/root_password_again password YOURPASSWORD
mysql-server-5.0 mysql-server/root_password seen true
mysql-server-5.0 mysql-server/root_password_again seen true
EOF
/usr/bin/apt-get -y install mysql-server-5.0 mysql-server
Run Code Online (Sandbox Code Playgroud)

运行 debconf-set-selections 后,检查您的答案: cat /var/cache/debconf/passwords.dat

并且,在测试时,请务必删除并清除所有数据库(尤其是存储它的 mysql 数据库)并修复您的配置数据库,以防它们损坏:

apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl 
Run Code Online (Sandbox Code Playgroud)

一些提示: 1) 你必须有看到标志和 _again 密码。2) 您不得在密码周围加上引号。它将进入一个不带引号的 MySQL 查询,因此如果需要,您必须自己引用它。这也意味着没有空格(我认为) 3)如果您遇到问题,请手动进行预置,然后自己直接运行 MySQL 安装(在普通终端/tty 中)并查看 debconf 告诉您什么。它会告诉您那里的警告和错误。