Bir komut dosyasındaki mysql bağlama adresini değiştirme


10

My.cnf dosyasındaki mysql bağlama adresini bir kabuk komut dosyasından değiştirmenin en iyi yolu nedir? Mysqladmin gibi bir araç kullanarak bir yolu var mı ya da sed mi kullanmalı mıyım yoksa sadece my.cnf dosyasına eklemeli miyim ve ikinci girişin ilkinin üzerine yazmasını umuyorum (bu hasta geliyor). Vm dışından bağlantılara izin vermek için mysql-server kurduktan sonra çalışan vagrant için basit bir kabuk sağlayıcı yazmaya çalışın.

Yanıtlar:


17

@Nonsenz tarafından söylenenlere ekleme, puphpet.com'un sağlama komut dosyalarını kullanıyorsanız, / puphpet / files / startup-always klasörüne bir bash dosyası ekleyebilir ve tüm komutlarınızı buraya yerleştirebilirsiniz. Vagrant her başlatıldığında veya yeniden yüklediğinde komut dosyasını çağırır:

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

Daha İyi (daha temiz çıktı sağlamak iç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."
sudo service mysql stop
sudo service mysql start

Bu, IDE'mi (PhpStorm) doğrudan konuk makinemdeki veritabanına vagrant aracılığıyla bağlamamı sağladı. Tabii ki konuk mysql kullanıcı erişim '%' verdi ve konuk üzerinde 3306 bağlantı noktasını ana bilgisayardaki bir bağlantı noktasına (3309) iletti. Erişim izni de bu dosyada yapılabilir.

Even Better'er (mysql yürütme eklentisi)

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

Alt komut dosyası benim için birkaç küçük bit (CentOS 6.5 kutusu) çubuğu için mükemmeldi - Kullanmak sudo"üzgünüm, bir tty" hatasıyla sonuçlandı (sadece ifadelerden 'sudo' kaldırılarak düzeltildi) ve MySQL hizmetim kullanılarak yeniden başlatıldı /etc/init.d/mysqld stopve /etc/init.d/mysqld start. Bunların her ikisi de komut dosyasında hatalar yerine sadece CentOS tuhaflıkları olabilir.
Adam Westbrook

9

Sed bu bağlamda (temiz bir kurulumdan sonra) en kolay yol gibi görünüyor:

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 paketine 'augeas-tools' denir


Bu cevabın biraz daha açıklanması gerekiyor.
kasperd

Augeas kullanımı (diğer yanıtlardan birinde belirtildiği gibi), yapılandırma dosyalarının değiştirilmesine izin verir. Bu örnek, bunun nasıl yapıldığını gösterir.
Peter Childs

Bu yanıtı kullanmaya çalışmaktan: -s"tüm güncellemeleri otomatik kaydet". seteylem Augeas bu çizgi ile bu alacaktır. /files/etc/mysql/my.cnfAugest'in hangi bölüm / dosya üzerinde çalışacağı (tüm / etc yükler). /targetkodu çözülmüş değerlerin (? dizisi?) [ . = "mysqld"]hangi hedef numarasının "mysqld" değerine sahip olduğunu seçer. bind-address"mysqld" bölümündeki bağlanma adresi alanıdır ve boşluktan 0.0.0.0sonraki değer ayarlanacağı değerdir.
Mike Lutz

0

Augeas'ı aradığın anlaşılıyor .

Proje sayfası burada ve bazı belgeler ve örnekler burada. MySQL stok lensleri sayfasında yer alıyor ancak maalesef dokümantasyon şimdi 404 sayfasına bağlanıyor.

Ayrıca burada Kukla içinde kullanmanın bazı örnekleri de vardır .


ilgi çekici görünüyor. ama sadece sed ile sopa adres-adresini değiştirmek için böyle bir şey kullanmadan önce düşünüyorum :-)
nonsenz

Eğer vagrant kurtulmak ve profesyonel yapılandırma yönetimine geçmek kez kuklalar / inifile de çalışabilir ...
Michael Hampton

1
Sed yaklaşımı yalnızca giriş zaten mevcutsa işe yarayacaktır, çünkü bölümler inifile için önemlidir. Augeas yaklaşımı ne olursa olsun işe yarayacaktır, çünkü girişi doğru konuma getirecektir.
inkaphink
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.