Changer l'adresse de liaison mysql dans un script

10

Quelle serait la meilleure façon de changer l'adresse de liaison mysql dans my.cnf à partir d'un script shell? Existe-t-il un moyen d'utiliser un outil comme mysqladmin ou devrais-je utiliser sed ou dois-je simplement l'ajouter au my.cnf et espérer que la deuxième entrée écrase la première (celle-ci semble malade). J'essaie d'écrire un simple provisionneur shell pour vagrant qui s'exécute après l'installation de mysql-server pour autoriser les connexions depuis l'extérieur du vm.

non-benz
la source

Réponses:

17

Pour ajouter à ce qui a été dit par @nonsenz, si vous utilisez les scripts d'approvisionnement de puphpet.com, vous pouvez ajouter un fichier bash dans le dossier / puphpet / files / startup-always et y placer toutes vos commandes. Chaque fois qu'un vagabond démarre ou se recharge, il appellera le 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

Encore mieux (pour permettre une sortie plus propre)

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

Cela m'a permis de connecter mon IDE (PhpStorm) directement à la base de données sur ma machine invitée via vagrant. Bien sûr, j'ai donné à l'utilisateur mysql invité l'accès à '%' et transmis le port 3306 sur l'invité à un port (3309) sur l'hôte. L'octroi d'accès pourrait également être fait dans ce fichier.

Encore mieux (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
la source
Le script du bas était parfait pour moi sauf quelques petits morceaux (boîte CentOS 6.5) - L'utilisation a sudoentraîné une erreur "désolé, vous devez avoir un tty" (corrigé en supprimant simplement 'sudo' des instructions) et mon service MySQL a été redémarré à l'aide de /etc/init.d/mysqld stopet /etc/init.d/mysqld start. Ces deux éléments peuvent être simplement des bizarreries de CentOS plutôt que des erreurs avec le script.
Adam Westbrook
9

Il semble que sed soit le moyen le plus simple dans ce contexte (après une installation propre):

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

Le paquet Ubuntu s'appelle 'augeas-tools'

Peter Childs
la source
Cette réponse a besoin de plus d'explications.
kasperd
L'utilisation d'Augeas (comme indiqué dans l'une des autres réponses) permet de manipuler les fichiers de configuration. Cet exemple montre comment procéder.
Peter Childs
De tenter d'utiliser cette réponse: -sest "enregistrer automatiquement toutes les mises à jour". setest l'action qu'Augeas entreprendra avec cette ligne. /files/etc/mysql/my.cnfsur quelle partie / fichier Augest travaillera (il charge tout / etc). /targetest un (? tableau?) de valeurs décodées. [ . = "mysqld"]sélectionne le numéro cible qui a la valeur "mysqld". bind-addressest le champ bind-address dans la section "mysqld", et la valeur après l'espace 0.0.0.0est la valeur à laquelle elle sera définie.
Mike Lutz
0

On dirait que vous cherchez Augeas .

La page du projet est ici et une documentation et des exemples sont ici. MySQL est inclus sur la page des objectifs en stock, mais malheureusement, la documentation renvoie à une page 404 maintenant.

Il y a aussi quelques exemples d'utilisation dans Puppet ici .

Ladadadada
la source
semble intéressant. mais je pense avant d'utiliser quelque chose comme ça juste pour changer l'adresse de liaison je colle avec sed :-)
nonsenz
puppetlabs / inifile pourrait aussi fonctionner, une fois que vous vous débarrasserez du vagabond et que vous passerez à une gestion de configuration professionnelle ...
Michael Hampton
1
L'approche sed ne fonctionnera que si l'entrée existe déjà, car les sections sont importantes dans l'inifile. L'approche Augeas fonctionnera malgré tout, car elle placera l'entrée dans la bonne position.
ℝaphink