ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock' (2)


441

ผมติดตั้งโคมไฟบนUbuntu 12.04 LTS (Precise Pangolin) จากนั้นตั้งค่ารหัสผ่าน root ในphpMyAdmin ฉันลืมรหัสผ่านและตอนนี้ฉันไม่สามารถเข้าสู่ระบบได้ เมื่อฉันพยายามเปลี่ยนรหัสผ่านผ่านเทอร์มินัลฉันจะได้รับ:

ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock' (2)

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันไม่สามารถเปิด LAMP ถอนการติดตั้งหรือติดตั้งใหม่ได้


อาจติดตั้งใหม่ได้ง่ายขึ้น: stackoverflow.com/a/31984482/763744
เคอร์เนล

รีเซ็ตรหัสผ่านโดยหยุด MySQL และเริ่มต้นในเซฟโหมดโดยข้ามตาราง
--grant

พิมพ์สิ่งนี้ในเทอร์มินัลของคุณ "sudo apt-get install mysql-server"
Humphrey

เริ่มหรือเริ่มบริการ mysql ใหม่และตรวจสอบ sudo /etc/init.d/mysql start หรือ sudo /etc/init.d/mysql restart
Jitendra Patel

systemctl start mariadb.service
Thewebus

คำตอบ:


253

ฉันเคยมีปัญหานี้และแก้ไขได้โดยการติดตั้งmysql-serverดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งmysql-serverไม่ใช่mysql-clientหรืออย่างอื่น

ข้อผิดพลาดนั้นหมายความว่าไฟล์/var/run/mysqld/mysqld.sockไม่มีอยู่หากคุณไม่ได้ติดตั้งmysql-serverไฟล์นั้นจะไม่มีอยู่ ดังนั้นในกรณีนี้ให้ติดตั้งด้วย

sudo apt-get install mysql-server

แต่ถ้าmysql-serverติดตั้งไว้แล้วและกำลังทำงานอยู่คุณต้องตรวจสอบไฟล์ปรับแต่ง

ไฟล์กำหนดค่าคือ:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

ใน/etc/my.cnfการตั้งค่าไฟล์ซ็อกเก็ตอาจจะเป็น/tmp/mysql.sockและในการตั้งค่าไฟล์ซ็อกเก็ตอาจจะเป็น/etc/mysql/my.cnf /var/run/mysqld/mysqld.sockดังนั้นลบหรือเปลี่ยนชื่อ/etc/mysql/my.cnfให้ใช้ mysql /etc/my.cnfจากนั้นปัญหาอาจแก้ไขได้


คุณสามารถใช้ mysql daemon ได้และติดตั้ง mysql-server-core แต่คุณต้องติดตั้ง mysql-server ซึ่งเป็นไบนารีและการตั้งค่าฐานข้อมูลระบบ!
เซดริก

99
sudo apt-get install mysql-serverการติดตั้ง mysql บน Ubuntu
2557

9
ถ้าฉันต้องอธิบายทางเทคนิคฉันจะบอกว่า 1) ถ้าคุณใช้ "mysql -u <user_name> -h <MySQL_Server_address> -p" คุณกำลังเรียกใช้ไคลเอนต์ mysql เพื่อเข้าถึงเซิร์ฟเวอร์ mysql หากคุณไม่ได้ติดตั้งเซิร์ฟเวอร์ mysql ในที่อยู่ / ที่อยู่ IP ที่คุณกล่าวถึงด้วย '-h' ข้อผิดพลาดด้านบนจะปรากฏขึ้น นี่เป็นเพราะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ผ่านซ็อกเก็ต mysql.sock 2) หากติดตั้งเซิร์ฟเวอร์ Mysql ไว้แล้วควรทำงานถ้าไม่คุณจะสังเกตเห็นข้อผิดพลาดเดียวกัน เพื่อให้มันทำงานบนเซิร์ฟเวอร์ที่คุณระบุ
Mayur Nagekar

