เนื่องจากฉันใช้เวลาพอสมควรในการแก้ไขปัญหานี้และมักจะกลับมาที่หน้านี้เมื่อค้นหาข้อผิดพลาดนี้ฉันจะทิ้งวิธีแก้ปัญหาไว้ที่นี่โดยหวังว่าใครสักคนจะช่วยประหยัดเวลาที่ฉันเสียไป แม้ว่าในกรณีของฉันฉันใช้ mariadb แทน MySql แต่คุณอาจยังปรับแก้ปัญหานี้ให้เข้ากับความต้องการของคุณได้
ปัญหาของฉัน
เหมือนกัน แต่การตั้งค่าของฉันแตกต่างกันเล็กน้อย (mariadb แทน mysql):
ติดตั้ง mariadb ด้วย homebrew
$ brew install mariadb
เริ่มต้นภูต
$ brew services start mariadb
พยายามเชื่อมต่อและได้รับข้อผิดพลาดดังกล่าวข้างต้น
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ทางออกของฉัน
ค้นหาmy.cnf
ไฟล์ที่ใช้mysql
(ตามที่แนะนำในความคิดเห็นนี้):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
ตรวจสอบว่าไฟล์ซ็อกเก็ต Unix ทำงานอยู่ที่ใด (เกือบตามที่อธิบายไว้ที่นี่ ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(คุณอาจต้องการgrep mysql
แทน mariadb)
เพิ่มไฟล์ซ็อกเก็ตที่คุณพบ~/.my.cnf
(สร้างไฟล์หากจำเป็น) (สมมติว่า~/.my.cnf
อยู่ในรายการเมื่อรันmysql --verbose ...
คำสั่ง - จากด้านบน):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
รีสตาร์ท mariadb ของคุณ:
$ brew services restart mariadb
หลังจากนี้ฉันสามารถเรียกใช้ mysql และรับ:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
ดังนั้นฉันจึงเรียกใช้คำสั่งด้วยสิทธิ์ superuser แทนและหลังจากป้อนรหัสผ่านแล้วฉันได้รับ:
$ sudo mysql -uroot
MariaDB [(none)]>
หมายเหตุ:
ฉันไม่ค่อยแน่ใจเกี่ยวกับกลุ่มที่คุณต้องเพิ่มซ็อกเก็ตก่อนอื่นฉันมี [ไคลเอนต์เซิร์ฟเวอร์] แต่ฉันคิดว่า [ไคลเอนต์] น่าจะเพียงพอแล้ว เลยเปลี่ยนใหม่ก็ยังใช้ได้
เมื่อเรียกใช้mariadb_config | grep socket
ฉันได้รับ:
--socket [/tmp/mysql.sock]
ซึ่งค่อนข้างสับสนเนื่องจากดูเหมือนว่า/usr/local/mariadb/data/mariadb.sock
เป็นสถานที่จริง (อย่างน้อยก็ในเครื่องของฉัน)
ฉันสงสัยว่าฉันสามารถกำหนดค่า/usr/local/mariadb/data/mariadb.sock
ให้เป็นจริงได้ที่ไหน/tmp/mysql.sock
ดังนั้นฉันจึงสามารถใช้การตั้งค่าเริ่มต้นแทนที่จะต้องแก้ไข.my.cnf
(แต่ตอนนี้ฉันเหนื่อยเกินไปที่จะคิดออก ... )
ในบางครั้งฉันก็ทำสิ่งที่กล่าวถึงในคำตอบอื่น ๆ ก่อนที่จะมาถึงสิ่งนี้