เปลี่ยน mysql bind-address ภายในสคริปต์


10

อะไรจะเป็นวิธีที่ดีที่สุดในการเปลี่ยน mysql bind-address ใน my.cnf จาก shell script? มีวิธีการใช้เครื่องมือเช่น mysqladmin หรือฉันควรใช้ sed หรือฉันควรผนวกเข้ากับ my.cnf และหวังว่ารายการที่สองจะเขียนทับแรก (อันนี้ฟังดูไม่ดี) ฉันพยายามเขียน shell sheller แบบธรรมดาสำหรับคนจรจัดที่ทำงานหลังจากติดตั้ง mysql-server เพื่ออนุญาตการเชื่อมต่อจากภายนอก vm

คำตอบ:


17

การเพิ่มสิ่งที่ถูกกล่าวถึงโดย @nonsenz หากคุณใช้สคริปต์การจัดเตรียมของ puphpet.com คุณสามารถเพิ่มไฟล์ bash ไปยังโฟลเดอร์ / puphpet / files / startup-always และวางคำสั่งทั้งหมดของคุณไว้ที่นั่น เมื่อใดก็ตามที่คนจรจัดเริ่มต้นหรือโหลดซ้ำมันจะเรียกสคริปต์:

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) บนโฮสต์ สิทธิ์การเข้าถึงสามารถทำได้ในไฟล์นี้เช่นกัน

Better'er ที่ดีกว่า (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 ที่ไม่ได้มีข้อผิดพลาดกับสคริปต์
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'

แพ็คเกจ Ubuntu เรียกว่า 'augeas-tools'


คำตอบนี้ต้องการคำอธิบายเพิ่มเติม
kasperd

การใช้ Augeas (ดังที่กล่าวไว้ในคำตอบอื่น) ช่วยให้สามารถจัดการไฟล์การกำหนดค่าได้ ตัวอย่างนี้แสดงวิธีการทำ
Peter Childs

จากความพยายามที่จะใช้คำตอบนี้: -s"อัตโนมัติบันทึกการปรับปรุงใด ๆ " setคือการกระทำ Augeas จะใช้กับสิ่งนี้กับสายนี้ /files/etc/mysql/my.cnfส่วนใด / ไฟล์ Augest จะทำงานบน (โหลดทั้งหมด / etc) /target(? อาร์เรย์) ของค่าที่ถอดรหัสคืออะไร [ . = "mysqld"]เลือกหมายเลขเป้าหมายใดก็ตามที่มีค่า "mysqld" bind-addressเป็นฟิลด์ bind-address ในส่วน "mysqld" และค่าที่อยู่หลังช่องว่าง0.0.0.0คือค่าที่จะถูกตั้งค่าเป็น
Mike Lutz

0

เสียงเหมือนคุณกำลังมองหาAugeas

หน้าโครงการอยู่ที่นี่และบางส่วนเอกสารและตัวอย่างอยู่ที่นี่ MySQL รวมอยู่ในหน้าเลนส์หุ้นแต่น่าเสียดายที่เอกสารเชื่อมโยงไปยังหน้า 404 ในขณะนี้

นอกจากนี้ยังมีตัวอย่างของการใช้มันภายในหุ่นกระบอกที่นี่


ดูน่าสนใจ แต่ฉันคิดว่าก่อนที่จะใช้สิ่งนี้เช่นนี้เพียงเพื่อเปลี่ยนที่อยู่ที่ผูกฉันติดกับ sed :-)
nonsenz

puppetlabs / inifileก็สามารถทำงานได้เช่นกันเมื่อคุณกำจัดคนเร่ร่อนและย้ายไปที่การจัดการการกำหนดค่าระดับมืออาชีพ ...
Michael Hampton

1
วิธีการ sed จะใช้งานได้หากรายการมีอยู่แล้วเนื่องจากส่วนมีความสำคัญใน inifile วิธีการของ Augeas จะใช้งานได้โดยไม่คำนึงถึงเพราะมันจะเข้ามาในตำแหน่งที่ถูกต้อง
ℝaphink
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.