รหัสผ่าน 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.