Modifica dell'indirizzo bind mysql all'interno di uno script


10

Quale sarebbe il modo migliore per cambiare l'indirizzo di bind mysql nel my.cnf da uno script di shell? Esiste un modo per usare uno strumento come mysqladmin o dovrei usare sed o dovrei semplicemente aggiungerlo a my.cnf e sperare che la seconda voce sovrascriva la prima (questa suona male). Provo a scrivere un semplice provisioner di shell per Vagrant che viene eseguito dopo l'installazione di mysql-server per consentire connessioni dall'esterno del VM.

Risposte:


17

Aggiungendo a quanto detto da @nonsenz, se si utilizzano gli script di provisioning di puphpet.com, è possibile aggiungere un file bash nella cartella / puphpet / files / startup-always e inserire tutti i comandi all'interno. Ogni volta che vagrant si avvia o ricarica, chiamerà lo script:

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

Ancora meglio (per consentire un'uscita più pulita)

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

Questo mi ha permesso di collegare il mio IDE (PhpStorm) direttamente al database sul mio computer guest tramite Vagrant. Ovviamente ho dato all'utente mysql l'accesso a '%' e ho inoltrato la porta 3306 sull'ospite a una porta (3309) sull'host. Anche la concessione dell'accesso può essere eseguita in questo file.

Anche meglio (mysql esegui il componente aggiuntivo)

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

Lo script inferiore è stato perfetto per me, a parte alcuni piccoli bit (casella CentOS 6.5) - L'utilizzo ha sudoprovocato un errore "scusa, devi avere un tty" (risolto rimuovendo semplicemente "sudo" dalle istruzioni) e il mio servizio MySQL è stato riavviato utilizzando /etc/init.d/mysqld stope /etc/init.d/mysqld start. Entrambi possono essere solo stranezze di CentOS piuttosto che errori con lo script.
Adam Westbrook,

9

Sembra che sed sia il modo più semplice in questo contesto (dopo un'installazione pulita):

sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 

2
augtool -s set '/files/etc/mysql/my.cnf/target[ . = "mysqld"]/bind-address 0.0.0.0'

Il pacchetto Ubuntu si chiama 'augeas-tools'


Questa risposta necessita di ulteriori spiegazioni.
Kasperd,

L'uso di Augeas (come indicato in una delle altre risposte) consente la manipolazione dei file di configurazione. Questo esempio mostra come è fatto.
Peter Childs,

Dal tentativo di utilizzare questa risposta: -sè "salva automaticamente eventuali aggiornamenti". setè l'azione che Augeas intraprenderà con questa linea. /files/etc/mysql/my.cnfsu quale parte / file Augest funzionerà (carica tutto / etc). /targetè un (? array?) di valori decodificati. [ . = "mysqld"]seleziona il numero target che ha il valore "mysqld". bind-addressè il campo dell'indirizzo bind nella sezione "mysqld" e il valore dopo lo spazio 0.0.0.0è il valore su cui verrà impostato.
Mike Lutz,

0

Sembra che tu stia cercando Augeas .

La pagina del progetto è qui e alcuni documenti ed esempi sono qui. MySQL è incluso nella pagina degli obiettivi di stock ma sfortunatamente la documentazione ora si collega a una pagina 404.

Ci sono anche alcuni esempi di utilizzo all'interno di Puppet qui .


sembra interessante. ma penso prima di usare qualcosa del genere solo per cambiare l'indirizzo di bind che mi attengo a sed :-)
nonsenz

Anche le marionette / inifile potrebbero funzionare, una volta che ti sarai sbarazzato del vagabondo e passerai alla gestione della configurazione professionale ...
Michael Hampton

1
L'approccio sed funzionerà solo se la voce esiste già, poiché le sezioni contano nell'inifile. L'approccio di Augeas funzionerà a prescindere, perché posizionerà l'ingresso nella giusta posizione.
ℝafink
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.