mysqld_safe Directory '/ var / run / mysqld' สำหรับไฟล์ซ็อกเก็ต UNIX ไม่มีอยู่


188

ในขณะที่เริ่มต้นเซิร์ฟเวอร์ mysql 5.7.17 โดยใช้ mysqld_safe ทำตามข้อผิดพลาดเกิดขึ้น

2017-02-10T17:05:44.870970Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.872874Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.874547Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

จะแก้ไขได้อย่างไร?

คำตอบ:


507

ดูเหมือนว่าไดเรกทอรีนี้ไม่ได้ถูกสร้างขึ้นเมื่อติดตั้ง - คุณเปลี่ยนพา ธ ของไฟล์ซ็อกเก็ตด้วยตนเองใน my.cfg หรือไม่

คุณลองสร้างไดเรกทอรีนี้ด้วยตัวเองแล้วเริ่มบริการใหม่หรือไม่?

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

2
ไม่ฉันยังไม่ได้ทำการเปลี่ยนแปลงใด ๆ ด้วยตนเอง ฉันจะลองทำสิ่งนี้โดยการสร้างไดเรกทอรี ขอบคุณสำหรับคำแนะนำ
Rajadip

14
มันเกิดขึ้นกับ mysql 5.7 เมื่อคุณหยุดบริการ mysql / var / run / mysqld จะถูกลบและได้รับการสร้างขึ้นใหม่เมื่อคุณเริ่มบริการอีกครั้ง
Capy

2
ต้องใช้ sudo สำหรับทั้งคู่
Kasun Rajapaksha

1
@Capy - upvoted - @Matt Clark - คุณแก้ไขคำตอบของคุณเพื่อรวมข้อมูลที่แม้ว่า DIR อาจถูกสร้างขึ้น แต่มันจะถูกลบถ้าเราทำงาน - $ sudo /etc/init.d/mysql stopขอบคุณ
Rohit Dhankar

หากคุณยังคงได้รับข้อผิดพลาดเดียวกันโดยทำตามขั้นตอนเหล่านี้หมายเหตุที่sudoจะแก้ไขปัญหานี้เมื่อไดเรกทอรีนี้ถูกลบเมื่อmysqlหยุดและsudoไม่สามารถเข้าถึงโฟลเดอร์เหล่านี้ได้ !!!
Jadeye

71

เมื่อฉันใช้รหัสmysqld_safe --skip-grant-tables &แต่ฉันได้รับข้อผิดพลาด:

mysqld_safe Directory '/ var / run / mysqld' สำหรับไฟล์ซ็อกเก็ต UNIX ไม่มีอยู่

$ systemctl stop  mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &

ฉันแก้ไข:

$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld

ตอนนี้ฉันใช้รหัสเดียวกันmysqld_safe --skip-grant-tables &และได้รับ

mysqld_safe เริ่มต้น mysqld daemon ด้วยฐานข้อมูลจาก / var / lib / mysql

ถ้าฉันใช้ $ mysql -u rootฉันจะได้รับ:

รุ่นเซิร์ฟเวอร์: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)

ลิขสิทธิ์ (c) 2000, 2017, Oracle และ / หรือ บริษัท ในเครือ สงวนลิขสิทธิ์.

Oracle เป็นเครื่องหมายการค้าจดทะเบียนของ Oracle Corporation และ / หรือ บริษัท ในเครือ ชื่ออื่น ๆ อาจเป็นเครื่องหมายการค้าของเจ้าของที่เกี่ยวข้อง

พิมพ์ 'ความช่วยเหลือ;' หรือ '\ h' เพื่อขอความช่วยเหลือ พิมพ์ '\ c' เพื่อล้างคำสั่งอินพุตปัจจุบัน

MySQL>

ตอนนี้ถึงเวลาเปลี่ยนรหัสผ่าน:

mysql> use mysql
mysql> describe user;

การอ่านข้อมูลตารางเพื่อความสมบูรณ์ของชื่อตารางและคอลัมน์คุณสามารถปิดคุณสมบัตินี้เพื่อให้เริ่มต้นได้เร็วขึ้นด้วย -A

ฐานข้อมูลมีการเปลี่ยนแปลง

mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');

หรือหากคุณมีบัญชีรูท mysql ที่สามารถเชื่อมต่อได้จากทุกที่คุณควรทำดังนี้

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

วิธีอื่น:

   USE mysql
   UPDATE user SET Password = PASSWORD('newpwd')
   WHERE Host = 'localhost' AND User = 'root';

และหากคุณมีบัญชีรูทที่สามารถเข้าถึงได้จากทุกที่:

 USE mysql
 UPDATE user SET Password = PASSWORD('newpwd')
 WHERE Host = '%' AND User = 'root';`enter code here

ตอนนี้ต้องquitจาก mysql และหยุด / เริ่ม

FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

ตอนนี้อีกครั้ง `mysql -u root -p 'และใช้รหัสผ่านใหม่เพื่อรับ

MySQL>


9
ตั้งแต่ MySQL 5.7.6 คอลัมน์รหัสผ่านถูกเปลี่ยนชื่อเป็น "authentication_string" ที่นี่คุณสามารถอ่านเพิ่มเติมเกี่ยวกับมันได้: bugs.mysql.com/bug.php?id=76655
IberoMedia

6

ทำงานกับฉันใน CentOS:

$ service mysql stop
$ mysqld --skip-grant-tables &
$ mysql -u root mysql

mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

$ service mysql restart

0

คุณอาจลองทำสิ่งต่อไปนี้ถ้าฐานข้อมูลของคุณไม่มีข้อมูลใด ๆ หรือคุณมีข้อมูลอื่นเพื่อกู้คืนข้อมูลนั้น คุณจะต้องรู้รหัสผ่านรูทเซิร์ฟเวอร์ของ Ubuntu แต่ไม่ใช่รหัสผ่านรูทของ mysql

อาจเป็นไปได้สูงว่าพวกเราหลายคนได้ติดตั้ง "mysql_secure_installation" เพราะนี่เป็นวิธีปฏิบัติที่ดีที่สุด นำทางไปยังไดเร็กทอรี bin ที่มี mysql_secure_installation มันสามารถพบได้ในไดเรกทอรี / bin บนระบบ Ubuntu เมื่อทำการติดตั้งใหม่คุณจะได้รับแจ้งว่าจะเปลี่ยนรหัสผ่านฐานข้อมูลรูทหรือไม่


แต่ฉันคิดว่านี่เป็นการใช้เซิร์ฟเวอร์ mysql ที่ปลอดภัยเท่านั้นใช่ไหม มันไม่ได้สร้างความแตกต่างในปัญหานี้
Rajadip

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