1
สิ่งนี้อาจเกิดขึ้นได้หากคุณพยายามเปลี่ยนไดเรกทอรีที่จัดเก็บฐานข้อมูล แต่ใส่ไดเรกทอรีผิดในไฟล์การกำหนดค่า (เช่นพิมพ์ผิด) แทนที่จะบอกให้คุณทราบว่าไม่มีไดเรกทอรี typo มันจะบอกคุณว่าคุณไม่ได้รับอนุญาตให้เข้าถึง
Michael

4
ในขั้นตอนแรกฉันขอแนะนำให้พยายามรีสตาร์ทกระบวนการเซิร์ฟเวอร์ (ดูความแตกต่างของเซิร์ฟเวอร์ vs ไคลเอนต์) ลอง sudo /etc/init.d/mysql ทำการรีสตาร์ท โดยปกติแล้วการติดตั้งใหม่ไม่จำเป็น ฉันจะแนะนำให้คุณตรวจสอบไฟล์บันทึกก่อน ไม่เพียง แต่ไฟล์บันทึกของ mysql แต่ยัง / var / log / syslog ด้วยเนื่องจากคุณอาจมีปัญหาเซิร์ฟเวอร์ขัดข้องทำให้ mysql แยกย่อยเป็นผลข้างเคียง
Rein

212

ลองสิ่งนี้:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

นอกจากนี้ (เพื่อดูว่าทำงานหรือไม่):

telnet 127.0.0.1 3306 

อาจเป็นเพียงการกำหนดค่าผิดพลาดในmy.cnfไฟล์เป็น/etc/somewhere(ขึ้นอยู่กับการแจกจ่าย Linux )


1
ฉันได้รับข้อผิดพลาดเดียวกัน และฉันได้ตรวจสอบแล้วและการผูกเริ่มต้นใน main และ my.cnf นั้นถูกตั้งค่าเป็น 127.0.0.1 เรียบร้อยแล้ว อย่างไรก็ตามการใช้คำสั่งของคุณด้านบนทำให้ฉันสามารถเชื่อมต่อได้ จะต้องคอยตามล่าเพื่อดูว่าทำไมการทำ "mysql" จึงทำให้เกิดข้อผิดพลาด
cchiera

1
ฉันได้รับ telnet: ไม่สามารถเชื่อมต่อกับโฮสต์ระยะไกล: การเชื่อมต่อถูกปฏิเสธเนื่องจากคำสั่ง telnet อย่างไรก็ตาม apache ยังคงทำงานอยู่เนื่องจากฉันสามารถเปิด localhost ได้
Rishi Dua

@cchiera คุณรู้ไหมฉันไม่เคยมีข้อผิดพลาดนี้มาก่อน แต่เมื่อฉันต้องการเชื่อมต่อกับ db ผ่านแอพ iOS โดยใช้อุโมงค์ ssh ฉันได้รับข้อผิดพลาดปี 2556 นี้ จะแก้ปัญหาได้ผมต้องแก้ไข/etc/my.cnfและแสดงความคิดเห็น#bind-address = 127.0.0.1 อ้างอิงที่ 1 อ้างอิงที่ 2 จากนั้นฉันก็สามารถเชื่อมต่อ หลังจากนี้ฉันก็รู้ว่าฉันได้รับข้อผิดพลาดในปี 2545 ซึ่งนำฉันมาที่คำตอบนี้และตอนนี้ก็ทำงานได้อีกครั้งแน่นอนฉันเห็นด้วยกับคุณโดยได้รับคำอธิบายว่าทำไมเพียงพิมพ์mysqlโดยไม่-hผิดพลาด
Pathros

หมายเหตุ: mysql -h localhostใช้งานไม่ได้ ตรวจสอบให้แน่ใจว่าใช้mysql -h 127.0.0.1ตามที่ระบุไว้ในคำตอบ
vadasambar

