ไม่สามารถเข้าถึงเซิร์ฟเวอร์ MySQL ระยะไกลที่ทำงานบน Mac OS X


11

ฉันมีเซิร์ฟเวอร์ MySQL ที่ทำงานบนคอมพิวเตอร์ที่ทำงานซึ่งใช้ Mac OS X Maverick ฉันต้องการเข้าถึงจากคอมพิวเตอร์ที่บ้านซึ่งมี Mac OS Maverick ด้วย

จากเทอร์มินัลถ้าใน 1 แท็บฉัน ssh ไปยังคอมพิวเตอร์ที่ทำงานของฉันและปล่อยให้เซสชัน ssh นั่งอยู่ที่นั่นโดยไม่ต้องว่างจากนั้นอีกแท็บอื่นฉันสามารถเข้าถึงเซิร์ฟเวอร์ MySQL ได้

อย่างไรก็ตามหากไม่มีการใช้งาน ssh ฉันจะได้รับข้อผิดพลาด

ข้อผิดพลาด 2003 (HY000):ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL บน 'SERVER_IP_ADDRESS' (60)

ฉันพยายามแก้ไขmy.cnfไฟล์บนเซิร์ฟเวอร์โดยการคอมเม้นต์ bind-address หรือกำหนดมัน0.0.0.0แต่มันใช้งานไม่ได้

ทำไมถึงเป็นเช่นนั้น ฉันจะกำหนดค่าเซิร์ฟเวอร์เพื่อให้อนุญาตการเข้าถึงระยะไกลโดยไม่ต้องเรียกใช้ ssh บนไคลเอนต์ได้อย่างไร มีคนช่วยได้ไหม


ฉันมีปัญหาเดียวกันกับ PostGIS ที่ทำงานบน OS X ระยะไกล ... สามารถเชื่อมต่อกับฐานข้อมูลเมื่อsshเปิดในแท็บเดียว แต่ไม่เช่นนั้น ฉันคิดว่าปัญหาคือกระบวนการเซิร์ฟเวอร์ฐานข้อมูลหยุดชั่วคราวหรือไม่ทำงานเมื่อฉันไม่ได้ลงชื่อเข้าใช้เซิร์ฟเวอร์ระยะไกล
andybega

คำตอบ:


20

ฉันได้ต่อสู้กับข้อผิดพลาดนี้ในวันนี้ใน OSX Yosemite กับ MySQL 5.7 ที่เพิ่งปรับปรุงด้วย Homebrew ทำตามคำแนะนำใน StackOverflow และที่อื่น ๆ ผมล่ารอบหลังจากไฟล์ทั้งหมดที่ระบุไว้my.cnf bind-address=0.0.0.0ฉันก็ถอดและติดตั้ง MySQL ทำตามคำแนะนำเหล่านี้brew install mysqlแล้วติดตั้งใหม่โดยใช้ ยังไม่อนุญาตการเชื่อมต่อระยะไกล

มันไม่ได้จนกว่าฉันวิ่งps -ax | grep mysqlและพบว่าที่อยู่ผูกที่ถูกส่งผ่านไปในคำสั่งการเปิดตัว (จึงเอาชนะใด ๆmy.cnfไฟล์) ที่ฉันขุดบางมากขึ้นและพบว่า Homebrew ผูก MySQL เพื่อ 127.0.0.1 โดยค่าเริ่มต้น

การแก้ไข~/Library/LaunchAgents/homebrew.mxcl.mysql.plistเปลี่ยนแปลง--bind-address=127.0.0.1เพื่อ--bind-address=0.0.0.0แก้ไขปัญหาของฉัน (อันหลังควรเปลี่ยนเป็นที่อยู่ IP เฉพาะหากนี่ไม่ใช่แค่เครื่องพัฒนา)

ฉันรู้สึกว่านี่เป็นข้อมูลที่ขาดหายไปจากแหล่งข้อมูลส่วนใหญ่ที่ฉันปรึกษาดังนั้นหวังว่าการโพสต์สิ่งนี้จะช่วยคนอื่นได้!

แก้ไข:ตามที่LeandroCRระบุไว้ในความคิดเห็นการทำงานbrew services restart mysqlจะเขียนทับไฟล์ plist ใน LaunchAgents ด้วยค่าเริ่มต้นซึ่งนำไปสู่ ​​MySQL ปฏิเสธการเชื่อมต่ออย่างลึกลับอีกครั้ง ดังนั้นคำแนะนำที่ดีกว่าสิ่งที่ฉันเขียนตอนแรกมีดังต่อไปนี้:

  1. แก้ไข/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plistและแทนที่--bind-address=127.0.0.1ด้วยbind-address=*หรือ--bind-address=0.0.0.0( ดูเอกสารประกอบ MySQL ในที่อยู่ผูก )
  2. รีสตาร์ท mysql โดยใช้ brew services restart mysql

จากนั้น MySQL ควรยอมรับการเชื่อมต่อที่ไม่ใช่แบบท้องถิ่นต่อไปจนกว่าคุณจะติดตั้งใหม่

