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.cnf
file di server dengan mengomentari bind-address atau menugaskannya 0.0.0.0
tetapi 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?
ssh
dibuka 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.Jawaban:
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.cnf
file yang semuanya ditentukanbind-address=0.0.0.0
. Saya bahkan menghapus dan menginstal ulang MySQL mengikuti petunjuk ini dan kemudian menginstal ulang menggunakanbrew install mysql
. Masih tidak ada koneksi jarak jauh yang diizinkan.Tidak sampai saya berlari
ps -ax | grep mysql
dan memperhatikan bahwa alamat bind dilewatkan dalam perintah peluncuran (dengan demikian menimpamy.cnf
file 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.plist
untuk mengubah--bind-address=127.0.0.1
untuk--bind-address=0.0.0.0
menyelesaikan 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 mysql
akan 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:/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist
dan ganti--bind-address=127.0.0.1
denganbind-address=*
atau--bind-address=0.0.0.0
( lihat dokumentasi MySQL tentang bind-address )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.
sumber
brew install mysql56
, dan saya mengubah file~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist
dan keduanya/usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist
. Tapi tetap ketika saya meluncurkan mysqlmysql.server start
, perintah ps menunjukkan bahwabind-address=127.0.0.1
. Apakah ada file lain untuk diedit?mysql.server start
memintas LaunchAgent, jadi mungkin mendapatkan pengaturannya dari tempat lain. Untuk menggunakan pengaturan diplist
, Anda mungkin harus menggunakanbrew services restart mysql
brew services restart mysql
outputSuccessfully started
mysql` (label: homebrew.mxcl.mysql) `tetapi masih alamatnya127.0.0.1
. Sebenarnya saya tidak bisa menemukanhomebrew.mxcl.mysql.plist
alih-alih memilikihomebrew.mxcl.mysql56.plist
mysqld_safe
bagi saya tidak memilikibind_address
. Sebaliknya itu ditentukan dalam/usr/local/etc/my.cnf
.Menjalankan
locate my.cnf
menemukan file/usr/local/etc/my.cnf
bind-address = 0.0.0.0
brew services restart mysql
sumber
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
Dan restart Server MySQL.
Langkah 2:
Maka Anda perlu memberikan izin kepada pengguna untuk akses jarak jauh
Silakan lihat Cara mengaktifkan koneksi jarak jauh.
sumber
mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
Periksa iptables sebagai iptables -L
Jika IP Anda tidak ada maka tambahkan
Dalam hal ADD ADD Ubuntu untuk memungkinkan akses:
sumber