Instal MySQL untuk Windows dari .zip dan setel ulang kata sandi root


8

Saya ingin memiliki di PC saya (dengan Windows 8.1 x64) hanya server MySQL, tanpa Workbench atau sesuatu. Jadi saya mengunduh .ziparsip dari dev.mysql.com/downloads . Ini adalah unduhan untuk Win64 pada x86_64 versi 5.7.9 (MySQL Community Server (GPL)).

Saya menginstalnya sebagai layanan Windows, tetapi tidak ada mysqldatabase, hanya information_schema. Jadi saya melakukan ini:

mysql_upgrade.exe --upgrade-system-tables

Dan mysqldatabase dibuat. Tetapi seiring dengan itu terjadi sesuatu dengan pengguna root, karena saya tidak dapat mengakses mysqllagi.

Jadi saya memutuskan untuk mereset kata sandi yang tiba-tiba muncul ini (karena saya belum memilikinya sebelumnya). Saya menemukan solusi berikut dalam manual resmi, saya memulai server seperti ini:

mysqld.exe --skip-grant-tables --console

Kemudian saya membuka mysqltanpa kata sandi:

mysql.exe u root

Dan kemudian mencoba mengatur ulang kata sandi root:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');

Tapi saya mendapat kesalahan ini:

GALAT 1131 (42000): Anda menggunakan MySQL sebagai pengguna anonim dan pengguna anonim tidak diizinkan mengubah kata sandi ".

Apa ini? Bagaimana saya anonim? Semua perintah dijalankan di cmd.exebawah Administrator.

Apa yang harus saya lakukan untuk mereset kata sandi root dalam situasi ini?

Pembaruan 1: Saya mencoba memeriksa pengguna saat ini:

SELECT USER(), CURRENT_USER();

Itu memberi:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

Aneh, karena saya memulainya mysql.exe -u root.

Lalu saya memeriksa tabel pengguna:

SELECT user FROM mysql.user;

Itu memberi:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

Itu bahkan lebih aneh. Juga tidak ada bidang kata sandi:

SELECT user, password FROM mysql.user;

GALAT 1054 (42S22): 'Kata sandi' kolom tidak dikenal di 'daftar bidang'

Jadi saya tidak bisa mengubah kata sandinya.

Dan saya tidak dapat membuat pengguna baru:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

GALAT 1290 (HY000): Server MySQL berjalan dengan --skip-grant-tablesopsi sehingga tidak dapat menjalankan pernyataan ini

Sekarang saya tersesat.

Pembaruan 2: Saya kira, saya melakukan kesalahan sejak awal. Rupanya, mysqld.exe --initializeentah bagaimana saya melewatkan perintah.

Jadi, ini adalah bagaimana saya menginstal MySQL dari .zip-archive, terima kasih kepada @RolandoMySQLDBA :

  1. Buka arsip, siapkan my.ini.
  2. Jalankan mysqld.exe --initialize, dapatkan kata sandi sementara dari .errfile.
  3. Instal MySQL sebagai layanan dan jalankan

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Hubungkan mysql -u root -pdengan kata sandi sementara.

  5. Ubah kata sandi sementara:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';

Jawaban:


6

Karena Anda mulai mysqlddengan --skip-grant-tables , Anda tidak dapat menjalankan perintah GRANT , REVOKE , atau SET PASSWORD standar apa pun . Meskipun demikian, Anda dapat mengubah kata sandi root@localhostsebagai berikut:

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

Kemudian, restart mysqld dan Anda kembali dalam bisnis.

Mengenai Anda yang anonim, jika Anda masuk sekarang dan jalankan

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Anda akan mencatat bahwa HowYouWereAllowedToLoginakan memiliki nama pengguna kosong dan beberapa host.

COBALAH !!!

UPDATE 2015-11-17 16:24 EST

Kolom dikenal sebagai passworddi mysql.usertidak ada lagi di MySQL 5.7.

Itu diganti namanya authentication_string.

Pendekatan yang Tepat

Apa yang seharusnya Anda lakukan adalah menjalankan

mysqld --initialize

Itu akan membuat folder data untuk Anda.

Root @ localhost diberikan kata sandi sementara, yang terlihat dalam file kesalahan dimulai dengan datetime dan string berikut

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

Anda bisa login dengannya lalu jalankan ALTER USER

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

Lihat Dokumentasi MySQL 5.7 pada SET PASSWORD


Terima kasih atas balasannya Ya, saya mengetahui pembatasan semacam itu. Tapi ini adalah langkah-langkah dari manual MySQL. Dan saya mencoba mengikuti instruksi Anda, silakan lihat pertanyaan saya yang diedit.
retif

Tidak ada kolom kata sandi lagi di mysql.user, jadi metode ini tidak akan pernah berfungsi lagi. Namun, saat ini juga metode lain (via --skip-grant-tables dan --init-file) rusak, jadi Anda tidak dapat mengatur ulang kata sandi di 5.7.9 atm.
Mike Lischke

@MikeLischke Terima kasih. Saya perlu menghapus jawaban ini
RolandoMySQLDBA

@ MikeLischke Saya baru sadar passwordkolom itu diganti namanya authentication_string.
RolandoMySQLDBA

Yah, sebenarnya memodifikasi tabel pengguna secara langsung adalah sesuatu dari masa lalu dan akan hilang, tetapi bahkan menggunakan perintah standar (seperti mengubah pengguna) tidak berfungsi karena saat ini mereka ditolak karena Anda dianggap sebagai pengguna anonim yang tidak diizinkan untuk mengeluarkan perintah-perintah tersebut (jika Anda memulai server dengan --skip-grant-tables atau --init-file). Opsi --initialize adalah cara yang tepat untuk mengatur ulang root pw.
Mike Lischke
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.