mysql ไม่ขอรหัสผ่านรูทเมื่อทำการติดตั้ง


54

ฉันเคยapt install mysql-serverติดตั้ง MySQL บน Ubuntu 16.04 แต่ในระหว่างการติดตั้งไม่ได้ขอรหัสผ่านรูท

หลังจากการติดตั้งฉันได้รับERROR 1045เมื่อฉันพยายามเข้าสู่ระบบในฐานะrootและmysql_secure_installationโยนข้อผิดพลาดเดียวกัน ฉันpurgeautoremoveแล้วติดตั้งใหม่ แต่มันไม่ทำงาน

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันสามารถตั้งค่ารหัสผ่านรูทได้หรือไม่หากฉันไม่ได้ตั้งค่าในระหว่างการติดตั้ง

นี่คือบันทึกการติดตั้งของฉัน:

แพ็คเกจเพิ่มเติมต่อไปนี้จะถูกติดตั้ง:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server-5.7
  MySQL เซิร์ฟเวอร์-core-5.7
แพ็คเกจที่แนะนำ:
  mailx tinyca
แพ็คเกจใหม่ต่อไปนี้จะได้รับการติดตั้ง:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql- เซิร์ฟเวอร์ mysql-server-5.7
  MySQL เซิร์ฟเวอร์-core-5.7
0 อัพเกรดแล้ว 6 เพิ่งติดตั้งใหม่ 0 เพื่อลบและ 0 ไม่ได้อัพเกรด
ต้องการเก็บถาวร 0 B / 17,9 MB
หลังจากการดำเนินการนี้จะใช้พื้นที่ดิสก์เพิ่มเติม 160 MB
คุณต้องการที่จะดำเนินการต่อไป? [Y / n] y
กำหนดค่าแพ็คเกจล่วงหน้า ...
การเลือกแพ็กเกจที่ไม่ได้เลือกก่อนหน้านี้ libaio1: amd64
(กำลังอ่านฐานข้อมูล ... 227144 ไฟล์และไดเรกทอรีที่ติดตั้งอยู่ในปัจจุบัน)
กำลังเตรียมที่จะแกะ ... / libaio1_0.3.110-2_amd64.deb ...
กำลังเปิดบรรจุ libaio1: amd64 (0.3.110-2) ...
การเลือกแพ็คเกจที่ไม่ได้เลือกก่อนหน้านี้ mysql-client-core-5.7
กำลังเตรียมที่จะแกะ ... / mysql-client-core-5.7_5.7.12-0ubuntu1_amd64.deb ...
กำลังเปิด mysql-client-core-5.7 (5.7.12-0ubuntu1) ...
การเลือกแพ็คเกจที่ไม่ได้เลือกก่อนหน้านี้ mysql-client-5.7
กำลังเตรียมที่จะแกะ ... / mysql-client-5.7_5.7.12-0ubuntu1_amd64.deb ...
กำลังเปิด mysql-client-5.7 (5.7.12-0ubuntu1) ...
การเลือกแพ็คเกจที่ไม่ได้เลือกก่อนหน้านี้ mysql-server-core-5.7
กำลังเตรียมที่จะแตก ... / mysql-server-core-5.7_5.7.12-0ubuntu1_amd64.deb ...
กำลังเปิด mysql-server-core-5.7 (5.7.12-0ubuntu1) ...
การเลือกแพ็คเกจที่ไม่ได้เลือกก่อนหน้านี้ mysql-server-5.7
กำลังเตรียมที่จะแกะ ... / mysql-server-5.7_5.7.12-0ubuntu1_amd64.deb ...
กำลังเปิด mysql-server-5.7 (5.7.12-0ubuntu1) ...
การเลือกแพ็คเกจ mysql-server ที่ไม่ได้เลือกก่อนหน้านี้
กำลังเตรียมที่จะแกะ ... / mysql-server_5.7.12-0ubuntu1_all.deb ...
กำลังเปิด mysql-server (5.7.12-0ubuntu1) ...
กำลังประมวลผลทริกเกอร์สำหรับ libc-bin (2.23-0ubuntu3) ...
กำลังประมวลผลทริกเกอร์สำหรับ man-db (2.7.5-1) ...
กำลังประมวลผลทริกเกอร์สำหรับ systemd (229-4ubuntu4) ...
การประมวลผลทริกเกอร์สำหรับ ureadahead (0.100.0-19) ...
การตั้งค่า libaio1: amd64 (0.3.110-2) ...
การตั้งค่า mysql-client-core-5.7 (5.7.12-0ubuntu1) ...
การตั้งค่า mysql-client-5.7 (5.7.12-0ubuntu1) ...
การตั้งค่า mysql-server-core-5.7 (5.7.12-0ubuntu1) ...
การตั้งค่า mysql-server-5.7 (5.7.12-0ubuntu1) ...
อัพเดตทางเลือก: การใช้ /etc/mysql/mysql.cnf เพื่อให้ /etc/mysql/my.cnf (my.cnf) ในโหมดอัตโนมัติ
ตรวจสอบว่าจำเป็นต้องทำการอัพเดทหรือไม่
การติดตั้ง MySQL นี้ได้รับการอัพเกรดเป็น 5.7.12 ใช้ - บังคับถ้าคุณยังต้องการเรียกใช้ mysql_upgrade
การตั้งค่าเซิร์ฟเวอร์ mysql (5.7.12-0ubuntu1) ...
กำลังประมวลผลทริกเกอร์สำหรับ libc-bin (2.23-0ubuntu3) ...

