Mengubah alamat-mysql di dalam skrip

10

Apa cara terbaik untuk mengubah bind-address mysql di my.cnf dari skrip shell? Apakah ada cara menggunakan alat seperti mysqladmin atau haruskah saya menggunakan sed atau haruskah saya cukup menambahkannya ke my.cnf dan berharap entri kedua menimpa yang pertama (yang ini terdengar sakit). Saya mencoba menulis penyedia shell sederhana untuk gelandangan yang berjalan setelah menginstal mysql-server untuk memungkinkan koneksi dari luar vm.

nonsenz
sumber

Jawaban:

17

Menambahkan ke apa yang dikatakan oleh @nonsenz, Jika Anda menggunakan skrip penyediaan puphpet.com maka Anda dapat menambahkan file bash ke folder / puphpet / file / startup-selalu dan letakkan semua perintah Anda di sana. Setiap kali gelandangan mulai atau memuat ulang itu akan memanggil skrip:

mysql.sh

#!/bin/bash

echo "Updating mysql configs in /etc/mysql/my.cnf."

if [ 'sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf' ]; then

    echo "Updated mysql bind address in /etc/mysql/my.cnf to 0.0.0.0 to allow external connections."

    sudo /etc/init.d/mysql stop
    sudo /etc/init.d/mysql start

fi

Even Better (untuk mengaktifkan output yang lebih bersih)

mysql.sh

#!/bin/bash

echo "Updating mysql configs in /etc/mysql/my.cnf."
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
echo "Updated mysql bind address in /etc/mysql/my.cnf to 0.0.0.0 to allow external connections."
sudo service mysql stop
sudo service mysql start

Ini memungkinkan saya untuk menghubungkan IDE (PhpStorm) saya langsung ke database di mesin tamu saya melalui gelandangan. Tentu saja saya memberi tamu akses pengguna mysql ke '%' dan meneruskan port 3306 pada tamu ke port (3309) pada host. Hibah akses juga bisa dilakukan dalam file ini.

Even Better'er (mysql menjalankan add in)

mysql.sh

#!/bin/bash

echo "Updating mysql configs in /etc/mysql/my.cnf."
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
echo "Updated mysql bind address in /etc/mysql/my.cnf to 0.0.0.0 to allow external connections."

echo "Assigning mysql user user1 access on %."
sudo mysql -u user1 -pyourpassword --execute "GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY 'yourpassword' with GRANT OPTION; FLUSH PRIVILEGES;" yourdatabase
echo "Assigned mysql user user1 access on all hosts."

sudo service mysql stop
sudo service mysql start
Chukky Nze
sumber
Skrip bawah sempurna untuk saya, bar bit kecil (kotak CentOS 6.5) - Menggunakan sudomenghasilkan kesalahan "maaf, Anda harus memiliki tty" (diperbaiki dengan hanya menghapus 'sudo' dari pernyataan) dan layanan MySQL saya dimulai kembali menggunakan /etc/init.d/mysqld stopdan /etc/init.d/mysqld start. Keduanya mungkin hanya kebiasaan CentOS daripada kesalahan dengan skrip.
Adam Westbrook
9

Sepertinya sed adalah cara termudah dalam konteks ini (setelah instalasi yang bersih):

sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 
nonsenz
sumber
2
augtool -s set '/files/etc/mysql/my.cnf/target[ . = "mysqld"]/bind-address 0.0.0.0'

Paket Ubuntu disebut 'augeas-tools'

Peter Childs
sumber
Jawaban ini perlu penjelasan lebih lanjut.
kasperd
Menggunakan Augeas (sebagaimana dicatat dalam salah satu jawaban lain) memungkinkan manipulasi file konfigurasi. Contoh ini menunjukkan bagaimana ini dilakukan.
Peter Childs
Dari mencoba menggunakan jawaban ini: -s"simpan pembaruan otomatis". setadalah tindakan Augeas akan mengambil dengan ini dengan baris ini. /files/etc/mysql/my.cnfbagian / file Augest mana yang akan bekerja (ini memuat semua / etc). /targetadalah (? array?) dari nilai yang di-decode. [ . = "mysqld"]memilih nomor target mana saja yang memiliki nilai "mysqld". bind-addressadalah bidang bind-address di bagian "mysqld", dan nilai setelah spasi 0.0.0.0adalah nilai yang akan ditetapkan.
Mike Lutz
0

Kedengarannya seperti Anda sedang mencari Augeas .

The halaman proyek di sini dan beberapa dokumentasi dan contoh di sini. MySQL disertakan pada halaman stok lensa tetapi sayangnya tautan dokumentasi ke halaman 404 sekarang.

Ada juga beberapa contoh menggunakannya dalam Wayang di sini .

Ladadadada
sumber
terlihat menarik. tapi saya pikir sebelum menggunakan sesuatu seperti ini hanya untuk mengubah bind-address saya tetap dengan sed :-)
nonsenz
puppetlabs / inifile dapat bekerja juga, begitu Anda menyingkirkan gelandangan dan beralih ke manajemen konfigurasi profesional ...
Michael Hampton
1
Pendekatan sed hanya akan bekerja jika entri sudah ada, karena bagian penting dalam inifile. Pendekatan Augeas akan berhasil terlepas, karena akan menempatkan entri pada posisi yang tepat.
ℝaphink