스크립트 내에서 mysql 바인드 주소 변경


10

쉘 스크립트에서 my.cnf의 mysql bind-address를 변경하는 가장 좋은 방법은 무엇입니까? mysqladmin과 같은 도구를 사용하는 방법이 있습니까? 또는 sed를 사용해야합니까, 아니면 단순히 my.cnf에 추가하고 두 번째 항목이 첫 번째 항목을 덮어 쓰길 희망합니다 (이것은 아프게 들립니다). mysql-server를 설치 한 후 VM 외부에서 연결을 허용하는 실행 기용 간단한 셸 프로비저닝을 작성하려고합니다.

답변:


17

@nonsenz의 말에 덧붙여 puphpet.com의 프로비저닝 스크립트를 사용하는 경우 / puphpet / files / startup-always 폴더에 bash 파일을 추가하고 모든 명령을 거기에 넣을 수 있습니다. vagrant가 시작되거나 다시로드 될 때마다 스크립트를 호출합니다.

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

더 나은 (더 깨끗한 출력을 가능하게하기 위해)

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

이를 통해 IDE (PhpStorm)를 방랑자를 통해 게스트 컴퓨터의 데이터베이스에 직접 연결할 수있었습니다. 물론 게스트 mysql 사용자에게 '%'에 대한 액세스 권한을 부여하고 게스트의 포트 3306을 호스트의 포트 (3309)로 전달했습니다. 이 파일에서도 액세스 권한을 부여 할 수 있습니다.

더 나은 (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

하단 스크립트는 몇 가지 작은 비트 (CentOS 6.5 상자)를 완벽하게 sudo만들었습니다. /etc/init.d/mysqld stop그리고 /etc/init.d/mysqld start. 둘 다 스크립트의 오류가 아니라 CentOS의 단점 일 수 있습니다.
Adam Westbrook

9

sed 가이 컨텍스트에서 가장 쉬운 방법 인 것처럼 보입니다 (새로 설치 한 후).

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'

우분투 패키지는 'augeas-tools'라고 불립니다.


이 답변에는 좀 더 설명이 필요합니다.
kasperd

Augeas를 사용하면 (다른 답변 중 하나에서 언급했듯이) 구성 파일을 조작 할 수 있습니다. 이 예제는 이것이 어떻게 수행되는지 보여줍니다.
Peter Childs

이 답변을 사용하려고하면 -s"업데이트 자동 저장"입니다. set이 라인으로 Augeas가 취할 조치입니다. /files/etc/mysql/my.cnf어떤 부분 / 파일 Augest가 작동하는지 (모든 / etc를로드합니다). /target디코딩 된 값의 (? array?)입니다. [ . = "mysqld"]"mysqld"값을 가진 대상 번호를 선택하십시오. bind-address"mysqld"섹션의 바인드 주소 필드이며 공백 뒤 0.0.0.0의 값은 설정 될 값입니다.
Mike Lutz

0

당신이 Augeas 찾고있는 것 같습니다 .

프로젝트 페이지는 여기에 몇 가지 문서예제는 여기에 있습니다. MySQL은 스톡 렌즈 페이지 에 포함되어 있지만 불행히도 설명서는 404 페이지로 연결됩니다.

여기 Puppet 내에서 사용하는 몇 가지 예가 있습니다 .


재미있어 보인다. 그러나 나는 sed로 붙어있는 바인딩 주소를 변경하기 위해 이와 같은 것을 사용하기 전에 생각합니다 :-)
nonsenz

꼭두각시를 제거하고 전문적인 구성 관리로 전환하면 puppetlabs / inifile 도 작동 할 수 있습니다 ...
Michael Hampton

1
sed 접근법은 섹션이 inifile에 중요하므로 항목이 이미 존재하는 경우에만 작동합니다. Augeas 접근 방식은 항목을 올바른 위치에 배치하므로 관계없이 작동합니다.
ℝaphink
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.