ERROR 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/run/mysqld/mysqld.sock' (2)


441

Tôi đã cài đặt LAMP trên Ubuntu 12.04 LTS (Precise Pangolin) và sau đó đặt mật khẩu root trên phpMyAdmin . Tôi quên mật khẩu và bây giờ tôi không thể đăng nhập. Khi tôi cố gắng thay đổi mật khẩu thông qua thiết bị đầu cuối, tôi nhận được:

ERROR 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/run/mysqld/mysqld.sock' (2)

Làm thế nào tôi có thể sửa lỗi này? Tôi không thể mở LAMP, gỡ cài đặt hoặc cài đặt lại.


Có thể cài đặt lại dễ dàng hơn: stackoverflow.com/a/31984482/763744
Hạt nhân

Đặt lại mật khẩu bằng cách dừng MySQL và khởi động nó ở chế độ an toàn bỏ qua các bảng
--grant

gõ cái này vào thiết bị đầu cuối của bạn "sudo apt-get install mysql-server"
Humphrey

Bắt đầu hoặc khởi động lại dịch vụ mysql và kiểm tra. sudo /etc/init.d/mysql bắt đầu hoặc sudo /etc/init.d/mysql khởi động lại
Jitendra Patel

systemctl bắt đầu mariadb.service
Thewebus

Câu trả lời:


253

Tôi đã từng gặp vấn đề này và giải quyết nó bằng cách cài đặt mysql-server, vì vậy hãy chắc chắn rằng bạn đã cài đặt mysql-server, chứ không phải mysql-clientcái gì khác.

Lỗi đó có nghĩa là tệp /var/run/mysqld/mysqld.sockkhông tồn tại, nếu bạn không cài đặt mysql-server, thì tệp sẽ không tồn tại. Vì vậy, trong trường hợp đó, cài đặt nó với

sudo apt-get install mysql-server

Nhưng nếu mysql-serverđã được cài đặt và đang chạy, thì bạn cần kiểm tra các tập tin cấu hình.

Các tập tin cấu hình là:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

Trong /etc/my.cnf, cấu hình tệp ổ cắm có thể /tmp/mysql.sockvà trong /etc/mysql/my.cnfcấu hình tệp ổ cắm có thể /var/run/mysqld/mysqld.sock. Vì vậy, loại bỏ hoặc đổi tên /etc/mysql/my.cnf, hãy để mysql sử dụng /etc/my.cnf, sau đó vấn đề có thể được giải quyết.


Bạn có thể chạy trình nền mysql và cài đặt lõi máy chủ mysql, nhưng bạn cần cài đặt máy chủ mysql, đây là tệp nhị phân VÀ thiết lập cơ sở dữ liệu hệ thống!
Cedric

99
sudo apt-get install mysql-serverđể cài đặt mysql trên Ubuntu
kéo theo

9
Nếu tôi phải giải thích về mặt kỹ thuật, tôi sẽ nói 1) Nếu bạn đang chạy "mysql -u <user_name> -h <MySQL_Server_address> -p", thì bạn thực sự đang chạy máy khách mysql để truy cập máy chủ mysql. Nếu bạn chưa cài đặt máy chủ mysql trên địa chỉ / địa chỉ IP mà bạn đã đề cập với '-h', lỗi trên sẽ bật lên. Điều này là do nó không thể kết nối với máy chủ MySQL thông qua socket mysql.sock 2) Nếu máy chủ Mysql đã được cài đặt, nó sẽ chạy. Nếu không, bạn sẽ quan sát thấy lỗi tương tự. Vì vậy, có được nó chạy trên máy chủ mà bạn chỉ định.
Mayur Nagekar

1
Điều này cũng có thể xảy ra nếu bạn cố gắng thay đổi thư mục lưu trữ cơ sở dữ liệu, nhưng nhập sai thư mục trong tệp cấu hình (như lỗi chính tả). Thay vì cho bạn biết thư mục typo không tồn tại, nó sẽ cho bạn biết rằng bạn thiếu quyền truy cập vào nó.
Michael

4
Bước đầu tiên tôi sẽ khuyên bạn nên thử khởi động lại quy trình máy chủ (xem sự khác biệt của máy chủ so với máy khách). Hãy thử khởi động lại sudo /etc/init.d/mysql. Thông thường, cài đặt lại là không cần thiết. Tôi muốn giới thiệu bạn đầu tiên kiểm tra các tập tin nhật ký. Không chỉ tệp nhật ký của mysql mà còn / var / log / syslog vì bạn có thể đã gặp sự cố máy chủ khiến mysql bị hỏng do tác dụng phụ.
Tái lập

