Kata sandi mysql kedaluwarsa. Tidak dapat terhubung

87

Saya baru saja menghapus Mac saya dan menginstal El Capitan baru. Saya kesulitan untuk terhubung ke Mysql sekarang. Setelah melalui proses penyiapan server web, saya telah membuat file pengujian PHP sederhana:

<?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();
?>

Ketika saya menjalankannya, saya mendapatkan kesalahan ini:

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.

Saya belum pernah melihat respons itu dari koneksi sebelumnya. Bagaimana cara memperbaikinya jika saya tidak dapat terhubung?

EDIT

Di terminal saya memasukkan perintah:

mysql -u root -p

Ini meminta saya untuk kata sandi saya (yang sekarang) yang saya masukkan. Sekarang saya memiliki akses ke perintah mysql tetapi apa pun yang saya coba menghasilkan kesalahan ini:

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

Bagaimana cara mereset kata sandi menggunakan ALTER USER?

CaribouCode
sumber
Saya mengalami masalah yang sama.
Rohan Sanap
ini benar-benar menjengkelkan bahwa seluruh layanan dapat dimatikan karena ini
tofutim
1
Coba jalankan/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech
1
@ConnorLeech menghabiskan waktu berjam-jam mencoba mengatur ulang kata sandi root MariaDB yang kedaluwarsa, tetapi ini memperbaikinya untuk saya - terima kasih!
Alex Holsgrove

Jawaban:

179

Jadi akhirnya saya menemukan solusinya sendiri.

Pertama saya pergi ke terminal dan mengetik:

mysql -u root -p

Ini meminta kata sandi saya saat ini yang saya ketik dan itu memberi saya akses untuk memberikan lebih banyak perintah mysql. Apa pun yang saya coba dari sini memberikan kesalahan ini:

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

Ini membingungkan karena saya tidak dapat benar-benar melihat cara menyetel ulang kata sandi menggunakan ALTER USERpernyataan, tetapi saya menemukan solusi sederhana lainnya:

SET PASSWORD = PASSWORD('xxxxxxxx');

