Instal MySQL di Ubuntu tanpa prompt kata sandi

305

Bagaimana cara menulis skrip untuk menginstal server MySQL di Ubuntu?

sudo apt-get install mysql akan menginstal, tetapi juga akan meminta kata sandi untuk dimasukkan di konsol.

Bagaimana saya melakukan ini dengan cara yang tidak interaktif? Maksudnya, menulis skrip yang bisa memberikan kata sandi?

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

# How to write script for assigning password to MySQL root user
# End
Venkat
sumber

Jawaban:

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

Untuk versi tertentu, seperti mysql-server-5.6, Anda harus menentukan versi seperti ini:

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

Untuk server mysql-komunitas, kuncinya sedikit berbeda:

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

Ganti kata sandi Anda dengan kata sandi root yang diinginkan. (Sepertinya kata sandi Anda juga dapat dibiarkan kosong untuk kata sandi root kosong.)

Jika shell Anda tidak mendukung string di sini ( zsh , ksh93 dan bash mendukungnya), gunakan:

echo ... | sudo debconf-set-selections 
Dimitre Radoulov
sumber
1
Pastikan untuk mengubah mysql-server-5.1bagian ke versi mysql saat ini!
Dean Rather
19
Jawaban ini diterjemahkan ke MariaDB sebagai berikut dengan mengganti mysql-server-<version>dengan maria-db-<server>. Kejadian berikut mysql-server/ tetap tak tersentuh
Lukx
5
- Bagian <version> tidak perlu - berfungsi seperti pesona bagi saya, dan lebih umum tanpa itu.
msztolcman
2
Ini bekerja dengan baik setelahsudo apt-get install debconf-utils
Nazin
4
@Lukx untuk MariaDB, paketnya adalah mariadb-server, bukan maria-db-server. Terima kasih atas catatannya.
ywarnier
238

Ini harus melakukan trik

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

Tentu saja, ia meninggalkan Anda dengan kata sandi root kosong - jadi Anda ingin menjalankan sesuatu seperti

mysqladmin -u root password mysecretpasswordgoeshere

Setelah itu untuk menambahkan kata sandi ke akun.

Mez
sumber
3
Diuji dan bekerja di Ubuntu 12.04 contoh baru dengan MySQL 5.5
Alberto Megía
21
Jika Anda menginstal dengan sudo, gunakan -E sehingga variabel lingkungan diteruskan. Misalnya. sudo -E apt-get -q -y menginstal mysql-server.
Patrick Cullen
35
Anda juga dapat menambahkan variabel env langsung ke perintah (tanpa mencemari lingkungan eksternal) dengan menambahkannya -DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server
yoniLavi
2
Kata sandi mysql akan disimpan dalam bash log bila dilakukan dengan cara ini.
DutGRIFF
3
Bekerja untuk saya di Debian 8.2 - Saya menggabungkan dari @PatrickCullen dan @yoniLavi untuk mendapatkan - DEBIAN_FRONTEND=noninteractive sudo -E apt-get -q -y install mysql-serverbekerja seperti pesona!
MuffinTheMan
31

Cara lain untuk membuatnya bekerja:

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

Perhatikan bahwa ini hanya mengatur kata sandi ke "root". Saya tidak bisa mendapatkannya untuk menetapkan kata sandi kosong menggunakan tanda kutip sederhana '', tetapi solusi ini cukup bagi saya.

Berdasarkan solusi di sini .

chrisfargen
sumber
1
gema 'mysql-server-5.5 mysql-server / root_password kata sandi' | sudo debconf-set-choices berfungsi untuk menentukan kata sandi kosong untuk saya.
Tsuneo Yoshioka
4
@TsuneoYoshioka Tidak berfungsi untuk saya. Jika saya meletakkan dua spasi di bagian akhir, kata sandi saya setel menjadi satu ruang. Dengan satu ruang masih mencoba untuk memberikan prompt dan kemudian memasang instalasi.
mpen
3

Menggunakan:

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'"
BALAJI POTHULA
sumber
Terima kasih! mendefinisikan variabel di luar sudo selalu membuat saya.
Gaston Sanchez