ฉันจะแก้ไขปัญหานี้ได้อย่างไรหากฉันเข้าสู่ระบบด้วยคำสั่งในคำตอบนี้
Carlos A. Jimenez Holmquist

128

ฉันเห็นคำตอบทั้งหมด แต่ไม่มีตัวเลือกให้รีเซ็ตรหัสผ่านและไม่มีคำตอบที่ยอมรับได้ คำถามจริงที่เขาลืมรหัสผ่านของเขาดังนั้นเขาต้องการที่จะตั้งค่าใหม่ไม่ดูว่ามันกำลังทำงานอยู่หรือไม่ (ติดตั้งหรือไม่) เป็นคำตอบเหล่านี้ส่วนใหญ่หมายความว่า


เพื่อรีเซ็ตรหัสผ่าน

ทำตามขั้นตอนเหล่านี้ (มีประโยชน์หากคุณลืมรหัสผ่านจริงและคุณสามารถลองใช้ได้ทุกเวลาแม้ว่าคุณจะไม่ได้อยู่ในสถานการณ์ในขณะนี้):

  1. หยุด mysql

    sudo /etc/init.d/mysql stop

    หรือสำหรับรุ่นการกระจายอื่น ๆ :

    sudo /etc/init.d/mysqld stop
  2. เริ่ม MySQL ในเซฟโหมด

    sudo mysqld_safe --skip-grant-tables &
  3. เข้าสู่ระบบ MySQL โดยใช้รูท

    mysql -uroot
  4. เลือกฐานข้อมูล MySQL ที่จะใช้

    use mysql;
  5. รีเซ็ตรหัสผ่าน

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
  6. ล้างสิทธิพิเศษ

    flush privileges;
  7. รีสตาร์ทเซิร์ฟเวอร์

    quit
  8. หยุดและเริ่มต้นเซิร์ฟเวอร์อีกครั้ง

    Ubuntu และ Debian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start

    ใน CentOS, Fedora และ RHEL:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
  9. เข้าสู่ระบบด้วยรหัสผ่านใหม่

    mysql -u root -p
  10. พิมพ์รหัสผ่านใหม่และสนุกกับเซิร์ฟเวอร์ของคุณอีกครั้งเหมือนไม่มีอะไรเกิดขึ้น

นี้ถูกนำมาจากรีเซ็ตรหัสผ่านราก MySQL


การอัปเดตรหัสผ่านผู้ใช้ไม่ได้ผลสำหรับฉัน แต่เมื่อเข้าสู่ระบบการตรวจสอบ MySQL และมีการใช้ฐานข้อมูล MySQL repair table user use_frmทำงานสำหรับฉันที่จะแก้ปัญหานี้ - stackoverflow.com/questions/4297592/…
Craig van Tonder

20
ใน MySQL 5.7 เขตข้อมูลรหัสผ่านในเขตข้อมูลตาราง mysql.user ถูกลบออกตอนนี้ชื่อเขตข้อมูลคือ 'authentication_string' ดังนั้น (5) ควรเป็นupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel

คุณจะรู้วิธีสร้างสคริปต์ทุบตีนี้หรือไม่? ฉันต้องการมันทุกครั้งที่ฉันรีสตาร์ทกล่อง
vphilipnyc

มีบางอย่างบอกฉันว่าคุณต้องการวิธีแก้ปัญหา แต่คุณควรพยายามหาเหตุผลว่าทำไมคุณต้องทำสิ่งนี้ทุกครั้งและแก้ไขปัญหานั้น สำหรับสคริปต์ถามคำถามใหม่และโพสต์สิ่งที่คุณได้ลองไปแล้วบางทีคนอื่นอาจช่วยได้
davejal

2
สิ่งนี้ใช้งานได้ดีสำหรับฉัน แต่ก่อนอื่นฉันต้องใช้โซลูชันนี้: stackoverflow.com/questions/42153059/…
Andrew Fox

68