คำตอบ:


60

คุณสามารถกู้คืนหรือตั้งค่ารหัสผ่านรูทได้โดยไม่ต้องรู้รหัสผ่านปัจจุบันโดยเริ่ม mysql โดยไม่ต้องโหลดตารางการอนุญาต

โปรดทราบ$คำสั่งใน นี่เป็นการระบุพรอมต์ของเทอร์มินัลที่คุณเห็นเมื่อพิมพ์คำสั่ง มันแสดงว่าเป็นบรรทัดข้อความ แต่และคำสั่งเทอร์มินัลที่พิมพ์จริง "การmysql>" คำนำหน้ายังเป็นพรอมต์ นั่นคือพรอมต์ที่คุณได้รับเมื่อเรียกใช้mysqlแบบโต้ตอบได้ทันที

นี่คือcli (บรรทัดคำสั่ง) เพื่อทำสิ่งนี้:
(ต้องแน่ใจว่าได้หยุดเซิร์ฟเวอร์ปัจจุบันก่อนที่จะทำตามขั้นตอนมีเพียงเซิร์ฟเวอร์เดียวเท่านั้นที่สามารถทำงานได้ในแต่ละครั้ง)

$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld
$ sudo mysqld_safe --skip-grant-tables&

ตอนนี้คุณสามารถล็อกอินด้วย root ได้โดยไม่ต้องใช้รหัสผ่านและดำเนินการคำสั่งทั้งหมดเช่นเดียวกับในกรณีนี้ให้ตั้งรหัสผ่านรูทเป็นรูท

$ sudo mysql --user=root mysql

นี่เป็นรหัสผ่านชุดรูทที่คุณจะใช้ใน mysql ถ้าคุณมี MySQL 5.6 หรือต่ำกว่า:

mysql> update user set Password=PASSWORD('new-password') where user='root';
flush privileges;

ใน MySQL 5.7 หรือสูงกว่า

mysql> update user set authentication_string=PASSWORD('new-password') where user='root';
flush privileges;

จากตรงนั้นให้ออก (ฆ่า msqld ที่กำลังรัน) mysql และเริ่มทำงานตามปกติ

หมายเหตุเกี่ยวกับการเริ่มและหยุดบริการ mysql:

หยุด MySQL:

$ sudo service mysql stop

เริ่ม mysql (ปกติ):

$ sudo service mysql start

ฆ่าเซสชันเซฟโหมด mysql ชั่วคราว:

$ sudo mysqladmin shutdown

11
ใน mysql 5.7.12 ไม่มีคอลัมน์ชื่อรหัสผ่านในตารางผู้ใช้ ดังนั้นคำสั่งดังต่อไปนี้ทำงานให้ฉัน อัปเดตชุดผู้ใช้ authentication_string = PASSWORD ('รหัสผ่านใหม่') โดยที่ user = 'root';
รหัส

7
ฉันยังได้รับERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
llamerr

@ ErelSegal-Halevi มีสองสิ่งที่คุณควรทำ $ mysql_upgrade -u root -pวิ่ง ลองคำสั่งข้างต้นที่ RP Singh กำหนด
LD James

ฉันยังคงได้รับข้อผิดพลาดนี้
เจมี่ฮัทเบอร์

SET PASSWORD FOR 'root' = PASSWORD('your-password')ถ้าคุณกำลังใช้ mariadb
user1036719

37

มันจะไม่ถามรหัสผ่านในขณะที่ติดตั้งmysqlใน Ubuntu 16.04 แต่คุณสามารถตั้งค่าได้หลังจากการติดตั้งสำเร็จในวิธีต่อไปนี้:

หลังจากติดตั้ง mysql เสร็จแล้วให้รันคำสั่ง:

sudo mysql_secure_installation

มันจะแสดง:

หมายเหตุ: การเรียกใช้ส่วนทั้งหมดของสคริปต์นี้แนะนำสำหรับเซิร์ฟเวอร์ MariaDB ทั้งหมดในการใช้งานจริง! โปรดอ่านแต่ละขั้นตอนอย่างละเอียด!

ในการเข้าสู่ MariaDB เพื่อรักษาความปลอดภัยเราจะต้องใช้รหัสผ่านปัจจุบันสำหรับผู้ใช้รูท หากคุณเพิ่งติดตั้ง MariaDB และคุณยังไม่ได้ตั้งรหัสผ่านรูทรหัสผ่านจะว่างเปล่าดังนั้นคุณควรกด Enter ที่นี่

Enter current password for root (enter for none): (ที่นี่กด Enter)

ตกลงใช้รหัสผ่านเรียบร้อยแล้วย้ายไปที่ ...

การตั้งค่ารหัสผ่านรูทช่วยให้มั่นใจได้ว่าไม่มีใครสามารถล็อกอินเข้าสู่ผู้ใช้รูทของ MariaDB ได้โดยไม่ต้องมีการอนุญาตที่เหมาะสม

Set root password? [Y/n] y   (press 'y' to set new password)
New password: 
Re-enter new password:

อัปเดตรหัสผ่านสำเร็จแล้ว! กำลังโหลดตารางสิทธิ์อีกครั้ง .. ... สำเร็จ!


สำหรับ Ubuntu 18.04 หรือmysql-serverรุ่น 5.7.22 วิธีนี้จะไม่ทำงาน

ในการตั้งค่ารหัสผ่านรูทใน Ubuntu 18.04 ขั้นแรกให้ทำตามคำสั่งสามคำสั่งแรกหรือสองขั้นตอนแรกของคำตอบของLD Jamesจากนั้นเรียกใช้

mysql> alter user 'root'@'localhost' identified by '<password>';

ตั้งรหัสผ่านสำหรับผู้ใช้รูท!

หรือ

ทำตามขั้นตอนเหล่านี้เพื่อตั้งค่ารหัสผ่านรูทใน 18.04:

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

sudo mysql -u root -p
Enter password: (press enter as no password is set)

หลังจากนั้นสามารถเรียกใช้คิวรีได้อย่างง่ายดาย

ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';

2
current password for rootปัญหาในกรณีของคำถามนี้คือโดยที่ผู้ใช้ไม่สามารถไปแจ้งที่คุณกล่าวถึงเพราะเขาไม่ทราบ
LD James

@LDJames ใช่คุณพูดถูก ฉันจำไม่ได้เกี่ยวกับข้อผิดพลาด: 1405 เมื่อฉันวิ่งmysql_secure_installationแต่sudo mysql_secure_installationทำงานให้ฉัน การติดตั้ง mysql ไม่ถามรหัสผ่าน มันเกิดขึ้นกับฉันเหมือนกัน และhere press enterหมายถึงกด Enter โดยไม่ใช้รหัสผ่าน
เดซี่

2
ในฐานะ concers ubuntu 18.04 หรือ debian 9+ มันจะไม่เชื่อมต่อกับรหัสผ่านที่ว่างเปล่าและแม้ว่าหลังจากรีเซ็ตรหัสผ่านสำหรับรูทแล้วก็ยังปฏิเสธที่จะเชื่อมต่อ
chefarov

@chefarov เผชิญปัญหาเดียวกันทำลายอย่างเข้มข้น
RedactedProfile

ที่จริงฉันยังได้รับข้อผิดพลาดเดียวกัน
Jamie Hutber

16

เห็นได้ชัดว่าการติดตั้ง mysql-server ใน 16.04 (หรือการติดตั้ง 5.7 ใด ๆ ?) ช่วยให้เข้าถึงรากไม่ผ่านรหัสผ่าน แต่ผ่านปลั๊กอินauth_socket การรันsudo mysql -u root(รหัสผ่าน nb w / oa) จะให้คอนโซล mysql ขณะที่รันคำสั่งโดยไม่รูทพร้อมท์ให้ใส่รหัสผ่าน

ดูเหมือนว่าการเปลี่ยนรหัสผ่านไม่ได้สร้างความแตกต่างมากนักเนื่องจากแบ็กเอนด์รับรองความถูกต้องไม่ได้ตรวจสอบรหัสผ่าน มีบทความที่ครอบคลุมมากเกี่ยวกับวิธีการคือเปลี่ยนปลั๊กอินและเปลี่ยนไปตรวจสอบรหัสผ่าน


4
ฉันสามารถยืนยันด้วยการติดตั้งใหม่apt install mysql-serverโดยไม่ต้องระบุรหัสผ่านใน 18.04 อาการและวิธีแก้ไขนั้นตรงตามที่อธิบายไว้
EricC

