Cambiar la dirección de enlace de mysql dentro de un script

10

¿Cuál sería la mejor manera de cambiar la dirección de enlace mysql en my.cnf desde un script de shell? ¿Hay alguna manera de usar una herramienta como mysqladmin o debo usar sed o simplemente agregarlo a my.cnf y esperar que la segunda entrada sobrescriba la primera (esta suena enferma)? Intento escribir un simple aprovisionador de shell para vagabundo que se ejecuta después de instalar mysql-server para permitir conexiones desde fuera de vm.

nonsenz
fuente

Respuestas:

17

Agregando a lo que ha dicho @nonsenz, si usa los scripts de aprovisionamiento de puphpet.com, puede agregar un archivo bash a la carpeta / puphpet / files / startup-always y colocar todos sus comandos allí. Cada vez que vagabundo comienza o se recarga, llamará al 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

Aún mejor (para permitir una salida más limpia)

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

Esto me permitió conectar mi IDE (PhpStorm) directamente a la base de datos en mi máquina invitada a través de vagabundo. Por supuesto, le di acceso al usuario mysql invitado a '%' y reenvié el puerto 3306 del invitado a un puerto (3309) del host. La concesión de acceso también podría hacerse en este archivo también.

Aún mejor (mysql execute 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
fuente
El script inferior era perfecto para mí, salvo unos pocos bits (cuadro CentOS 6.5): el uso sudodio como resultado un error de "perdón, debe tener un tty" (solucionado simplemente eliminando 'sudo' de las declaraciones) y mi servicio MySQL se reinició usando /etc/init.d/mysqld stopy /etc/init.d/mysqld start. Ambos pueden ser solo peculiaridades de CentOS en lugar de errores con el script.
Adam Westbrook
9

Parece que sed es la forma más fácil en este contexto (después de una instalación limpia):

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

El paquete de Ubuntu se llama 'augeas-tools'

Peter Childs
fuente
Esta respuesta necesita más explicación.
Kasperd
El uso de Augeas (como se señala en una de las otras respuestas) permite la manipulación de archivos de configuración. Este ejemplo muestra cómo se hace esto.
Peter Childs
De intentar usar esta respuesta: -ses "guardar automáticamente cualquier actualización". setEs la acción que Augeas tomará con esto con esta línea. /files/etc/mysql/my.cnfen qué parte / archivo trabajará Augest (carga todo / etc). /targetes un (? array?) de valores decodificados. [ . = "mysqld"]selecciona cualquier número de destino que tenga el valor "mysqld". bind-addresses el campo de dirección de enlace en la sección "mysqld", y el valor después del espacio 0.0.0.0es el valor en el que se establecerá.
Mike Lutz
0

Parece que estás buscando Augeas .

La página del proyecto está aquí y hay documentación y ejemplos aquí. MySQL está incluido en la página de lentes de stock, pero desafortunadamente la documentación enlaza con una página 404 ahora.

También hay algunos ejemplos de su uso dentro de Puppet aquí .

Ladadadada
fuente
parece interesante. pero creo que antes de usar algo como esto solo para cambiar la dirección de enlace me
quedo
puppetlabs / inifile también podría funcionar, una vez que se deshaga de vagabundo y pase a la gestión de configuración profesional ...
Michael Hampton
1
El enfoque sed solo funcionará si la entrada ya existe, ya que las secciones importan en el archivo. El enfoque de Augeas funcionará independientemente, porque colocará la entrada en la posición correcta.
phaphink