Zmiana adresu wiązania mysql w skrypcie

10

Jaki byłby najlepszy sposób zmiany adresu wiązania mysql w pliku my.cnf ze skryptu powłoki? Czy istnieje sposób użycia narzędzia takiego jak mysqladmin, czy powinienem użyć sed, czy też powinienem po prostu dołączyć go do my.cnf i mam nadzieję, że drugi wpis zastąpi pierwszy (ten brzmi źle). Próbuję napisać prosty program do obsługi powłoki dla włóczęgów, który działa po zainstalowaniu serwera mysql, aby umożliwić połączenia spoza maszyny wirtualnej.

nonsenz
źródło

Odpowiedzi:

17

Dodając do tego, co zostało powiedziane przez @nonsenz, jeśli używasz skryptów aprowizacyjnych puphpet.com, możesz dodać plik bash do folderu / puphpet / files / startup-always i umieścić tam wszystkie swoje polecenia. Za każdym razem, gdy włóczęga się uruchomi lub przeładuje, wywoła skrypt:

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

Jeszcze lepiej (aby umożliwić czystsze wyjście)

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

Umożliwiło mi to połączenie mojego IDE (PhpStorm) bezpośrednio z bazą danych na mojej maszynie-gościu przez włóczęgę. Oczywiście dałem gościowi mysql dostęp do '%' i przekierowałem port 3306 na gościa na port (3309) na hoście. Udzielenie dostępu można również wykonać w tym pliku.

Even Better'er (mysql uruchom dodaj)

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
źródło
Skrypt dolny był dla mnie idealny z wyjątkiem kilku małych bitów (pudełko CentOS 6.5) - Użycie sudospowodowało błąd „przepraszam, musisz mieć tty” (naprawiony przez usunięcie „sudo” z instrukcji) i moja usługa MySQL została zrestartowana przy użyciu /etc/init.d/mysqld stopa /etc/init.d/mysqld start. Oba mogą być po prostu dziwactwami CentOS, a nie błędami w skrypcie.
Adam Westbrook,
9

Wygląda na to, że sed jest najłatwiejszym sposobem w tym kontekście (po czystej instalacji):

sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 
nonsenz
źródło
2
augtool -s set '/files/etc/mysql/my.cnf/target[ . = "mysqld"]/bind-address 0.0.0.0'

Pakiet Ubuntu nazywa się „augeas-tools”

Peter Childs
źródło
Ta odpowiedź wymaga dodatkowych wyjaśnień.
kasperd
Korzystanie z Augeas (jak zaznaczono w jednej z pozostałych odpowiedzi) umożliwia manipulowanie plikami konfiguracyjnymi. Ten przykład pokazuje, jak to się robi.
Peter Childs,
Od próby użycia tej odpowiedzi: -sjest „automatycznie zapisuj wszelkie aktualizacje”. setjest działaniem, które Augeas podejmie w tej linii. /files/etc/mysql/my.cnfna której części / pliku Augest będzie działał (ładuje wszystkie / etc). /targetjest (? tablicą?) zdekodowanych wartości. [ . = "mysqld"]wybiera dowolny numer docelowy o wartości „mysqld”. bind-addressto pole adresu powiązania w sekcji „mysqld”, a wartość po spacji 0.0.0.0to wartość, dla której zostanie ustawiona.
Mike Lutz
0

Wygląda na to, że szukasz Augeasa .

Strona projektu jest tutaj, a niektóre dokumenty i przykłady są tutaj. MySQL znajduje się na stronie standardowych soczewek, ale niestety dokumentacja prowadzi teraz do strony 404.

Istnieje również kilka przykładów użycia go w Puppet tutaj .

Ladadadada
źródło
wygląda ciekawie. ale myślę, że zanim
użyję
puppetlabs / inifile też może działać, gdy pozbysz się włóczęgi i przejdziesz do profesjonalnego zarządzania konfiguracją ...
Michael Hampton
1
Podejście sed będzie działać tylko wtedy, gdy pozycja już istnieje, ponieważ sekcje mają znaczenie w pliku inifile. Podejście Augeas będzie działać niezależnie, ponieważ ustawi pozycję we właściwej pozycji.
ℝaphink