ข้อผิดพลาด 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.