Назад | Перейти на главную страницу

Изменение адреса привязки mysql в скрипте

Как лучше всего изменить адрес привязки mysql в my.cnf из сценария оболочки? Есть ли способ использовать такой инструмент, как mysqladmin, или мне следует использовать sed, или я должен просто добавить его в my.cnf и надеяться, что вторая запись перезапишет первую (это звучит плохо). Я пытаюсь написать простой провайдер оболочки для бродяги, который запускается после установки mysql-server, чтобы разрешать соединения извне vm.

В дополнение к сказанному @nonsenz, если вы используете сценарии подготовки puphpet.com, вы можете добавить файл bash в папку / puphpet / files / startup-always и поместить туда все свои команды. Каждый раз, когда 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) напрямую к базе данных на моем гостевом компьютере через vagrant. Конечно, я дал гостевому пользователю mysql доступ к «%» и перенаправил порт 3306 гостя на порт (3309) хоста. Предоставление доступа также может быть выполнено в этом файле.

Еще лучше (mysql выполняет надстройку)

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

Похоже, что в этом контексте sed - самый простой способ (после чистой установки):

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

Пакет Ubuntu называется augeas-tools.

Похоже, ты ищешь Авгий.

В страница проекта здесь и немного документация и Примеры здесь. MySQL включен в страница стоковых линз но, к сожалению, сейчас документация ссылается на страницу 404.

Есть также некоторые примеры использования в Puppet здесь.