แก้ไข (ก.ย. 2019) Timothy Zornชี้ให้เห็นว่าปัญหานี้ไม่ได้เกิดขึ้นกับ MySQL 8.x ที่ติดตั้งและเรียกใช้ผ่าน Homebrew ดังนั้นคำตอบของฉันข้างต้นที่เขียนในปี 2559 อาจเกี่ยวข้องกับ 5.x เท่านั้น


3
เคล็ดลับอื่น ๆ : หากคุณใช้บริการ $ brew รีสตาร์ท mysql จะทำการล้างไฟล์ plist จาก LaunchAgents ทุกครั้ง หากคุณต้องการที่จะยืนยันการเปลี่ยนแปลงแก้ไข /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Emma ขอบคุณมาก !!!
LeandroCR

ฉันได้ติดตั้ง mysql 5.6 ด้วยbrew install mysql56และฉันเปลี่ยนทั้งไฟล์~/Library/LaunchAgents/homebrew.mxcl.mysql56.plistและ /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plistแต่ก็ยังคงเมื่อฉันเปิด MySQL ผ่านmysql.server startการแสดง PS bind-address=127.0.0.1คำสั่งว่า มีไฟล์อื่น ๆ ให้แก้ไขอีกหรือไม่
xi.lin

@ xi.lin ตามที่ฉันเข้าใจแล้วให้mysql.server startข้าม LaunchAgent ดังนั้นจึงอาจได้รับการตั้งค่าจากที่อื่น หากต้องการใช้การตั้งค่าในplistคุณอาจต้องใช้brew services restart mysql
Emma Burrows

@EmmaBurrows ใช้brew services restart mysqlเอาท์พุทSuccessfully started mysql` (ป้ายกำกับ: homebrew.mxcl.mysql) ` 127.0.0.1 แต่ยังคงอยู่คือ ที่จริงฉันหาไม่พบhomebrew.mxcl.mysql.plistแทนที่จะมีhomebrew.mxcl.mysql56.plist
xi.lin

1
ณ ตอนนี้สิ่งนี้ไม่ทำงานอีกต่อไป คำสั่งที่ใช้ในการวิ่งสำหรับฉันไม่เคยมีใครmysqld_safe แต่มันมีการระบุไว้ในbind_address /usr/local/etc/my.cnf
Timmmm

6

วิ่งlocate my.cnfพบไฟล์/usr/local/etc/my.cnf

  1. แก้ไขไฟล์และตั้งค่า bind-address = 0.0.0.0
  2. รีสตาร์ท mysql: brew services restart mysql

5

ฉันหวังว่าคุณจะต้องสร้างผู้ใช้สำหรับการเข้าถึงระยะไกลด้วย'%'ไวด์การ์ดและให้สิทธิ์กับฐานข้อมูล

ขั้นตอนที่ 1:

ใน my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) แสดงความคิดเห็นที่อยู่ผูกของคุณ

# bind-address        = xxx.xxx.xxx.xxx

และรีสตาร์ทเซิร์ฟเวอร์ MySQL

ขั้นตอนที่ 2:

จากนั้นคุณต้องให้สิทธิ์แก่ผู้ใช้สำหรับการเข้าถึงระยะไกล

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

โปรดดูวิธีการเปิดใช้งานการเชื่อมต่อระยะไกล


ฉันได้ลองใช้การตั้งค่านี้ (แสดงความคิดเห็นที่อยู่ผูก) ก่อนหน้านี้และใช้งานไม่ได้ ฉันได้สร้างผู้ใช้และได้รับอนุญาตทั้งหมดเช่นกัน mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha

คุณมีไฟร์วอลล์อยู่หรือไม่? หากเป็นโปรดปิดใช้งาน
Abdul Manaf

ใช่ฉันสามารถเข้าถึงเซิร์ฟเวอร์เมื่อปิดไฟร์วอลล์ แต่ฉันสามารถกำหนดค่าไฟร์วอลล์เพื่ออนุญาตให้เข้าถึงจากระยะไกลไปยังเซิร์ฟเวอร์ sql แทนที่จะปิดอย่างสมบูรณ์ได้หรือไม่ บนเซิร์ฟเวอร์ในการตั้งค่าไฟร์วอลล์ฉันได้ตั้งค่าmysqldเป็น "อนุญาตการเชื่อมต่อขาเข้า"
chepukha

คุณติดตั้ง SQL Server ไว้ในเครื่องเดียวกันหรือไม่
Abdul Manaf

ใช่ฉันทำ. คุณหมายถึงเซิร์ฟเวอร์ SQL และไฟร์วอลล์ในเครื่องเดียวกันหรือไม่
chepukha

0

ตรวจสอบ iptables เป็น iptables -L

หาก IP ของคุณไม่มีอยู่ให้เพิ่มเข้าไป

ในกรณีที่ Ubuntu ADD IP อนุญาตการเข้าถึง:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.