รหัสผ่าน Mysql หมดอายุ ไม่สามารถเชื่อมต่อ


87

ฉันเพิ่งเช็ด Mac และทำการติดตั้ง El Capitan ใหม่ ตอนนี้ฉันกำลังดิ้นรนเพื่อเชื่อมต่อกับ Mysql หลังจากผ่านขั้นตอนการตั้งค่าเว็บเซิร์ฟเวอร์ฉันได้สร้างไฟล์ทดสอบ PHP ง่ายๆ:

<?php
  $conn = new mysqli("127.0.0.1", "root", "xxxxxxxx");
  if ($conn->connect_error) echo "Connection failed: " . $conn->connect_error; 
  else echo "Connected successfully";
  phpinfo();
?>

เมื่อฉันเรียกใช้ฉันได้รับข้อผิดพลาดนี้:

Warning: mysqli::mysqli(): (HY000/1862): Your password has expired. To log in you must change it using a client that supports expired passwords. in /Users/rich/Documents/DESIGN/test/index.php on line 3
Connection failed: Your password has expired. To log in you must change it using a client that supports expired passwords.

ฉันไม่เคยเห็นการตอบสนองจากการเชื่อมต่อมาก่อน จะแก้ไขอย่างไรหากเชื่อมต่อไม่ได้

แก้ไข

ในเทอร์มินัลฉันป้อนคำสั่ง:

mysql -u root -p

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

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

ฉันจะรีเซ็ตรหัสผ่านโดยใช้ALTER USERอย่างไร?


ฉันมีปัญหาเดียวกัน
— Rohan Sanap

นี่เป็นเรื่องที่น่ารำคาญจริงๆที่สามารถปิดบริการทั้งหมดได้ด้วยเหตุนี้
— tofutim

1
ลองวิ่ง/usr/local/mysql/bin/mysqladmin -u root -p password
— Connor Leech

1
@ConnorLeech ใช้เวลาหลายชั่วโมงในการพยายามรีเซ็ตรหัสผ่านรูทที่หมดอายุ MariaDB ของ homebrew แต่สิ่งนี้ได้รับการแก้ไขให้ฉัน - ขอบคุณ!
— Alex Holsgrove

คำตอบ:


179

ฉันจึงพบทางออกด้วยตัวเองในที่สุด

ประการแรกฉันเข้าไปในเทอร์มินัลและพิมพ์ว่า:

mysql -u root -p

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

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

สิ่งนี้สับสนเพราะฉันไม่เห็นวิธีการรีเซ็ตรหัสผ่านโดยใช้ALTER USERคำสั่ง แต่ฉันพบวิธีง่ายๆอื่น:

SET PASSWORD = PASSWORD('xxxxxxxx');


สิ่งนี้ได้ผลหรือไม่? มีข้อผิดพลาดหลังจากทำตามขั้นตอนเหล่านี้ในอนาคตหรือไม่?
— Rohan Sanap

ขอบคุณมาก! สิ่งนี้ได้ผลสำหรับฉันด้วย ช่วยฉันได้หลายชั่วโมง
— TBJ