212

Thử cái này:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

Ngoài ra (để xem nếu nó đang chạy):

telnet 127.0.0.1 3306 

Có lẽ nó chỉ là một cấu hình sai trong my.cnftệp, trong /etc/somewhere(tùy thuộc vào bản phân phối Linux ).


1
Tôi đang nhận được cùng một lỗi. Và tôi đã kiểm tra và liên kết mặc định trong cả chính và my.cnf đã được đặt thành 127.0.0.1 rồi. Tuy nhiên, sử dụng lệnh của bạn ở trên cho phép tôi kết nối. Sẽ phải tiếp tục săn lùng để xem tại sao chỉ cần thực hiện "mysql" là đưa ra lỗi.
cchiera

1
Tôi nhận được telnet: Không thể kết nối với máy chủ từ xa: Kết nối bị từ chối do lệnh telnet. Tuy nhiên, apache vẫn chạy khi tôi có thể mở localhost
Rishi Dua

@cchiera Bạn biết đấy, tôi không có lỗi này trước đây. Nhưng khi tôi muốn kết nối với db của mình thông qua một ứng dụng iOS bằng cách sử dụng đường hầm ssh, tôi đã gặp lỗi 2013 này. Để giải quyết nó tôi phải chỉnh sửa /etc/my.cnfvà nhận xét #bind-address = 127.0.0.1 Tài liệu tham khảo 1 Tài liệu tham khảo 2 . Sau đó tôi có thể kết nối. Sau đó, tôi nhận ra rằng tôi đã nhận được lỗi năm 2002 này đã đưa tôi đến câu trả lời này và bây giờ nó hoạt động trở lại. Chắc chắn tôi đồng ý với bạn bằng cách giải thích về lý do tại sao chỉ cần gõ mysqlmà không -hném lỗi.
Pathros

Lưu ý: mysql -h localhostkhông hoạt động. Hãy chắc chắn để sử dụng mysql -h 127.0.0.1như được chỉ định trong câu trả lời.
vadasambar

Làm thế nào tôi có thể giải quyết điều này nếu tôi có thể đăng nhập bằng lệnh trong câu trả lời này?
Carlos A. Jimenez Holmquist

128

Tôi đang thấy tất cả các câu trả lời này, nhưng không có câu trả lời nào cho phép đặt lại mật khẩukhông có câu trả lời nào được chấp nhận . Câu hỏi thực tế là anh ta quên mật khẩu, vì vậy anh ta cần phải thiết lập lại, không xem nó có chạy hay không (cài đặt hay không) vì hầu hết các câu trả lời này đều ngụ ý.


Để đặt lại mật khẩu

Thực hiện theo các bước sau (có thể hữu ích nếu bạn thực sự quên mật khẩu của mình và bạn có thể thử nó bất cứ lúc nào, ngay cả khi bạn không ở trong tình huống hiện tại):

  1. Dừng lại mysql

    sudo /etc/init.d/mysql stop

    Hoặc cho các phiên bản phân phối khác:

    sudo /etc/init.d/mysqld stop
  2. Khởi động MySQL ở chế độ an toàn

    sudo mysqld_safe --skip-grant-tables &
  3. Đăng nhập vào MySQL bằng root

    mysql -uroot
  4. Chọn cơ sở dữ liệu MySQL để sử dụng

    use mysql;
  5. Đặt lại mật khẩu

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
  6. Xóa sạch các đặc quyền

    flush privileges;
  7. Khởi động lại máy chủ

    quit
  8. Dừng lại và khởi động lại máy chủ

    Ubuntu và Debian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start

    Trên CentOS, Fedora và RHEL:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
  9. Đăng nhập bằng mật khẩu mới

    mysql -u root -p
  10. Nhập mật khẩu mới và tận hưởng lại máy chủ của bạn như không có gì xảy ra

Điều này được lấy từ Đặt lại mật khẩu gốc của MySQL .


Cập nhật mật khẩu người dùng không hoạt động đối với tôi tuy nhiên một khi đã đăng nhập vào màn hình MySQL và đã sử dụng cơ sở dữ liệu mysql, repair table user use_frmtôi đã làm việc để giải quyết vấn đề này. - stackoverflow.com/questions/4297592/ Mạnh
Craig van Tonder

