Tidak dapat terhubung ke server MySQL lokal melalui soket homebrew


109

Saya baru-baru ini mencoba menginstal MySQL dengan homebrew ( brew install mysql) dan ketika saya mencoba menjalankannya, saya mendapatkan kesalahan berikut:

ERROR 2002 (HY000): Tidak dapat terhubung ke server MySQL lokal melalui soket '/tmp/mysql.sock' (2)

Tidak ada /tmp/mysql.sockatau a /var/lib/mysql.sock.

Saya telah mencari dan belum menemukan mysql.sockfile apa pun .

Bagaimana cara memperbaikinya?


Anda dapat melihat tautan ini jawaban GeekHades. stackoverflow.com/questions/4847069/…
GeekHades

Saya membuat menginstal mysql dan memiliki masalah yang sama setelah baterai laptop saya mati dan memaksa shutdown yang tidak lengkap. Layak dijalankan mysqlduntuk memeriksa berbagai hal dan memastikan MySQL dimatikan dengan benar terakhir kali. Jika mengalami shutdown 'kotor' (misalnya jika baterai laptop memaksa sistem mati) ini harus membersihkannya. Kemudian Anda dapat mulai server MySQL lagi: mysql.server start.
Dave Everitt

1
Jawaban ini berhasil untuk saya: stackoverflow.com/a/6378429/2641861
ArnoHolo

Ini terjadi pada saya setelah memulihkan Mac Mini baru dari cadangan Time Machine. Saya harus menghapus mysql@5.7 dan menginstalnya kembali agar bisa mulai bekerja. Sedikit palu tetapi relatif tidak menyakitkan karena semua konfigurasi saya dipertahankan.
Joshua Pinter

Jawaban:


93

Saat Anda menjalankan server melalui

mysql.server start

Anda akan melihat soket di /tmp/mysql.sock . Namun, sistem tampaknya mengharapkannya di /var/mysql/mysql.sock . Untuk memperbaikinya, Anda harus membuat symlink di / var / mysql :

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Ini menyelesaikannya untuk saya. Sekarang phpMyAdmin saya bekerja dengan baik dengan localhost dan 127.0.0.1 .

Penghargaan diberikan kepada Henry


1
Ini juga memecahkan masalah saya dengan Wordpress yang gagal terhubung ke mySQL. Sekali lagi terima kasih
Ayoub

20
Ketika saya mencoba, mysql.server startsaya mendapatkan ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Saya membutuhkan versi MySQL yang lebih lama, diinstal melalui brew install mysql@5.6.
Liron Yahdav

3
berlari. mysql.server startmemperbaikinya untuk saya
ivange94

@Liron, apakah Anda telah memperbaiki masalah yang Anda hadapi? Saya menghadapi masalah yang sama tanpa bantuan.
Buddy

@EB sudah lama sejak saya mengalami masalah ini tetapi melihat kembali komentar saya, Anda mencoba solusi untuk menginstal versi MySQL yang lebih lama? Selain itu, sayangnya saya kehabisan ide.
Liron Yahdav

61

Sepertinya server mysql Anda belum dimulai. Saya biasanya menjalankan perintah stop dan kemudian memulainya lagi:

mysqld stop
mysql.server start

Kesalahan yang sama, dan ini berhasil untuk saya.


89
. KESALAHAN! Server berhenti tanpa memperbarui file PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap

Saya melakukan mysqld &per komentar di atas, tetapi saya pikir itu mungkin akan melakukan hal yang sama karena mysqld stop saya cukup yakin dalam kasus saya itu karena shutdown yang tidak tepat.
Mitch VanDuyn

54

Saya memiliki beberapa direktori yang tersisa dari instalasi mysql (8.0) lain, yang tidak dihapus.

Saya menyelesaikan ini dengan melakukan hal berikut:

Pertama uninstall mysql

brew uninstall mysql@5.6

Hapus folder / file yang tidak dihapus

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Instal ulang mysql dan tautkan

brew install mysql@5.6
brew link --force mysql@5.6

Aktifkan dan mulai layanan

brew services start mysql@5.6

3
Terima kasih banyak :) Semua instruksi gagal tetapi milik Anda
Vyacheslav Loginov

1
Terima kasih - jawaban ini berakhir 24 jam kepala
terbentur

1
Ini juga berhasil untuk saya setelah mencoba semua yang lain di luar sana! Terima kasih!!!! :)
Eric