CaribouCode
sumber
Apakah ini berfungsi dengan baik? Apakah ada kesalahan setelah mengikuti langkah-langkah ini di masa mendatang?
Rohan Sanap
Terima kasih banyak! Ini berhasil juga untuk saya. Menyelamatkan saya berjam-jam.
TBJ
5
Saya menggunakan MySQL versi 5.7.9 dan ini sekarang sudah usang karena pesan kesalahan dari command prompt MySQL ini memberi tahu kita: Peringatan (Kode 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' tidak digunakan lagi dan akan dihapus di rilis masa depan. Silakan gunakan SET PASSWORD = '<plaintext_password>' sebagai gantinya
Fabiano
Saya minta maaf ini tidak berhasil untuk saya, tetapi pengguna alter yang diposting oleh Piotr N. berfungsi. Mungkin beroperasi pada versi MySQL yang berbeda.
Pengembang MG
89

Pertama, saya menggunakan:

 mysql -u root -p

Memberikan kata sandi saya saat ini untuk 'root'. Lanjut:

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

Ubah 'new_password'ke kata sandi baru untuk 'root' pengguna.
Itu memecahkan masalah saya.

Piotr N.
sumber
3
Mendapatkan Kesalahan: ERROR 1064 (42000): Anda memiliki kesalahan dalam sintaks SQL; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang benar untuk digunakan di dekat 'USER' root '@' localhost 'IDENTIFIED BY' newPassword ',' root '@' localhost 'PASSWORD' di baris 1
Ketav Chotaliya
Ini bekerja dengan baik. ALTER USER 'username' @ '%' IDENTIFIED BY 'your_password', 'user' @ '%' PASSWORD EXPIRE NEVER;
TheLegendaryCopyCoder
1
Mendapatkan kesalahan: 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 passwordbekerja untuk saya di OS X El Capitan dan MySQL 5.7.12 Community Server. Contoh:

$ /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.

Ini mirip dengan jawaban pavan sachi, tetapi dengan petunjuk kata sandi.

Kesalahan saya adalah "# 1862 - Kata sandi Anda telah kedaluwarsa. Untuk masuk, Anda harus mengubahnya menggunakan klien yang mendukung kata sandi kedaluwarsa." di layar login phpMyAdmin pertama kali.

Kit
sumber
Bekerja untuk saya juga, OS X El Capital dan MySQL 5.17.13! Terima kasih untuk ini!
Zeke
5
Perlu disebutkan bahwa kata "password" bukanlah placeholder , sedangkan "root" adalah nama pengguna yang ingin Anda perbarui:mysqladmin -u [username] -p password
random_user_name
Ini adalah satu-satunya hal yang (tampaknya) berhasil untuk saya di Linux (Fedora 25). Terima kasih.
Avinash Meetoo
Haleluya !! terbaik. perintah. pernah. Saya mencari ke mana-mana tetapi ini akhirnya yang menyelesaikannya. Terima kasih banyak
Connor Leech
19

Masa berlaku kata sandi MySQL

Mengatur ulang kata sandi hanya akan menyelesaikan masalah untuk sementara. Dari MySQL 5.7.4 hingga 5.7.10 (untuk mendorong keamanan yang lebih baik - lihat MySQL: Kebijakan Kedaluwarsa Kata Sandi ) nilai default_password_lifetimevariabel default adalah 360 (1 tahun-ish). Untuk versi tersebut, jika Anda tidak membuat perubahan pada variabel ini (atau akun pengguna individu) semua sandi kedaluwarsa setelah 360 hari.

Jadi dari skrip Anda mungkin mendapatkan pesan: "Kata sandi Anda telah kedaluwarsa. Untuk masuk, Anda harus mengubahnya menggunakan klien yang mendukung kata sandi yang kedaluwarsa."

Untuk menghentikan kadaluwarsa kata sandi otomatis, masuk sebagai root ( mysql -u root -p), lalu, untuk klien yang secara otomatis terhubung ke server (mis. Skrip.) Ubah pengaturan kedaluwarsa kata sandi:

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

ATAU Anda dapat menonaktifkan kata sandi otomatis kedaluwarsa untuk semua pengguna :

SET GLOBAL default_password_lifetime = 0;

Seperti yang ditunjukkan oleh Mertaydin di komentar, untuk membuat ini permanen, tambahkan baris berikut ke my.cnffile yang dibaca MySQL saat startup, di bawah [mysqld]grup pengaturan. Lokasi my.cnftergantung pada pengaturan Anda (misalnya Windows, atau Homebrew di OS X, atau penginstal), dan apakah Anda menginginkan ini per pengguna di Unix atau global:

[mysqld] default_password_lifetime = 0 (Mungkin ada pengaturan lain di sini juga ...)

Lihat dokumen MySQL tentang file konfigurasi .

Dave Everitt
sumber
2
Dengan kata sandi yang sudah kedaluwarsa, hanya pengaturan global yang berfungsi untuk saya.
maaartinus
2
Anda dapat menambahkan parameter ini ke /etc/mysql/my.cnf, di bawah mysqld; default_password_lifetime = 0 jika tidak, setelah mysql restart Anda akan mendapatkan error yang sama lagi.
mertaydin
2
Terima kasih @Dave Everitt & @mertaydin!
WebMW
11

Saya mengalami masalah yang sama baru-baru ini saat menginstal mysql di mac os x capitan. Saya tidak menemukan jawaban yang benar di sini, jadi menambahkan jawaban ini.

MySql dalam versi saat ini, menghasilkan kata sandi sementara saat Anda menginstal mysql. Gunakan kata sandi ini untuk menyetel kata sandi baru menggunakan utilitas mysqladmin seperti di bawah ini;

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

Semoga bisa membantu Anda dan orang lain.

pavan sachi
sumber
7

Cukup unduh MySQL workbench untuk log in. Anda akan diminta untuk mengubah kata sandi dengan segera dan otomatis.

Grassright
sumber
4

mulai MYSQL dalam mode aman

mysqld_safe --skip-grant-tables &

Hubungkan ke server MYSQL

mysql -u root

jalankan perintah SQL untuk mengatur ulang kata sandi:

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

Langkah terakhir, restart layanan mysql Anda

Dylan B
sumber
4

saya telah menghadapi masalah ini beberapa hari yang lalu. Untuk solusi terbaik untuk versi 5.7 MySQL; masuk ke konsol mysql Anda dan ubah kata sandi Anda dengan perintah berikut:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
Mehmet MERCAN
sumber
4

PERINGATAN: ini akan memungkinkan setiap pengguna untuk masuk

Saya harus mencoba sesuatu yang lain. Karena kata sandi root saya kedaluwarsa dan mengubah bukanlah pilihan karena

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

membekukan menambahkan skip-grant-tablesbawah [mysqld]di my.cnfdan restart mysql melakukan trik

Marius.C
sumber
4

Pada Windows di phpmyadmin, lihat Variables: default_password_lifetime, dan alihkan ke 0 (bukan 360), selamat menikmati.

Ini mungkin dari mySQL mengambil lagi 360 hari, jadi tambahkan my.ini:

[mysqld]
default_password_lifetime=0

Dan restart mysql.

Laurent Zminka
sumber
Ini mungkin daripada default_password_lifetime mengambil lagi 360 hari, jadi di my.ini tambahkan:
Laurent Zminka
4

Ini berhasil untuk saya:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Robert Saylor
sumber
1

restart server MySQL dengan opsi --skip-grant-tables Dan kemudian atur kata sandi root baru

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

Sekarang jika Anda perlu, Anda dapat memperbarui tabel mysql.user (bidang password_expired = 'N') agar kata sandi tidak kedaluwarsa.

Adarsh ​​Gangadharan
sumber
Ketika saya memasukkan perintah pertama mysql -u rootsaya mendapatkan kesalahan ini:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
CaribouCode
Sebagai catatan saya berhasil masuk dengan mengubah perintah pertama menjadi mysql -u root -pkemudian meminta saya untuk kata sandi yang saya masukkan. Perintah Anda berikutnya tidak berfungsi untuk saya karena dikatakanYou must reset your password using ALTER USER statement before executing this statement.
CaribouCode
Apakah Anda tahu cara mengatur ulang kata sandi menggunakan ALTER USER? Saya tidak begitu baik dengan Mysql (saya lebih dari orang NodeJS / MongoDB).
CaribouCode
1

Semua jawaban ini menggunakan konsol Linux untuk mengakses MySQL.

Jika Anda menggunakan Windows dan menggunakan WAMP, Anda dapat memulai dengan membuka konsol MySQL (click WAMP icon->MySQL->MySQL console ).

Kemudian itu akan meminta Anda untuk memasukkan kata sandi Anda saat ini, masukkan.

Dan kemudian ketik SET PASSWORD = PASSWORD('some_pass');

Berkarat
sumber
1

solusi mudah terbaik:

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

dan kemudian berfungsi dengan baik.

Fastorro
sumber
0

Kedaluwarsa kata sandi adalah fitur baru di MySQL 5.6 atau 5.7.

Jawabannya jelas: Gunakan klien yang mampu mengubah kata sandi kedaluwarsa (saya pikir Sequel Pro dapat melakukannya).

Perpustakaan MySQLi jelas tidak dapat mengubah kata sandi yang kadaluwarsa.

Jika Anda memiliki akses terbatas ke localhost dan Anda hanya memiliki klien konsol, klien mysql standar dapat melakukannya.

Daniel W.
sumber
2
Terimakasih atas tanggapan Anda. Saya telah mengunduh Sequel Pro dan mencoba terhubung melalui soket dengan itu. Saya mendapatkan kesalahan yang sama tentang kata sandi yang kedaluwarsa ...
CaribouCode
0

Buka konsol MySQL dan ketik SET PASSWORD = 'kata sandi Anda'; dan kemudian tekan ENTER Key yang akan mengatur kata sandi yang Anda tentukan untuk root pengguna.

Anda hanya dapat menulis SET PASSWORD = ''; yang akan membuat kata sandi kosong untuk pengguna root.

Prasant Kumar
sumber
0

Saya melakukan sesuatu seperti ini.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Marcel Zebrowski
sumber
1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin
0

Buka saja MySQL Workbench dan pilih [Instance] Startup / Shutdown dan klik start server. Itu berhasil untuk saya

Arjun
sumber