Tidak dapat mengakses server MySQL dari jauh berjalan di Mac OS X

11

Saya memiliki server MySQL yang berjalan di komputer kerja saya, yang menjalankan Mac OS X Maverick. Saya ingin mengaksesnya dari komputer di rumah, yang juga memiliki Mac OS Maverick.

Dari terminal, jika dalam 1 tab, saya ssh ke komputer kerja saya dan biarkan sesi ssh duduk di sana tanpa menganggur, maka pada tab lain, saya dapat mengakses server MySQL.

Namun, tanpa sesi ssh berjalan, saya akan mendapatkan kesalahan berikut

ERROR 2003 (HY000): Tidak dapat terhubung ke server MySQL di 'SERVER_IP_ADDRESS' (60)

Saya sudah mencoba memodifikasi my.cnffile di server dengan mengomentari bind-address atau menugaskannya 0.0.0.0tetapi tidak berhasil.

Mengapa seperti itu? Bagaimana saya bisa mengkonfigurasi server sehingga memungkinkan akses jarak jauh tanpa harus menjalankan ssh pada klien? Dapatkah seseorang tolong bantu?

chepukha
sumber
Saya memiliki masalah yang sama dengan PostGIS yang berjalan pada remote OS X ... dapat terhubung ke basis data ketika sshdibuka dalam satu tab, tetapi sebaliknya tidak. Saya pikir masalahnya adalah bahwa proses server database dijeda atau tidak berjalan ketika saya tidak masuk ke server jauh.
andybega

Jawaban:

20

Saya telah membenturkan kepala saya terhadap kesalahan ini hari ini di OSX Yosemite dengan MySQL 5.7 baru-baru ini diperbarui dengan Homebrew. Mengikuti saran tentang StackOverflow dan tempat lain, saya mencari-cari my.cnffile yang semuanya ditentukan bind-address=0.0.0.0. Saya bahkan menghapus dan menginstal ulang MySQL mengikuti petunjuk ini dan kemudian menginstal ulang menggunakan brew install mysql. Masih tidak ada koneksi jarak jauh yang diizinkan.

Tidak sampai saya berlari ps -ax | grep mysqldan memperhatikan bahwa alamat bind dilewatkan dalam perintah peluncuran (dengan demikian menimpa my.cnffile apa pun ) yang saya gali lagi dan menemukan bahwa Homebrew mengikat MySQL ke 127.0.0.1 secara default .

Mengedit ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistuntuk mengubah --bind-address=127.0.0.1untuk --bind-address=0.0.0.0menyelesaikan masalah saya (yang terakhir harus diubah ke alamat IP tertentu jika ini bukan hanya mesin pengembangan).

Saya merasa ini adalah bagian penting dari informasi yang kurang dari sebagian besar sumber daya yang saya konsultasi sehingga mudah-mudahan memposting ini di sini akan membantu orang lain!

EDIT: Seperti yang ditunjukkan LeandroCR dalam komentar, menjalankan brew services restart mysqlakan menimpa file plist di LaunchAgents dengan yang default, yang menyebabkan MySQL secara misterius menolak koneksi lagi. Jadi saran yang lebih baik daripada yang saya tulis adalah sebagai berikut:

  1. Edit /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plistdan ganti --bind-address=127.0.0.1dengan bind-address=*atau --bind-address=0.0.0.0( lihat dokumentasi MySQL tentang bind-address )
  2. Mulai ulang mysql menggunakan brew services restart mysql

Maka MySQL harus terus menerima koneksi non-lokal sejak saat itu - sampai Anda menginstalnya kembali, mungkin.

Sunting (Sep 2019) Timothy Zorn menunjukkan bahwa masalah ini tidak lagi terjadi untuk MySQL 8.x diinstal dan dijalankan melalui Homebrew, jadi jawaban saya di atas, yang ditulis pada 2016, mungkin hanya relevan dengan 5.x.

Emma Burrows
sumber
3
Tip lain: Jika Anda menjalankan layanan $ brew restart mysql itu akan membersihkan file plist dari LaunchAgents setiap kali. Jika Anda ingin tetap mengubah edit /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Juga Emma terima kasih banyak !!!
LeandroCR
Saya telah menginstal mysql 5.6 menggunakan brew install mysql56, dan saya mengubah file ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plistdan keduanya /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Tapi tetap ketika saya meluncurkan mysql mysql.server start, perintah ps menunjukkan bahwa bind-address=127.0.0.1. Apakah ada file lain untuk diedit?
xi.lin
@ xi.lin Seperti yang saya pahami, mysql.server startmemintas LaunchAgent, jadi mungkin mendapatkan pengaturannya dari tempat lain. Untuk menggunakan pengaturan di plist, Anda mungkin harus menggunakanbrew services restart mysql
Emma Burrows
@ EmmaBurrows Menggunakan brew services restart mysqloutput Successfully started mysql` (label: homebrew.mxcl.mysql) `tetapi masih alamatnya 127.0.0.1 . Sebenarnya saya tidak bisa menemukan homebrew.mxcl.mysql.plistalih-alih memilikihomebrew.mxcl.mysql56.plist
xi.lin
1
Sampai sekarang ini bukan lagi cara kerjanya. Perintah yang digunakan untuk menjalankan mysqld_safebagi saya tidak memiliki bind_address. Sebaliknya itu ditentukan dalam /usr/local/etc/my.cnf.
Timmmm
6

Menjalankan locate my.cnfmenemukan file/usr/local/etc/my.cnf

  1. Edit file itu dan atur bind-address = 0.0.0.0
  2. Mulai ulang mysql: brew services restart mysql
Pablo Díaz Ogni
sumber
5

Saya harap Anda perlu membuat pengguna untuk akses jarak jauh dengan '%'wildcard dan memberikan izin pada DB.

Langkah 1:

Dalam my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) beri komentar pada alamat bind Anda

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

Dan restart Server MySQL.

Langkah 2:

Maka Anda perlu memberikan izin kepada pengguna untuk akses jarak jauh

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

Silakan lihat Cara mengaktifkan koneksi jarak jauh.

Abdul Manaf
sumber
Saya sudah mencoba pengaturan ini (mengomentari bind-address) sebelumnya dan tidak berhasil. Saya telah membuat pengguna dan memberikan semua izin juga. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha
Apakah Anda memiliki firewall? Jika ya tolong nonaktifkan itu.
Abdul Manaf
Ya, saya dapat mengakses server ketika firewall dimatikan. Tapi bisakah saya mengkonfigurasi firewall untuk memungkinkan akses jarak jauh ke server sql daripada mematikannya sepenuhnya? Di server, dalam pengaturan firewall, saya telah mengatur mysqld untuk "mengizinkan koneksi masuk"
chepukha
Apakah Anda memiliki SQL Server yang diinstal pada mesin yang sama?
Abdul Manaf
Ya saya lakukan. Maksud Anda SQL server dan Firewall pada mesin yang sama?
chepukha
0

Periksa iptables sebagai iptables -L

Jika IP Anda tidak ada maka tambahkan

Dalam hal ADD ADD Ubuntu untuk memungkinkan akses:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Priyanka Kariya
sumber