1
Sepertinya masalah bagi saya adalah saya masih memiliki / usr / local / var / mysql setelah instalasi sebelumnya. Menghapus berhasil! Terima kasih atas saran Anda.
themantimes8

Saya perlu menjalankan langkah "mysql_secure_installation" yang disebutkan oleh homebrew sebelum kesalahan ini menghilang.
searaig

27

Coba sambungkan menggunakan "127.0.0.1", bukan "localhost".


2
@Esteban MySQL akan mencoba untuk terhubung ke soket unix jika Anda menyuruhnya untuk terhubung ke "localhost". Jika Anda memintanya untuk menyambung ke 127.0.0.1, Anda memaksanya untuk menyambungkan ke soket jaringan. Jadi mungkin Anda telah mengkonfigurasi MySQL untuk hanya mendengarkan soket jaringan dan bukan ke soket sistem file. (Sumber: serverfault.com/a/295300/59101 )
Ardee Aram

Ini membantu saya memaksa klien mysql untuk menggunakan soket TCP, karena saya menjalankan terowongan SSH di localhost ke MySQL DB jarak jauh saya.
Iow

22

1) Jika Anda dapat melihat "mysql berhenti" saat Anda menjalankan perintah di bawah ini;

brew services list

2) dan jika Anda dapat memulai mysql dengan perintah di bawah ini;

mysql server start

ini berarti; mysql dapat dijalankan secara manual, tetapi tidak dimulai secara otomatis saat sistem operasi dijalankan. Menambahkan mysql ke layanan akan memperbaiki masalah ini. Untuk melakukannya, Anda dapat menjalankan perintah di bawah ini;

brew services start mysql

Setelah itu, Anda dapat memulai ulang sistem operasi Anda dan mencoba menghubungkan ke mysql untuk melihat apakah itu dimulai secara otomatis. Saya melakukan hal yang sama dan berhenti menerima kesalahan di bawah ini;

ERROR 2002 (HY000): Tidak dapat terhubung ke server MySQL lokal melalui soket '/tmp/mysql.sock' (2)

Saya harap ini membantu.


@berk itu membantu dalam kasus saya untuk mendapatkan kembali kesalahan tetapi meminta kesalahan lain 'ERROR 1045 (28000): Akses ditolak untuk pengguna' pengguna '@' localhost '(menggunakan kata sandi: TIDAK)'
Pratik Khadka

Hai @PratikKhadka, kesalahan yang Anda dapatkan sekarang, berarti mysql sedang berjalan, dan Anda memiliki masalah otentikasi. Menurut pesan kesalahan yang Anda posting, Anda menggunakan nama pengguna sebagai 'pengguna' dan tidak menggunakan kata sandi. Anda harus menggunakan nama pengguna dan kata sandi yang valid. Saya menyarankan Anda untuk memeriksa tautan berikut; " forums.mysql.com/read.php?34,140320,140324 "
Berk

Tidak perlu me-restart OS, menjalankan "brew services start mysql" sudah berhasil. Terima kasih!
AKS

Hai @AKS, Anda benar. Restart tidak diperlukan untuk membuatnya berfungsi. Saya mengedit jawabannya untuk menjelaskan mengapa restart diperlukan. Diperlukan untuk melihat apakah mysql dimulai secara otomatis saat OS dimulai. Terima kasih atas masukannya!
Berk

5

File /tmp/mysql.socktersebut mungkin bernama Named-Pipe, karena berada di folder sementara. Pipa bernama adalah File-Khusus yang tidak pernah disimpan secara permanen.

Jika kita membuat dua program, dan kita ingin satu program mengirim pesan ke program lain, kita bisa membuat file teks. Kami memiliki satu program yang menulis sesuatu di file teks dan program lain membaca apa yang program lain tulis. Itulah arti pipa, kecuali ia tidak menulis file ke hard disk komputer kita, IE tidak menyimpan file secara permanen (seperti yang kita lakukan ketika kita membuat file dan menyimpannya.)

Soket sama persis dengan Pipa. Perbedaannya adalah Soket biasanya digunakan melalui jaringan - antar komputer. Socket mengirimkan informasi ke komputer lain, atau menerima informasi dari komputer lain. Baik Pipes maupun Sockets menggunakan file sementara untuk dibagikan sehingga mereka dapat 'berkomunikasi'.

Sulit untuk membedakan mana yang digunakan MySql dalam kasus ini. Tidak masalah.