แล้วฉันจะเชื่อมต่ออย่างไร
เจมี่ฮัทเบอร์

9

หลังจากการติดตั้งเพียง:

1

sudo mysql

(ใช่ไม่มีผู้ใช้ไม่ผ่าน)

2. ตอนนี้คุณอยู่ในคอนโซล mysql:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_new_pass';

3

FLUSH PRIVILEGES;

  1. แค่นั้นแหละ. ตอนนี้คุณสามารถเข้าสู่คอนโซลในครั้งต่อไปตามปกติ:

    mysql -u root -p my_new_pass


3
ฉันลองคำตอบอื่น ๆ อีกมากมาย แต่อันนี้ใช้ได้กับ Amazon EC2
Haris ur Rehman

2
นี่เป็นคำตอบที่ถูกต้องสำหรับ WSL Ubuntu (Linux บน Windows)
Fer García

2
นี่เป็นคำตอบเดียวที่ใช้ได้สำหรับฉันในการติดตั้ง Ubuntu 18.04 ใหม่บน Google Cloud
Aakash

1
ทำงานให้ฉันใน Ubuntu 19.04 ฉันรัน mysql_secure_myinstallation แต่ดูเหมือนว่าไม่ได้ตั้งรหัสผ่านรูท
Jens Wagemaker

1
ฉันลองวิธีแก้ปัญหาหลายสิบข้อ นี่เป็นวิธีที่ง่ายที่สุดและทำงานได้เพียงอย่างเดียว
mreff555

4
  1. มีบัญชีผู้ใช้เริ่มต้น

    $ vim /etc/mysql/debian.cnf 
    

    คุณจะได้รับบัญชีนี้จากมันดังนี้:

    user     = debian-sys-maint
    password = nUZTARYslBsASzpw
    
  2. คุณเข้าสู่ระบบด้วยบัญชีนี้

    $ mysql -u debian-sys-maint -p
    
  3. แก้ไขรหัสผ่านรูทของคุณ

    mysql> show databases;
    
    mysql> use mysql;
    
    mysql> update user set authentication_string=PASSWORD("new_password") where user='root';
    
    mysql> update user set plugin="mysql_native_password";
    
    mysql> flush privileges;
    
    mysql> quit;
    
  4. รีสตาร์ท mysql

    $ /etc/init.d/mysql restart;
    

จากนั้นคุณสามารถmysql -u root -pตั้งค่าก่อนหน้านี้กับคุณ


ฉันลองวิธีแก้ปัญหาอื่น ๆ ทั้งหมดและนี่เป็นวิธีเดียวที่เหมาะกับฉัน (Linux Mint 19.2)
ElectroBuddha

0

การเพิ่มไปยังคำตอบหลักถ้าคุณติดอยู่ที่

" mysqld_safe การเริ่มต้น mysqld daemon กับฐานข้อมูลจาก / var / lib / mysql "

สิ่งหนึ่งที่ต้องจำไว้ว่าคุณต้องใช้หน้าต่างเทอร์มินัลอื่นเพื่อป้อนคำสั่งต่อไปนี้

$ sudo mysql --user=root mysql

หากคุณพยายามที่จะทำในหน้าต่างเดียวกันมันจะปิดกระบวนการ mysqld safemode


-1

ต่อไปนี้เป็นวิธีตั้งค่าmysql-serverด้วยพรอมต์รหัสผ่านเทอร์มินัลใน Ubuntu 18.10

  1. ดาวน์โหลด The MySQL APT Repository ผ่านhttps://dev.mysql.com/downloads/repo/apt/
  2. cdในไดเรกทอรีที่คุณดาวน์โหลดและเรียกใช้dpkg -i mysql-apt-config_0.8.13-1_all.deb(ตรวจสอบหมายเลขรุ่นของคุณ)
  3. จากเมนูแจ้งให้เลือกตัวเลือกสุดท้าย "ตกลง" จากนั้นเลือก "ตกลง" อีกครั้ง

  4. อัปเดตและติดตั้ง mysql-server และ mysql-client:

อัปเดต sudo apt
sudo apt ติดตั้ง mysql-server mysql-client
  1. พิมพ์รหัสผ่านรูทของคุณใน promt
  2. เลือก"Use Legacy Authentication Method"ว่าเฟรมเวิร์ก / แอปพลิเคชันที่ทำงานอยู่ของคุณ (เช่น laravel) ซึ่งยังไม่รองรับใหม่"Strong Password Encryption"หรือมิฉะนั้นหากเฟรมเวิร์ก / แอปพลิเคชันของคุณรองรับ"Strong Password Encryption"ให้เลือก
  3. เข้าสู่ระบบด้วยรูทและตรวจสอบว่ามันใช้งานได้หรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.