ฉันลองขั้นตอนต่อไปนี้:

  1. เข้าสู่ระบบในฐานะsuper userหรือใช้sudo
  2. เปิด/etc/mysql/my.cnfโดยใช้gedit
  3. ค้นหาbind-addressและเปลี่ยนค่าเป็นที่อยู่ IP ของเครื่องโฮสต์เซิร์ฟเวอร์ฐานข้อมูล สำหรับฉันมันเป็นlocalhostหรือ127.0.0.1
  4. บันทึกและปิดไฟล์
  5. กลับมาที่เทอร์มินัลแล้วดำเนินการ sudo service mysql start

และมันก็ได้ผลกับฉันด้วย


4
จากนี้ฉันเพิ่งรันบริการ sudo mysql เริ่มต้นใหม่และใช้งานได้
Orane

ในกรณีของฉันข้อผิดพลาดคือ IP มีการเปลี่ยนแปลงดังนั้นฉันจึงตั้ง bind-address = localhost
Nicolás Arias

@rshahriar ไม่มีสิ่งใดที่เรียกว่าการผูกที่อยู่ใน /etc/my.cnf ของฉันมันเป็นความคิดที่ดีที่จะเพิ่มฟิลด์
RCBian

@SilvioDelgado ไม่ได้หากคุณต้องการที่จะเชื่อมต่อผ่าน ssh tunneling คำอธิบายที่นี่
Pathros

เริ่มบริการ mysql ที่ทำงานให้ฉันด้วย แต่ก็ยังไม่แน่ใจว่าจะหาบันทึกข้อผิดพลาดเพื่อหาสาเหตุและพยายามที่จะป้องกันไม่ให้เกิดขึ้นอีกครั้ง ...
Maleka

41

ฉันแก้ไขปัญหานี้โดยการดำเนินการคำสั่งต่อไปนี้:

mysql.server start

และถ้าคุณใช้ mac และใช้ brew เพื่อติดตั้ง mysql เพียงใช้:

brew services start mysql

35

ฉันมีปัญหาที่คล้ายกัน mysql จะไม่เริ่ม:

sudo service mysql start
start: Job failed to start

หากฉันปิดใช้งาน apparmor:

sudo aa-complain /etc/apparmor.d/*

ปัญหาหายไป ปัญหาคือว่า mysqld พยายามเข้าถึง /run/mysqld/mysqld.sock แต่โปรไฟล์ apparmor ให้สิทธิ์กับ /var/run/mysqld/mysqld.sock เท่านั้น (/ var / run นั้นเชื่อมโยงกับ / run ดังนั้นจริงๆแล้ว เหมือน). ไม่แน่ใจว่าทำไม mysqld ไม่ได้ใช้เส้นทาง var เนื่องจากเป็นสิ่งที่ตั้งค่าไว้ในไฟล์การตั้งค่าทั้งหมด แต่คุณสามารถแก้ไขปัญหาได้โดยเพิ่มสิ่งต่อไปนี้ใน /etc/apparmor.d/usr.sbin.mysqld

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

ฉันไม่รู้ว่าฉันต้องเรียกว่า "sudo service mysql start" ครั้งล่าสุดที่ฉันติดตั้ง MySQL บน Ubuntu ฉันคิดว่ามันเริ่มอัตโนมัติเมื่อทำการติดตั้ง MariaDB บน ​​Manjaro ต้องการให้บริการเริ่มต้นอย่างชัดเจนหลังจากการติดตั้ง
dmiller309

31

ในกรณีของฉันมันเป็นดิสก์ที่เต็มและ mysqld ไม่สามารถเริ่มอีกต่อไป

ลองเริ่มบริการ mysql ใหม่

> service mysql restart

หรือ

> service mysql stop

> service mysql start

ถ้ามันไม่รู้จักstopคำสั่งก็เป็นพื้นที่ดิสก์แน่นอน คุณควรmysqlจัดสรรพื้นที่บางส่วนในพาร์ติชันหรือทำให้ดิสก์มีขนาดใหญ่ขึ้น

ตรวจสอบพื้นที่ดิสก์ด้วย

> df -h

2
สิ่งเดียวกันเกิดขึ้นกับฉัน - ดิสก์เต็ม ทำความสะอาดพื้นที่บางส่วนรีบูตและปัญหาก็หายไป
Darren

2
หากนั่นคือปัญหาของคุณที่กำลังดำเนินการ: "/etc/init.d/mysqld start" จะบอกคุณว่าพาร์ติชั่นดิสก์ของคุณเต็ม
ติ๊ก

เหมือนกันสำหรับฉันดิสก์ 100% ทำความสะอาดพื้นที่และเริ่มให้บริการ
Hugo

28

ฉันแก้ไขได้โดยการฆ่าmysqlกระบวนการ:

ps -ef | grep mysql
kill [the id]

จากนั้นฉันก็เริ่มต้นเซิร์ฟเวอร์อีกครั้งด้วย:

sudo /etc/init.d/mysql restart

แต่startทำงานได้ดี:

sudo /etc/init.d/mysql start

จากนั้นฉันเข้าสู่ระบบในฐานะadminและฉันเสร็จแล้ว


ดีฉันยกเลิก mysql จริง ๆ ก่อนที่มันจะล้มเหลว ถ้าอย่างนั้นฉันจะได้ "* โปรดดู syslog" และ "ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock' (111)" ในที่สุดฉันก็รู้ว่ากำลังพยายามกู้คืนตัวเองดังนั้นฉันจึงฆ่าและรีสตาร์ท
cwhsu

มีสถานการณ์ (หายาก) ที่ "mysql start" จะล้มเหลวดังนั้นคุณต้องใช้อาร์กิวเมนต์ "restart" หากคุณต้องการฆ่ากระบวนการ daemon จะเป็นการดีกว่าถ้าใช้อาร์กิวเมนต์ "stop" แทนคำสั่ง kill อย่างไรก็ตามคำสั่ง killall สะดวกกว่าคำสั่ง kill (killall mysqld)
Rein

ฆ่ากระบวนการ MySQL แล้วเริ่ม MySQL ใหม่สำหรับฉันดี
Vishal Shetty

21

อย่างใดกระบวนการเซิร์ฟเวอร์ MySQL ไม่ได้สร้างซ็อกเก็ตหรือลูกค้ากำลังมองหาซ็อกเก็ตในสถานที่ที่ไม่ถูกต้อง

คำแนะนำแรกของฉันคือการตรวจสอบว่าเซิร์ฟเวอร์ MySQL ทำงานอยู่หรือไม่ ข้อเสนอแนะที่สองอาจเป็นเซิร์ฟเวอร์ MySQL ทำงานบนโฮสต์อื่นหรือไม่ ถ้าเป็นเช่นนั้นเพิ่มการ-h <hostname>ตั้งค่าสถานะไปยังไคลเอนต์ MySQL ของคุณใน terminal

หาก MySQL กำลังทำงานอยู่และทำงานในพื้นที่ให้ตรวจสอบmy.cnfไฟล์ของคุณ ควรมีเส้นเหมือน

socket = /var/run/mysqld/mysqld.sock

ดูว่าที่ตรงกับตำแหน่งซ็อกเก็ตที่คุณกล่าวถึงในโพสต์ของคุณ

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


19

ฉันเพิ่งพบปัญหาเดียวกันหลังจากที่ฉันต้องรีสตาร์ทเซิร์ฟเวอร์ผลิต ฉันใช้ Debian 8.1 (Jessie) บนหยด DigitalOcean

นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหาของฉัน:

  1. ตรวจสอบว่ามีไฟล์/var/run/mysqld/mysqld.sockอยู่หรือไม่ หากไม่มีให้สร้างด้วยตนเองโดยป้อนtouch /var/run/mysqld/mysqld.sock(ซึ่งเป็นสิ่งที่ฉันต้องทำ)

  2. ดังนั้นกระบวนการ MySQL สามารถใช้ไฟล์นี้ chown mysql /var/run/mysqld/mysqld.sockเปลี่ยนความเป็นเจ้าของของไฟล์กล่าวว่าโดยการป้อน

  3. เมื่อ '2' ได้รับการทำเริ่มบริการ MySQL โดยการป้อนหรือservice mysql restart/etc/init.d/mysql restart

หลังจากผ่านขั้นตอนข้างต้นปัญหาของฉันได้รับการแก้ไขแล้ว ฉันไม่ค่อยมีปัญหานี้และอาจมีวิธีที่ดีกว่าดังนั้นโดยทั้งหมดให้ข้อเสนอแนะที่สร้างสรรค์ถ้าจำเป็นต้องเป็น :)


1
ฉันสังเกตเห็นไฟล์ไม่ได้อยู่ที่นั่นและเพิ่งรีสตาร์ทเซิร์ฟเวอร์ mysql มันสร้างไฟล์โดยอัตโนมัติและเริ่มต้นได้ดี ขอบคุณสำหรับความเป็นผู้นำ
Sojurn

15

เซิร์ฟเวอร์ mysql ของคุณอาจไม่ทำงาน ตรวจสอบให้แน่ใจว่ามันทำงานโดยการพิมพ์mysql.server startลงในสถานี


15

ตรวจสอบ "bind-adress"พารามิเตอร์ใน my.cnf

ลองใช้คำสั่งอื่น:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h สำหรับโฮสต์127.0.0.1นั่นคือ localhost

  • -P (แจ้งให้ทราบ -P เป็นตัวพิมพ์ใหญ่) สำหรับพอร์ต3306นั่นคือพอร์ตเริ่มต้นสำหรับ MySQL



11

หากคุณใช้Amazon EC2และคุณพบปัญหานี้กับอินสแตนซ์คุณต้องทำสิ่งต่อไปนี้:

sudo yum install mysql-server
sudo service mysqld restart

Amazon EC2 ไม่ได้ติดตั้งเซิร์ฟเวอร์ (เฉพาะไคลเอ็นต์ที่ติดตั้ง) ดังนั้นในกรณีที่คุณต้องติดตั้งในอินสแตนซ์ของคุณและหลังจากนั้นลอง

 mysql -u root -p

เพื่อตรวจสอบว่าใช้งานได้หรือไม่


ไม่สามารถรีสตาร์ท mysqld.service: ไม่พบยูนิต mysqld.service ใน Ubuntu 16.04
Ketav Chotaliya

9

ฉันคิดว่าเมื่อใดก็ตามที่คุณได้รับข้อผิดพลาด

ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/lib/mysql/mysql.sock'

ฉันจะแนะนำก่อนเพื่อตรวจสอบว่าmysqlภูตของคุณทำงานอยู่หรือไม่ ... โดยส่วนใหญ่แล้วจะไม่ทำงานโดยค่าเริ่มต้น /etc/init.d/mysqld statusคุณสามารถตรวจสอบด้วย

หากยังไม่เริ่มต้นให้เริ่มต้นก่อน:

.../etc/init.d/mysqld start.

ฉันคิดว่ามันจะทำงาน 110%


9

แทนที่จะใช้ localhost:

mysql -u myuser -pmypassword -h localhost mydatabase

ใช้ 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(โปรดทราบว่าไม่มีช่องว่างระหว่าง -p และ mypassword)

สนุก :)


คุณยังไม่สามารถใส่รหัสผ่านของคุณจากบรรทัดคำสั่งเพื่อความปลอดภัยโดยใช้บรรทัดนี้: mysql -u myuser -p -h 127.0.0.1 mydatabase MySQL จะถามรหัสผ่านของคุณและไม่ได้สะท้อน
DDay

1
วิธีนี้แก้ไขได้สำหรับฉัน อย่างไรก็ตามฉันยังคงสงสัยว่าทำไม127.0.0.1ทำงานในขณะที่localhostไม่ได้!
not2savvy

9

ตรวจสอบให้แน่ใจว่าคุณมีการสำรองข้อมูลของฐานข้อมูลที่สำคัญแล้วลองถอนการติดตั้งสิ่งที่เกี่ยวข้องกับMySQL :

apt-get remove --purge mysql\*

จากนั้นติดตั้งอีกครั้ง :

apt-get install mysql-server mysql-client

สิ่งนี้ใช้ได้สำหรับฉันและเก็บข้อมูลไว้

หาก PHP MySQL แสดงข้อผิดพลาดคุณอาจต้องติดตั้ง PHP MySQL ใหม่ :

apt-get install php5-fpm php5-mysql

ฉันคิดว่านั่นเป็นอาวุธที่ร้ายแรง ฉันลองทุกอย่างแล้ว แต่ข้อเสนอของคุณเท่านั้นที่ช่วยฉันได้ ขอบคุณ !
Messou

9

ฉันยังประสบปัญหาเดียวกันก็จะเกิดขึ้นหากคุณmysql serverไม่ได้ทำงานตามค่าเริ่มต้นมันจะหยุดอีกครั้งหลังจากบางวินาทีเพื่อให้คุณเรียกใช้$ sudo service mysql start คำสั่ง( ) อีกครั้งคุณสามารถเปลี่ยนได้ถ้ารู้

สำหรับคำสั่งการใช้งานนั้น

$ sudo service mysql start   

(ใส่รหัสผ่านของผู้ใช้หากจำเป็นเพราะเราใช้sudo) แล้วเรียกใช้

$ sudo mysql -u root -p          (put user password if required )

ตอนนี้คุณได้รับฐานข้อมูลของคุณแล้ว


7

หากการติดตั้งของคุณเป็นรุ่นล่าสุดคุณควรยืนยันว่าการติดตั้งของคุณคือการติดตั้ง SERVER ... เป็น mysql-server-5.5 .. บางทีคุณอาจติดตั้งเฉพาะ "mysql" .. นี่เป็นไคลเอ็นต์เท่านั้นแทนที่จะเป็นเซิร์ฟเวอร์


7

ถ้าคุณได้XAMPPติดตั้งบนเครื่อง Linux ของคุณพยายามที่จะคัดลอกของคุณmy.cnfไฟล์จากไป/opt/lampp/etc/my.cnf/etc/my.cnf

จากนั้นให้เรียกใช้mysql -u rootอีกครั้ง ... คุณควรจะมีซ็อกเก็ตที่ถูกต้องและสามารถเรียกใช้ไคลเอนต์ MySQL ได้



7

ฉันพบวิธีแก้ปัญหา

ก่อนยิงคำสั่ง:mysql_secure_installation

  • ขั้นตอนที่ 1: sudo systemctl stop mariadb
  • ขั้นตอนที่ 2: sudo systemctl start mariadb
  • ขั้นตอนที่ 3: mysql_secure_installation

จากนั้นจะถามรหัสผ่านรูทและคุณสามารถกด Enterและตั้งค่ารหัสผ่านรูทใหม่ของคุณ


6

ในกรณีของฉันมีการใช้พอร์ตเริ่มต้น 3306 โดยกระบวนการอื่นและทำให้มันไม่เริ่มทำงาน หลังจากที่ฉันหยุดบริการอื่นและทำsudo service mysql startมันทำงานได้ดี BTW คุณสามารถใช้สิ่งที่ต้องการsudo lsof -Pn -iTCP:3306ดูว่าใครกำลังใช้พอร์ต


6

ในกรณีของฉันมันทำงานด้วยการทำ R & D:

ฉันสามารถเชื่อมต่อกับ MySQL โดยใช้

root-debian#mysql -h 127.0.0.1 -u root -p

mysql -u root -pแต่มันไม่ได้ทำงานกับ

ฉันไม่พบใด ๆbind-addressในmy.cnf ดังนั้นผมจึง outcommented พารามิเตอร์socket=/var/lib/mysql/mysqld.sockในmy.cnfซึ่งทำให้ฉันมีปัญหากับการเข้าสู่ระบบ

หลังจากรีสตาร์ทบริการมันก็ดี:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)

6

ฉันแก้ไขปัญหานี้ด้วยการรีสตาร์ท mysql

/etc/init.d/mysql stop

และ

/etc/init.d/mysql start

แค่นั้นแหละ.


5

จากประสบการณ์ฉันบอกว่าคุณต้องตรวจสอบว่าเซิร์ฟเวอร์ทำงานก่อนแล้วลองกำหนดค่า MySQL ทางออกสุดท้ายคือการติดตั้ง MySQL อีกครั้ง


5

เปิดเทอร์มินัลแล้วพิมพ์:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

ทั้งไคลเอนต์ฐานข้อมูล MySQL และแพ็คเกจเซิร์ฟเวอร์ MySQL จะเป็นเวอร์ชั่นเดียวกัน 5.5 MySQL Client 5.5 และ MySQL Server 5.5 เป็นแพ็คเกจ "รุ่นที่ดีที่สุด" ในปัจจุบันใน Ubuntu 14.04 ตามที่กำหนดโดยผู้ดูแลแพคเกจ

หากคุณต้องการติดตั้ง MySQL Client 5.6 และ MySQL Server 5.6 คุณสามารถค้นหาแพ็คเกจ mysql-client-core-5.6 และ mysql-server-5.6 ใน Ubuntu Software Center สิ่งสำคัญคือหมายเลขไคลเอนต์และเซิร์ฟเวอร์ตรงกันในทั้งสองกรณี

สิ่งนี้ใช้ได้สำหรับฉัน


5

ตรวจสอบว่าคุณมีสิทธิ์ที่ถูกต้อง:

sudo chmod 755 /var/lib/mysql/mysql

ฉันมีปัญหาเดียวกันและสิ่งนี้ใช้ได้สำหรับฉัน หลังจากทำสิ่งนี้ฉันก็สามารถเริ่ม MySQL


5

ในกรณีของฉันดูเหมือนว่าฉันไม่สามารถฆ่ากระบวนการ mysql เมื่อฉันเรียกใช้

sudo service mysql stop
ps -ef | grep mysql

กระบวนการ mysql อยู่ที่นั่นเสมอดูเหมือนว่ากำลังบล็อกไฟล์ซ็อกเก็ตและกระบวนการ mysql ใหม่ไม่สามารถสร้างมันเองได้

ดังนั้นสิ่งนี้ช่วย

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

ตอนนี้ฉันสามารถเข้าสู่ระบบฐานข้อมูลโดยใช้

mysql -u root

จากนั้นเพื่ออัปเดตรหัสผ่านรูท:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS : ฉันมีปัญหาในการอัปเดต root passwod ดูเหมือนว่ามีปัญหากับปลั๊กอิน "auth_socket" ดังนั้นฉันจึงต้องสร้างผู้ใช้ใหม่ด้วยสิทธิ์เต็มรูปแบบ

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

สิ่งนี้จะสร้างผู้ใช้ "super" โดยไม่มีรหัสผ่านจากนั้นคุณสามารถเชื่อมต่อได้ mysql -u super


ขอบคุณสำหรับคำตอบและฉันสามารถเข้าสู่ mysql ได้ แต่ไม่มีตารางผู้ใช้ในฐานข้อมูลของฉัน
John Joe

วิธีนี้ใช้ได้ผล แต่ก่อนที่คุณจะรันคำสั่ง sql เพื่อเปลี่ยนรหัสผ่านสำหรับรูทคุณต้องเลือกฐานข้อมูล ดำเนินการคำสั่งต่อไปนี้use mysql;และคุณสามารถใช้ <br>UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Charle K.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.