Perintah tersebut mysql.server startharus membuat 'server' (program) menjalankan loop tak terbatasnya yang akan membuat file khusus itu dan menunggu perubahan ( listenuntuk penulisan).

Setelah itu, masalah umum mungkin adalah program MySql tidak memiliki izin untuk membuat file di komputer Anda, jadi Anda mungkin harus memberikannya hak akses root.

sudo mysql.server start

Ini bekerja dengan baik, terima kasih. Saya hanya berlari mysql.server start, mysql.server stopdan kemudian memulai layanan melalui homebrew lagi brew services start mysql@5.7dan semuanya berjalan lancar.
taylorthurlow

4

Setelah menginstal macos mojave, harus menghapus folder mysql di bawah /usr/local/var/mysqldan kemudian menginstal ulang melalui brew install mysqljika tidak, hal-hal terkait izin akan muncul di semua tempat.


Saya memecahkan masalah saya dengan jawaban Anda, saya telah menginstal mysql sebelumnya dan kemudian mencoba menurunkan versi ke mysql@5.6
Rodrirokr

Terima kasih Bung. itu memecahkan masalah saya juga. menghapus / usr / local / var / mysql dan menginstal ulang adalah solusi bagi saya.
Oğuz Can Sertel

1
Hati-hati: menghapus /usr/local/var/mysqlAnda juga akan menghapus semua database yang ada!
Leonardo

3

Saya mendapat kesalahan yang sama dan inilah yang membantu saya:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Hanya untuk menambah jawaban ini, Dalam kasus saya, saya tidak memiliki server mySQL lokal, itu berjalan di dalam wadah buruh pelabuhan. Jadi file socket tidak ada dan tidak akan bisa diakses oleh klien "mysql".

File sock dibuat oleh mysqld dan mysql menggunakan ini untuk berkomunikasi dengannya. Namun jika server mySql Anda tidak berjalan lokal, itu tidak memerlukan file sock.

Dengan menentukan nama host / ip file kaus kaki tidak diperlukan misalnya

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

Karena saya menghabiskan cukup banyak waktu untuk mencoba menyelesaikan ini dan selalu kembali ke halaman ini ketika mencari kesalahan ini, saya akan meninggalkan solusi saya di sini dengan harapan seseorang menghemat waktu saya yang hilang. Meskipun dalam kasus saya, saya menggunakan mariadb daripada MySql, Anda mungkin masih dapat menyesuaikan solusi ini dengan kebutuhan Anda.

Masalahku

sama, tetapi penyiapan saya sedikit berbeda (mariadb, bukan mysql):

Memasang mariadb dengan homebrew

$ brew install mariadb

Memulai daemon

$ brew services start mariadb

Mencoba menyambungkan dan mendapatkan kesalahan yang disebutkan di atas

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Solusi saya

