Alterando o endereço de ligação do mysql em um script


10

Qual seria a melhor maneira de alterar o endereço de ligação do mysql no my.cnf a partir de um script de shell? Existe uma maneira de usar uma ferramenta como mysqladmin ou devo usar sed ou devo simplesmente anexá-la ao my.cnf e torcer para que a segunda entrada substitua a primeira (esta parece doente). Eu tento escrever um provisionador de shell simples para o vagrant que é executado após a instalação do mysql-server para permitir conexões de fora da VM.

Respostas:


17

Além do que foi dito por @nonsenz, se você usar os scripts de provisionamento do puphpet.com, poderá adicionar um arquivo bash à pasta / puphpet / files / startup-always e colocar todos os seus comandos lá. Sempre que o vagrant iniciar ou recarregar, ele chamará o 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

Ainda melhor (para permitir uma saída mais limpa)

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

Isso me permitiu conectar meu IDE (PhpStorm) diretamente ao banco de dados na minha máquina convidada via vagrant. É claro que dei ao usuário do mysql convidado acesso a '%' e encaminhei a porta 3306 no convidado para uma porta (3309) no host. A concessão de acesso também pode ser feita nesse arquivo.

Melhor ainda (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

O script inferior foi perfeito para barrar alguns bits pequenos (caixa do CentOS 6.5) - O uso sudoresultou em um erro "desculpe, você deve ter um tty" (corrigido apenas removendo 'sudo' das instruções) e meu serviço MySQL foi reiniciado usando /etc/init.d/mysqld stope /etc/init.d/mysqld start. Ambos podem ser apenas peculiaridades do CentOS, em vez de erros no script.
Adam Westbrook

9

Parece que sed é a maneira mais fácil neste contexto (após uma instalação limpa):

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'

O pacote Ubuntu é chamado 'augeas-tools'


Esta resposta precisa de mais explicações.
precisa saber é o seguinte

O uso do Augeas (conforme observado em uma das outras respostas) permite a manipulação de arquivos de configuração. Este exemplo mostra como isso é feito.
Peter Childs

Ao tentar usar esta resposta: -sé "salvar automaticamente as atualizações". seté a ação que Augeas tomará com isso com esta linha. /files/etc/mysql/my.cnfem qual parte / arquivo o Augest funcionará (ele carrega todos os / etc). /targeté um (? array?) de valores decodificados. [ . = "mysqld"]seleciona o número de destino com o valor "mysqld". bind-addressé o campo de endereço de ligação na seção "mysqld" e o valor após o espaço 0.0.0.0é o valor para o qual ele será definido.
Mike Lutz

0

Parece que você está procurando Augeas .

A página do projeto está aqui e alguma documentação e exemplos estão aqui. O MySQL está incluído na página de lentes de estoque, mas infelizmente a documentação está vinculada a uma página 404 agora.

Existem também alguns exemplos de uso no Puppet aqui .


parece interessante. mas eu acho que antes de usar algo como isto só para mudar o bind-address i ficar com sed :-)
nonsenz

puppetlabs / inifile pode funcionar também, assim que você se livrar do vagrant e passar para o gerenciamento de configuração profissional ...
Michael Hampton

1
A abordagem sed só funcionará se a entrada já existir, pois as seções são importantes no inifile. A abordagem Augeas funcionará independentemente, porque colocará a entrada na posição correta.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.