14 votes

Changer l'adresse de liaison mysql dans un script

Quel serait le meilleur moyen de changer l'adresse de liaison mysql dans le fichier my.cnf à partir d'un script shell? Existe-t-il un moyen d'utiliser un outil tel que mysqladmin ou devrais-je utiliser sed ou devrais-je simplement l'ajouter au fichier my.cnf et espérer que la deuxième entrée écrase la première (celle-ci semble mauvaise). J'essaie d'écrire un simple provisionneur shell pour Vagrant qui s'exécute après l'installation de mysql-server pour permettre les connexions depuis l'extérieur de la machine virtuelle.

21voto

mkleint Points 995

Ajoutant à ce qui a été dit par @nonsenz, si vous utilisez les scripts de provisionnement de puphpet.com, vous pouvez ajouter un fichier bash au dossier /puphpet/files/startup-always et y placer toutes vos commandes. À chaque démarrage ou rechargement de Vagrant, le script sera appelé :

mysql.sh

#!/bin/bash

echo "Mise à jour des configurations de mysql dans /etc/mysql/my.cnf."

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

    echo "Adresse de liaison mysql mise à jour dans /etc/mysql/my.cnf à 0.0.0.0 pour permettre les connexions externes."

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

fi

Mieux encore (pour une sortie plus propre)

mysql.sh

#!/bin/bash

echo "Mise à jour des configurations de mysql dans /etc/mysql/my.cnf."
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
echo "Adresse de liaison mysql mise à jour dans /etc/mysql/my.cnf à 0.0.0.0 pour permettre les connexions externes."
sudo service mysql stop
sudo service mysql start

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

Mieux encore (ajout d'exécution mysql)

mysql.sh

#!/bin/bash

echo "Mise à jour des configurations de mysql dans /etc/mysql/my.cnf."
sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
echo "Adresse de liaison mysql mise à jour dans /etc/mysql/my.cnf à 0.0.0.0 pour permettre les connexions externes."

echo "Attribution de l'accès utilisateur mysql user1 sur %."
sudo mysql -u user1 -pvotreMotDePasse --execute "GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY 'votreMotDePasse' with GRANT OPTION; FLUSH PRIVILEGES;" votrebasededonnées
echo "Accès utilisateur mysql user1 attribué sur tous les hôtes."

sudo service mysql stop
sudo service mysql start

13voto

korro Points 391

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

4voto

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

Le paquet Ubuntu s'appelle 'augeas-tools'

1voto

Brad Points 3206

Il semble que vous recherchiez Augeas.

La page du projet est ici et certains documentations et exemples sont ici. MySQL est inclus sur la page des lentilles de base mais malheureusement les liens vers la documentation mènent maintenant à une page 404.

Il y a aussi quelques exemples de son utilisation avec Puppet ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X