20
Trong MySQL 5.7, trường mật khẩu trong trường bảng mysql.user đã bị xóa, bây giờ tên trường là 'xác thực_ chuỗi', vì vậy (5) phải làupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel

Bạn có biết một cách để biến điều này thành một kịch bản bash không? Tôi dường như cần nó mỗi khi tôi khởi động lại hộp.
vphilipnyc

Một cái gì đó cho tôi biết bạn muốn một cách giải quyết, nhưng bạn thực sự nên cố gắng tìm hiểu lý do tại sao bạn cần phải làm điều này mỗi lần và khắc phục điều đó. Đối với kịch bản hỏi một câu hỏi mới và đăng những gì bạn đã thử, có thể một số người khác có thể giúp đỡ
davejal

2
Điều này rất tốt cho tôi, nhưng trước tiên tôi phải thực hiện giải pháp này: stackoverflow.com/questions/42153059/ Lời
Andrew Fox

68

Tôi đã thử các bước sau:

  1. Vào super user hoặc sử dụngsudo
  2. Mở /etc/mysql/my.cnfbằng gedit
  3. Tìm bind-addressvà thay đổi giá trị của nó thành địa chỉ IP của máy chủ cơ sở dữ liệu. Đối với tôi, nó làlocalhost hoặc127.0.0.1
  4. Lưu và đóng tập tin.
  5. Quay trở lại thiết bị đầu cuối và thực hiện sudo service mysql start

Và nó đã làm việc cho tôi.


4
Từ đây, tôi chỉ chạy sudo dịch vụ khởi động lại mysql và nó đã hoạt động.
Orane

Trong trường hợp của tôi, lỗi là do IP bị thay đổi, vì vậy tôi đã đặt bind-address = localhost
Nicolás Arias

@rshahriar không có gì được gọi là địa chỉ liên kết trong /etc/my.cnf của tôi, đó là một ý tưởng tốt để thêm trường
RCBian

@SilvioDelgado Không nếu bạn muốn kết nối thông qua đường hầm ssh. Giải thích tại đây
Pathros

khởi động lại dịch vụ mysql cũng hoạt động với tôi, nhưng vẫn không biết tìm nhật ký lỗi ở đâu để tìm ra nguyên nhân và cố gắng ngăn nó xảy ra lần nữa ...
Maleka

41

Tôi đã khắc phục vấn đề này bằng cách thực hiện lệnh sau:

mysql.server start

Và nếu bạn đang dùng mac và sử dụng brew để cài đặt mysql, chỉ cần sử dụng:

brew services start mysql

35

Tôi đã có một vấn đề tương tự. mysql sẽ không bắt đầu:

sudo service mysql start
start: Job failed to start

Nếu tôi vô hiệu hóa apparmor:

sudo aa-complain /etc/apparmor.d/*

vấn đề đã biến mất Vấn đề là mysqld đã cố gắng truy cập /run/mysqld/mysqld.sock nhưng hồ sơ apparmor chỉ cấp phép cho /var/run/mysqld/mysqld.sock (/ var / run được liên kết với / chạy, vì vậy đây thực sự là những liên kết giống nhau). Không chắc chắn tại sao mysqld không sử dụng đường dẫn var vì đó là cài đặt trong tất cả các tệp cấu hình, nhưng bạn có thể khắc phục sự cố bằng cách thêm đoạn sau vào /etc/apparmor.d/usr.sbin.mysqld

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

Tôi không biết rằng tôi đã phải gọi "sudo dịch vụ mysql bắt đầu". Lần trước tôi đã cài đặt MySQL trên Ubuntu, tôi nghĩ nó tự động khởi động khi cài đặt. MariaDB trên Manjaro yêu cầu dịch vụ phải được khởi động rõ ràng sau khi cài đặt.
dmiller309

31

Trong trường hợp của tôi, đó là đĩa đã đầy và mysqld không thể bắt đầu nữa.

Hãy thử khởi động lại dịch vụ mysql.

> service mysql restart

hoặc là

> service mysql stop

> service mysql start

Nếu nó không nhận ra stoplệnh thì chắc chắn là không gian đĩa. Bạn nên làm cho một số không gian trong phân vùng mysqlđược phân bổ hoặc làm cho đĩa lớn hơn.

Kiểm tra dung lượng đĩa bằng

> df -h

2
Điều tương tự cũng xảy ra với tôi - đĩa đầy đủ. Dọn dẹp một số không gian, khởi động lại và vấn đề biến mất.
Darren

2
Nếu đó là vấn đề của bạn khi thực thi: "/etc/init.d/mysqld start" sẽ cho bạn biết phân vùng đĩa của bạn đã đầy
Tickon

Tương tự với tôi, đĩa 100%. Làm sạch không gian và bắt đầu dịch vụ ok
Hugo

28

Tôi đã giải quyết điều này bằng cách giết mysqlquá trình:

ps -ef | grep mysql
kill [the id]

Và sau đó tôi khởi động lại máy chủ với:

sudo /etc/init.d/mysql restart

Nhưng cũng starthoạt động:

sudo /etc/init.d/mysql start

Sau đó, tôi đăng nhập như admin, và tôi đã hoàn thành.


tốt, tôi thực sự đã hủy bỏ mysql trước khi nó gặp sự cố. Sau đó, tôi nhận được "* Xin hãy xem syslog." và "ERROR 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/run/mysqld/mysqld.sock' (111)". Cuối cùng, tôi nhận ra nó đang cố gắng tự phục hồi, vì vậy tôi giết và khởi động lại nó.
cwhsu

Có những tình huống (hiếm) trong đó "mysql start" sẽ thất bại, vì vậy bạn cần sử dụng đối số "khởi động lại". Nếu bạn cần phải giết một tiến trình daemon, tốt hơn là sử dụng đối số "dừng" thay vì lệnh kill. Tuy nhiên, lệnh killall thuận tiện hơn lệnh kill (killall mysqld).
Tái lập

Giết quá trình MySQL và sau đó khởi động lại MySQL làm việc cho tôi, thật tuyệt
Vishal Shetty

21

Bằng cách nào đó, quy trình máy chủ MySQL không tạo ra ổ cắm hoặc máy khách đang tìm kiếm ổ cắm ở sai vị trí.

Đề nghị đầu tiên của tôi sẽ là kiểm tra xem máy chủ MySQL có đang chạy hay không. Đề xuất thứ hai có thể là, máy chủ MySQL có chạy trên máy chủ khác không? Nếu vậy, thêm-h <hostname> cờ vào máy khách MySQL của bạn trong thiết bị đầu cuối.

Nếu MySQL thực sự đang chạy và chạy cục bộ, hãy kiểm tra my.cnftệp của bạn . Cần có một dòng như

socket = /var/run/mysqld/mysqld.sock

Xem nếu điều đó phù hợp với vị trí ổ cắm mà bạn đề cập trong bài viết của bạn.

Từ kinh nghiệm, tôi có thể nói kịch bản rất có thể là máy chủ MySQL của bạn hoàn toàn không chạy hoặc không chạy trên cùng một máy chủ như nơi bạn chạy máy khách MySQL của mình từ thiết bị đầu cuối.


19

Tôi vừa trải qua vấn đề tương tự sau khi tôi phải khởi động lại máy chủ sản xuất của mình. Tôi đang chạy Debian 8.1 (Jessie) trên một giọt DigitalOcean.

Đây là những gì tôi đã làm để giải quyết vấn đề của mình:

  1. Kiểm tra nếu các tập tin /var/run/mysqld/mysqld.socktồn tại. Nếu không, hãy tạo thủ công bằng cách nhập touch /var/run/mysqld/mysqld.sock(đó là việc tôi phải làm).

  2. Vì vậy, quá trình MySQL có thể sử dụng tệp này. Thay đổi quyền sở hữu của tập tin nói bằng cách nhập chown mysql /var/run/mysqld/mysqld.sock.

  3. Khi '2' đã được thực hiện, hãy khởi động lại dịch vụ MySQL bằng cách nhập service mysql restarthoặc /etc/init.d/mysql restart.

Sau khi trải qua các bước trên, vấn đề của tôi đã được giải quyết. Tôi hiếm khi gặp vấn đề này, và có lẽ có một cách tốt hơn, vì vậy bằng mọi cách cung cấp phản hồi mang tính xây dựng nếu cần :).


1
Tôi nhận thấy tập tin không có ở đó và chỉ cần khởi động lại máy chủ mysql. Nó tự động tạo tập tin và khởi động tốt. Cảm ơn đã dẫn đầu.
Khởi động

15

Máy chủ mysql của bạn có thể không chạy. Đảm bảo nó chạy bằng cách gõ mysql.server startvào thiết bị đầu cuối.


15

Kiểm tra "bind-adress" tham số trong my.cnf.

Khác thử với lệnh:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h cho máy chủ 127.0.0.1, nghĩa là, localhost

  • -P (thông báo -P là chữ hoa) cho cổng 3306, nghĩa là cổng mặc định cho MySQL


11

Đây là những gì làm việc cho tôi:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysql restart

Điều này tạo ra một liên kết.


Không hoạt động với tôi :( Điều này tạo ra một liên kết tượng trưng giữa hai thư mục askubfox.com/a/56340/242873
Michael

11

Nếu bạn đang sử dụng Amazon EC2 và bạn đang gặp vấn đề này, thì bạn chỉ cần làm:

sudo yum install mysql-server
sudo service mysqld restart

Amazon EC2 không cài đặt máy chủ (chỉ cài đặt máy khách), vì vậy trong trường hợp đó, bạn cần cài đặt máy chủ đó, và sau đó thử

 mysql -u root -p

để kiểm tra nếu nó hoạt động.


Không thể khởi động lại mysqld.service: Không tìm thấy đơn vị mysqld.service. Trong Ubuntu 16.04
Ketav Chotaliya

9

Tôi nghĩ bất cứ khi nào bạn gặp lỗi

ERROR 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/lib/mysql/mysql.sock'

Tôi sẽ khuyên bạn trước tiên để kiểm tra xem mysqldaemon của bạn có chạy hay không ... Hầu hết thời gian nó sẽ không chạy theo mặc định. Bạn có thể kiểm tra nó bằng cách /etc/init.d/mysqld status.

Nếu nó không chạy thì hãy khởi động nó trước:

.../etc/init.d/mysqld start.

Tôi đặt cược nó sẽ làm việc 110%.


9

Thay vì sử dụng localhost:

mysql -u myuser -pmypassword -h localhost mydatabase

Sử dụng 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(cũng lưu ý, không có khoảng trắng giữa -p và mypassword)

Thưởng thức :)


Bạn cũng không thể bao gồm mật khẩu của mình từ dòng lệnh để bảo mật bằng cách sử dụng dòng này: mysql -u myuser -p -h 127.0.0.1 mydatabase MySQL sẽ hỏi bạn mật khẩu của bạn và không lặp lại mật khẩu.
DDay

1
Điều này đã giải quyết nó cho tôi. Tuy nhiên, tôi vẫn tự hỏi tại sao không 127.0.0.1hoạt động trong khi localhostkhông?!
not2savvy

9

Đảm bảo bạn có bản sao lưu của các cơ sở dữ liệu quan trọng và sau đó thử gỡ cài đặt nội dung liên quan đến MySQL :

apt-get remove --purge mysql\*

Sau đó cài đặt lại :

apt-get install mysql-server mysql-client

Điều này làm việc cho tôi và dữ liệu đã được lưu giữ.

Nếu PHP MySQL hiển thị lỗi, bạn có thể phải cài đặt lại PHP MySQL :

apt-get install php5-fpm php5-mysql

Tôi nghĩ đó là vũ khí chí mạng. Tôi đã thử tất cả mọi thứ, nhưng chỉ có đề xuất của bạn là những gì đã giúp tôi. Cảm ơn bạn !
Messou

9

Tôi cũng gặp phải vấn đề tương tự nó sẽ xảy ra nếu mysql servermặc định của bạn không chạy, nó sẽ lại dừng sau một vài giây để bạn chạy lại $ sudo service mysql start lệnh ( ) mà bạn có thể thay đổi nếu biết.

cho lệnh sử dụng đó

$ sudo service mysql start   

(đặt mật khẩu người dùng nếu được yêu cầu vì chúng tôi sử dụng sudo) và sau đó chạy

$ sudo mysql -u root -p          (put user password if required )

bây giờ bạn đã có cơ sở dữ liệu của bạn


7

Nếu cài đặt của bạn gần đây, bạn nên xác nhận xem cài đặt của bạn có phải là cài đặt SERVER ... như mysql-server-5.5 .. Có thể bạn chỉ cài đặt "mysql" .. đây chỉ là máy khách thay vì máy chủ.


7

Nếu bạn đã cài đặt XAMPP trên máy Linux của mình, hãy thử sao chép my.cnftệp của bạn từ /opt/lampp/etc/my.cnfsang /etc/my.cnf.

Sau đó, chạy mysql -u rootlại ... Bây giờ bạn sẽ có ổ cắm chính xác và có thể chạy ứng dụng khách MySQL.


7

Tôi cũng gặp vấn đề này, nhưng tôi đã làm:

sudo service mysql restart 

Nó làm việc cho tôi.


7

TÔI TÌM GIẢI PHÁP

Trước khi bắn lệnh:mysql_secure_installation

  • Bước 1: sudo systemctl stop mariadb
  • Bước 2: sudo systemctl start mariadb
  • Bước 3: mysql_secure_installation

Sau đó nó sẽ hỏi mật khẩu gốc và bạn có thể chỉ đơn giản là nhấn Enter và thiết lập mật khẩu gốc mới của bạn.


6

Trong trường hợp của tôi, cổng 3306 mặc định đã được sử dụng bởi một số quy trình khác và do đó nó không bắt đầu. Sau khi tôi dừng dịch vụ khác và làm sudo service mysql start, nó hoạt động tốt. BTW, bạn có thể sử dụng một cái gì đó như sudo lsof -Pn -iTCP:3306để xem ai có thể đang sử dụng cổng.


6

Trong trường hợp của tôi, nó hoạt động bằng cách thực hiện một số R & D:

Tôi có thể kết nối với MySQL bằng

root-debian#mysql -h 127.0.0.1 -u root -p

Nhưng nó không hoạt động với mysql -u root -p .

Tôi không tìm thấy bất kỳ bind-addresstrong my.cnf . Vì vậy, tôi outcommented tham số socket=/var/lib/mysql/mysqld.socktrong my.cnfđó đã gây cho tôi một vấn đề với đăng nhập.

Sau khi khởi động lại dịch vụ, nó hoạt động tốt:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)

6

tôi đã giải quyết vấn đề này với khởi động lại mysql

/etc/init.d/mysql stop

/etc/init.d/mysql start

đó là nó.


5

Theo kinh nghiệm tôi nói rằng bạn cần kiểm tra xem máy chủ có chạy trước không và sau đó thử cấu hình MySQL. Giải pháp cuối cùng là cài đặt lại MySQL.


5

Mở terminal và gõ:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

Cả gói khách hàng cơ sở dữ liệu MySQL và gói Máy chủ MySQL sẽ có cùng phiên bản 5.5. MySQL Client 5.5 và MySQL Server 5.5 là các phiên bản "tốt nhất" hiện tại của các gói này trong Ubuntu 14.04 được xác định bởi các nhà bảo trì gói.

Nếu bạn muốn cài đặt MySQL Client 5.6 và MySQL Server 5.6, bạn cũng có thể tìm thấy các gói mysql-client-core-5.6 và mysql-server-5.6 trong Trung tâm phần mềm Ubuntu. Điều quan trọng là số phiên bản máy khách và máy chủ khớp với nhau trong cả hai trường hợp.

Điều này làm việc cho tôi.


5

Kiểm tra nếu bạn có quyền chính xác:

sudo chmod 755 /var/lib/mysql/mysql

Tôi đã có những vấn đề tương tự và điều này làm việc cho tôi. Sau khi làm điều này tôi đã có thể bắt đầu MySQL.


5

Trong trường hợp của tôi, có vẻ như tôi không thực sự có thể giết quá trình mysql, khi tôi chạy

sudo service mysql stop
ps -ef | grep mysql

Quá trình mysql luôn ở đó, có vẻ như nó đã chặn tệp socket và quá trình mysql mới không thể tự tạo.

vì vậy điều này đã giúp

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Bây giờ tôi có thể đăng nhập cơ sở dữ liệu bằng cách sử dụng

mysql -u root

Sau đó để cập nhật mật khẩu root:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS : Tôi gặp sự cố khi cập nhật root passwod, có vẻ như có vấn đề với plugin "auth_socket", vì vậy tôi phải tạo người dùng mới với đầy đủ đặc quyền

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

Điều này tạo ra người dùng "siêu" không có mật khẩu và sau đó bạn có thể kết nối với mysql -u super


cảm ơn câu trả lời và tôi có thể đăng nhập vào mysql, nhưng không có bảng người dùng trong cơ sở dữ liệu của tôi.
John Joe

Giải pháp này hoạt động. Nhưng trước khi bạn thực thi câu lệnh sql để thay đổi mật khẩu cho root, bạn cần chọn một cơ sở dữ liệu. Thực hiện câu lệnh sau <br> use mysql;<br> và bây giờ bạn có thể sử dụng <br>UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Charle K.

5

Trên máy chủ Debian, Jessie, giải pháp làm việc của tôi chỉ đơn giản là làm

service mysql restart
service mysql reload

là người dùng root

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.