Зміна прив'язки mysql в сценарії


10

Який був би найкращий спосіб змінити mysql bind-адресу в my.cnf із скрипту оболонки? Чи є спосіб використання такого інструменту, як mysqladmin, або я повинен використовувати sed, чи слід просто додати його до my.cnf і сподіваюся, що другий запис замінить перший (цей звучить нудно). Я намагаюся написати простий захисник оболонки для бродячого, який запускається після установки mysql-сервера, щоб дозволити з'єднання ззовні vm.

Відповіді:


17

Додавши до сказаного @nonsenz, якщо ви використовуєте сценарії забезпечення пропуску puphpet.com, ви можете додати файл bash до папки / puphpet / files / startup-завжди і помістити туди всі свої команди. У будь-який час запуск або перезавантаження бродяга викликає сценарій:

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)

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призвело до помилки "вибачте, ви повинні мати tty" (виправлено просто видаленням "sudo" з висловлювань), і моя служба MySQL була перезапущена за допомогою /etc/init.d/mysqld stopі /etc/init.d/mysqld start. І те, і інше, може бути просто дивкою CentOS, а не помилками із сценарієм.
Адам Вестбрук

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'

Пакет Ubuntu називається "augeas-tools"


Ця відповідь потребує ще дещо пояснення.
kasperd

Використання Augeas (як зазначено в одній з інших відповідей) дозволяє маніпулювати файлами конфігурації. Цей приклад показує, як це робиться.
Пітер Чайлдс

Від спроби використовувати цю відповідь: -s"автоматично зберігати будь-які оновлення". setце дія, яку Огей буде приймати з цим за допомогою цього рядка. /files/etc/mysql/my.cnfнад якою частиною / файлом Augest працюватиме (він завантажує все / etc). /targetє (? масив?) декодованих значень. [ . = "mysqld"]вибирає, який номер цілі має значення "mysqld". bind-address- поле зв’язувальної адреси в розділі "mysqld", а значення після пробілу 0.0.0.0- це значення, на яке воно буде встановлено.
Майк Лутц

0

Здається, ти шукаєш Аугея .

Сторінка проекту тут, а деякі документи та приклади - тут. MySQL включений на сторінку фондових лінз, але, на жаль, зараз документація посилається на сторінку 404.

Тут також є кілька прикладів використання його в Ляльковій .


виглядає цікаво. але я думаю, перш ніж використовувати щось подібне просто змінити прив’язану адресу, яку я дотримуюся sed :-)
nonsenz

puppetlabs / inifile може також працювати, як тільки ви позбудетесь бродячих і перейдете до професійного управління конфігурацією ...
Майкл Хемптон,

1
Підхід sed працюватиме лише тоді, коли запис вже існує, оскільки розділи мають значення в inifile. Підхід Augeas буде працювати незалежно, тому що він поставить запис у правильному положенні.
phaphink
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.