cari tahu my.cnffile mana yang digunakan oleh mysql(seperti yang disarankan dalam komentar ini ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

periksa di mana file socket Unix berjalan (hampir seperti yang dijelaskan di sini ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(Anda mungkin ingin grep mysqldaripada mariadb)

Tambahkan file soket yang Anda temukan ~/.my.cnf(buat file jika perlu) (dengan asumsi ~/.my.cnfterdaftar saat menjalankan mysql --verbose ...perintah-dari atas):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Mulai ulang mariadb Anda:

$ brew services restart mariadb

Setelah ini saya bisa menjalankan mysql dan mendapatkan:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Jadi saya menjalankan perintah dengan hak superuser sebagai gantinya dan setelah memasukkan kata sandi saya, saya mendapat:

$ sudo mysql -uroot
MariaDB [(none)]>

Catatan:

  1. Saya tidak begitu yakin tentang grup di mana Anda harus menambahkan soket, pertama saya memilikinya [client-server] tetapi kemudian saya pikir [klien] sudah cukup. Jadi saya mengubahnya dan masih berfungsi.

  2. Saat menjalankan mariadb_config | grep socketsaya mendapatkan: --socket [/tmp/mysql.sock] yang agak membingungkan karena tampaknya itu /usr/local/mariadb/data/mariadb.sockadalah tempat sebenarnya (setidaknya di mesin saya)

  3. Saya bertanya-tanya di mana saya dapat mengonfigurasi /usr/local/mariadb/data/mariadb.sockagar benar-benar menjadi /tmp/mysql.socksehingga saya dapat menggunakan pengaturan default daripada harus mengedit saya .my.cnf(tetapi saya terlalu lelah sekarang untuk mengetahuinya ...)

  4. Pada titik tertentu saya juga melakukan hal-hal yang disebutkan dalam jawaban lain sebelum mengajukan ini.


2

Anda harus menjalankan mysql_install_db- cara termudah adalah jika Anda berada di direktori instal:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Atau, Anda dapat memberi makan mysql_install_dbsebuah basedirparameter seperti berikut:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Saya menghadapi masalah yang sama di mac saya dan menyelesaikannya, dengan mengikuti tutorial berikut

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Tetapi jangan lupa untuk mematikan atau menghapus versi lama sebelum melanjutkan.

Perintah:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Tolong jelaskan dengan beberapa contoh singkat bagaimana tautan yang Anda berikan, membantu Anda. Tautan bisa hilang, dan oleh karena itu ini bisa menjadi alasan jawaban Anda mungkin terhapus.
Kurt Van den Branden

2

Setelah restart, saya tidak dapat terhubung dengan mariadb lokal, pencarian juga membawa saya ke halaman ini dan saya ingin membagikan solusi saya kepada Anda.

Saya perhatikan bahwa direktori my.cnf.d di / usr / local / etc / hilang.

Ini adalah bug yang dikenal dengan homebrew yang dijelaskan dan diselesaikan di sana. https://github.com/Homebrew/homebrew-core/issues/36801

cara cepat untuk memperbaikinya: mkdir /usr/local/etc/my.cnf.d


Ini berhasil untuk saya. Tidak dapat tersambung ke mariadb lokal setelah brew updatedan mulai ulang. brew services listHasilnya menunjukkan status mariadb starteddengan warna kuning. Terima kasih atas tipnya.
nterms

1

Saat menjalankan mysql_secure_installation dan memasukkan kata sandi baru yang saya dapatkan:


Kesalahan: Tidak dapat terhubung ke server MySQL lokal melalui soket '/tmp/mysql.sock' (2)


Saya perhatikan ketika mencoba yang berikut dari jawaban ini :

netstat -ln | grep mysql

Itu tidak mengembalikan apa pun, dan saya mengartikannya bahwa tidak ada file .sock.

Jadi, saya menambahkan yang berikut ini ke file my.cnf saya (baik di /etc/my.cnf atau dalam kasus saya, /usr/local/etc/my.cnf ).

Dibawah:

[mysqld]
socket=/tmp/mysql.sock

Dibawah:

[client]
socket=/tmp/mysql.sock

Ini didasarkan pada posting ini .

Kemudian hentikan / mulai mysql lagi dan coba lagi mysql_secure_installation yang akhirnya membiarkan saya memasukkan kata sandi root baru saya dan melanjutkan dengan preferensi pengaturan lainnya.

Saya harap ini membantu seseorang. Sobat, aku benci hal ini ...


0

hanya untuk menyelesaikan utas ini. oleh karena itu MAMP (PRO) cukup sering digunakan

jalannya di sini

/Applications/MAMP/tmp/mysql/mysql.sock

0

Saya secara manual memulai mysql di panel preferensi sistem dengan menginisialisasi database dan kemudian memulainya. Ini memecahkan masalah saya.


0

Dalam kasus saya, pelakunya ditemukan di file log:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Jadi saya mengganti nama ib_logfile0untuk menghilangkan kesalahan (saya harus melakukan hal yang sama ib_logfile1setelah itu).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Saya memiliki masalah yang sama. Setelah mencoba semua metode ini tanpa hasil, saya melakukan hal berikut:

tail -f the-mysql-or-maria-db-error-file.err

di konsol lain:

brew services restart mariadb

Saya melihat kesalahan berikut:

"MAC HOMEBREW Pemulihan kerusakan gagal. Perbaiki masalah (jika, misalnya, kesalahan kehabisan memori) dan mulai ulang, atau hapus log tc dan mulai mysqld dengan"

Jadi saya mengubah tc.logekstensi menjadi tc.log.txtdan memulai ulang mariadb

brew services restart mariadb

dan selesai!



0

Bagi saya, saya sudah mariadblama menginstal , lalu menginstal mysql@5.7.

Ketika saya mengeksekusi mysql -uroot, saya mendapatkan error: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Membaca jawabannya:

  • Saya mencopot pemasangan mariadb
  • Menghapus folder /usr/local/var/mysql
  • Jalankan perintahnya mysqld --initialize

Kemudian saya bisa mysql -uroot -p


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.