5
ฉันใช้ MySQL เวอร์ชัน 5.7.9 และตอนนี้เลิกใช้แล้วเนื่องจากข้อความแสดงข้อผิดพลาดนี้จากพรอมต์คำสั่ง MySQL บอกเราว่าคำเตือน (รหัส 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' เลิกใช้แล้วและจะถูกลบออกใน รุ่นในอนาคต โปรดใช้ SET PASSWORD = '<plaintext_password>' แทน
— Fabiano

ฉันเสียใจที่สิ่งนี้ไม่ได้ผลสำหรับฉัน แต่ผู้ใช้ดัดแปลงที่โพสต์โดย Piotr N. ใช้งานได้ อาจใช้งานกับ MySQL เวอร์ชันอื่น
— MG Developer

89

ก่อนอื่นฉันใช้:

 mysql -u root -p

ให้รหัสผ่านปัจจุบันของฉันสำหรับ 'root' ต่อไป:

mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
       `root`@`localhost` PASSWORD EXPIRE NEVER;

เปลี่ยน'new_password'เป็นรหัสผ่านใหม่สำหรับผู้ใช้ 'root'
มันช่วยแก้ปัญหาของฉันได้


3
รับข้อผิดพลาด: ERROR 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ 'USER' root '@' localhost 'ระบุโดย' newPassword ',' root '@' localhost 'PASSWORD' ที่บรรทัด 1
— Ketav Chotaliya

สิ่งนี้ได้ผลดี แก้ไขผู้ใช้ 'username' @ '%' ระบุโดย 'your_password', 'user' @ '%' PASSWORD EXPIRE ไม่เคย;
— TheLegendaryCopyCoder

1
รับข้อผิดพลาด: ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
— Pulkit Pahwa

52

mysqladmin -u [username] -p passwordทำงานให้ฉันบน OS X El Capitan และ MySQL 5.7.12 Community Server ตัวอย่าง:

$ /usr/local/mysql/bin/mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

คล้ายกับคำตอบของ pavan sachi แต่มีการแจ้งรหัสผ่าน

ข้อผิดพลาดของฉันคือ "# 1862 - รหัสผ่านของคุณหมดอายุในการเข้าสู่ระบบคุณต้องเปลี่ยนรหัสผ่านโดยใช้ไคลเอนต์ที่รองรับรหัสผ่านที่หมดอายุ" ที่หน้าจอเข้าสู่ระบบ phpMyAdmin ครั้งแรก


ทำงานให้ฉันด้วย OS X El Capital และ MySQL 5.17.13! ขอบคุณสำหรับสิ่งนี้!
— Zeke

5
เป็นที่น่ากล่าวขวัญว่าคำว่า "รหัสผ่าน" ไม่ใช่ตัวยึดตำแหน่งในขณะที่ "root" เป็นชื่อของผู้ใช้ที่คุณต้องการอัปเดต:mysqladmin -u [username] -p password
— random_user_name

นี่เป็นสิ่งเดียวที่ (ดูเหมือน) ใช้ได้กับฉันบน Linux (Fedora 25) ขอบคุณ.
— Avinash Meetoo

ฮาเลลูยา !! ดีที่สุด. คำสั่ง เคย. ฉันมองหาทุกที่ แต่สุดท้ายแล้วนี่คือสิ่งที่แก้ไขได้ ขอบคุณมาก
— Connor Leech

19

รหัสผ่าน MySQL หมดอายุ

การรีเซ็ตรหัสผ่านจะช่วยแก้ปัญหาได้ชั่วคราวเท่านั้น จาก MySQL 5.7.4 ถึง 5.7.10 (เพื่อส่งเสริมความปลอดภัยให้ดีขึ้น - โปรดดูMySQL: นโยบายการหมดอายุของรหัสผ่าน ) ค่าdefault_password_lifetimeตัวแปรเริ่มต้นคือ 360 (1 year-ish) สำหรับเวอร์ชันเหล่านั้นหากคุณไม่ทำการเปลี่ยนแปลงกับตัวแปรนี้ (หรือกับบัญชีผู้ใช้แต่ละบัญชี) รหัสผ่านทั้งหมดจะหมดอายุหลังจาก 360 วัน

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

หากต้องการหยุดการหมดอายุรหัสผ่านอัตโนมัติให้ล็อกอินด้วย root ( mysql -u root -p) จากนั้นสำหรับไคลเอนต์ที่เชื่อมต่อกับเซิร์ฟเวอร์โดยอัตโนมัติ (เช่นสคริปต์) เปลี่ยนการตั้งค่าการหมดอายุของรหัสผ่าน:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;

หรือคุณสามารถปิดใช้งานการหมดอายุรหัสผ่านอัตโนมัติสำหรับผู้ใช้ทั้งหมด :

SET GLOBAL default_password_lifetime = 0;

ตามที่ Mertaydin ชี้ให้เห็นในความคิดเห็นเพื่อให้สิ่งนี้ถาวรเพิ่มบรรทัดต่อไปนี้ในmy.cnfไฟล์ที่ MySQL อ่านเมื่อเริ่มต้นภายใต้[mysqld]กลุ่มการตั้งค่า ตำแหน่งของmy.cnfขึ้นอยู่กับการตั้งค่าของคุณ (เช่น Windows หรือ Homebrew บน OS X หรือตัวติดตั้ง) และคุณต้องการสิ่งนี้ต่อผู้ใช้บน Unix หรือ global:

[mysqld] default_password_lifetime = 0 (อาจมีการตั้งค่าอื่น ๆ ที่นี่ด้วย ... )

ดูเอกสาร MySQL บนแฟ้มการกำหนดค่า


2
ด้วยรหัสผ่านที่หมดอายุแล้วมีเพียงการตั้งค่าส่วนกลางเท่านั้นที่ใช้ได้สำหรับฉัน
— maaartinus

2
คุณสามารถเพิ่มพารามิเตอร์นี้ใน /etc/mysql/my.cnf ภายใต้ mysqld; default_password_lifetime = 0 มิฉะนั้นหลังจาก mysql รีสตาร์ทคุณจะได้รับข้อผิดพลาดเดียวกันอีกครั้ง
— mertaydin

2
ขอบคุณ @Dave Everitt & @mertaydin!
— WebMW

11

เมื่อเร็ว ๆ นี้ฉันประสบปัญหาเดียวกันขณะติดตั้ง mysql บน mac os x capitan ฉันไม่พบคำตอบที่ถูกต้องที่นี่ดังนั้นการเพิ่มคำตอบนี้

MySql ในเวอร์ชันปัจจุบันสร้างรหัสผ่านชั่วคราวเมื่อคุณติดตั้ง mysql ใช้รหัสผ่านนี้เพื่อตั้งรหัสผ่านใหม่โดยใช้ยูทิลิตี้ mysqladmin ดังต่อไปนี้

/ usr / local / mysql / bin / mysqladmin -u root -p '<your temp password>' password '<your new password>'

หวังว่าจะช่วยคุณและคนอื่น ๆ


7

เพียงดาวน์โหลด MySQL workbench เพื่อเข้าสู่ระบบระบบจะแจ้งให้คุณเปลี่ยนรหัสผ่านทันทีและโดยอัตโนมัติ


4

เริ่ม MYSQL ในเซฟโหมด

mysqld_safe --skip-grant-tables &

เชื่อมต่อกับเซิร์ฟเวอร์ MYSQL

mysql -u root

เรียกใช้คำสั่ง SQL เพื่อรีเซ็ตรหัสผ่าน:

use mysql;
SET GLOBAL default_password_lifetime = 0;
SET PASSWORD = PASSWORD('new_password');

ขั้นตอนสุดท้ายเริ่มบริการ mysql ของคุณใหม่


4

ฉันประสบปัญหานี้เมื่อสองสามวันก่อน สำหรับทางออกที่ดีที่สุดสำหรับ MySQL เวอร์ชัน 5.7; ล็อกอินคอนโซล mysql ของคุณและแก้ไขรหัสผ่านของคุณด้วยคำสั่งต่อไปนี้:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;

4

คำเตือน: สิ่งนี้จะอนุญาตให้ผู้ใช้เข้าสู่ระบบ

ฉันต้องลองอย่างอื่น เนื่องจากรหัสผ่านรูทของฉันหมดอายุและการแก้ไขไม่ใช่ตัวเลือกเพราะ

Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted

การเพิ่มskip-grant-tablesภายใต้[mysqld]ในmy.cnfและการรีสตาร์ท mysql ชั่วคราวทำเคล็ดลับ


4

บน Windows ใน phpmyadmin ดูในตัวแปร: default_password_lifetime และเปลี่ยนเป็น 0 (แทนที่จะเป็น 360) ให้เพลิดเพลิน

เป็นไปได้มากกว่า mySQL ใช้เวลาอีก 360 วันดังนั้นเพิ่ม my.ini:

[mysqld]
default_password_lifetime=0

และรีสตาร์ท mysql.


เป็นไปได้กว่า default_password_lifetime ใช้เวลาอีก 360 วันดังนั้นใน my.ini เพิ่ม:
— Laurent Zminka


1

รีสตาร์ทเซิร์ฟเวอร์ MySQL ด้วยตัวเลือก --skip-allow-tables จากนั้นตั้งรหัสผ่านรูทใหม่

$ mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD("NEWPASSWORD") WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

ตอนนี้หากคุณต้องการคุณสามารถอัปเดตตาราง mysql.user (ฟิลด์ password_expired = 'N') เพื่อไม่ให้รหัสผ่านหมดอายุ


เมื่อฉันป้อนคำสั่งแรกmysql -u rootฉันได้รับข้อผิดพลาดนี้:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
— CaribouCode

สำหรับบันทึกฉันจัดการเพื่อเข้าสู่โดยเปลี่ยนคำสั่งแรกเป็นmysql -u root -pแล้วมันถามรหัสผ่านที่ฉันใส่คำสั่งต่อไปของคุณไม่ได้ผลสำหรับฉันเพราะมันบอกว่าYou must reset your password using ALTER USER statement before executing this statement.
— CaribouCode

คุณรู้วิธีรีเซ็ตรหัสผ่านโดยใช้ ALTER USER หรือไม่? ฉันไม่ค่อยดีกับ Mysql (ฉันเป็นคน NodeJS / MongoDB มากกว่า)
— รหัสคาริบู

1

คำตอบทั้งหมดนี้ใช้คอนโซล Linux เพื่อเข้าถึง MySQL

หากคุณใช้ Windows และกำลังใช้ WAMP คุณสามารถเริ่มได้โดยเปิดคอนโซล MySQL ( click WAMP icon->MySQL->MySQL console)

จากนั้นจะขอให้คุณป้อนรหัสผ่านปัจจุบันของคุณป้อน

แล้วพิมพ์ SET PASSWORD = PASSWORD('some_pass');


1

ทางออกที่ง่ายที่สุด:

[PATH MYSQL]/bin/mysql -u root
[Enter password]
SET GLOBAL default_password_lifetime = 0;

แล้วใช้งานได้ดี


1

งานนี้สำหรับฉัน:

ที่มา: https://www.diariodeunprogramador.net/fallo-al-conectar-mysql-your-password-expired/

เข้าสู่ระบบด้วยรูท:

mysql -u root -p

จากนั้นคุณปิดการใช้งานการหมดอายุโดยอัตโนมัติของรหัสผ่านของผู้ใช้ทั้งหมด:

SET GLOBAL default_password_lifetime = 0;

0

การหมดอายุของรหัสผ่านเป็นคุณสมบัติใหม่ใน MySQL 5.6 หรือ 5.7

คำตอบนั้นชัดเจน: ใช้ไคลเอนต์ที่สามารถเปลี่ยนรหัสผ่านที่หมดอายุได้ (ฉันคิดว่า Sequel Pro สามารถทำได้)

เห็นได้ชัดว่าไลบรารี MySQLi ไม่สามารถเปลี่ยนรหัสผ่านที่หมดอายุได้

หากคุณมีการ จำกัด การเข้าถึง localhost และคุณมีเพียงไคลเอนต์คอนโซลไคลเอนต์ mysql มาตรฐานสามารถทำได้


2
ขอบคุณสำหรับคำตอบของคุณ ฉันดาวน์โหลด Sequel Pro และพยายามเชื่อมต่อผ่านซ็อกเก็ตด้วย ฉันได้รับข้อผิดพลาดเดียวกันเกี่ยวกับรหัสผ่านที่หมดอายุ ...
— CaribouCode

0

เปิดคอนโซล MySQL และพิมพ์ SET PASSWORD = 'รหัสผ่านของคุณ'; จากนั้นกด ENTER Key ซึ่งจะตั้งรหัสผ่านที่คุณกำหนดสำหรับผู้ใช้ root

คุณสามารถเขียน SET PASSWORD = ''; ซึ่งจะตั้งรหัสผ่านเป็นค่าว่างสำหรับผู้ใช้รูท


0

ฉันทำอะไรแบบนี้

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';

1
You must reset your password using ALTER USER statement before executing this statement.
— Weijing Jay Lin

0

เพียงเปิด MySQL Workbench และเลือก [Instance] Startup / Shutdown และคลิกที่ start server มันได้ผลสำหรับฉัน

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