121 votes

comment se connecter à mysql et interroger la base de données à partir d'un terminal linux

J'utilise debian linux. J'ai une machine linux sur laquelle mysql est installé. Je peux me connecter à ma machine linux en utilisant l'utilisateur Root ainsi que d'autres utilisateurs. Je peux me connecter à la base de données mysql sur la machine linux à partir de la machine Windows en utilisant sqlyog. Maintenant, je veux exécuter des requêtes sur la machine linux uniquement en utilisant le terminal linux.

J'ai essayé les choses suivantes sur le terminal

Je suis allé dans le répertoire racine, puis dans le répertoire /var/lib.

Je lance les commandes suivantes dans le terminal

mysqladmin -u root -p
mysqladmin -u root -ppassword

J'ai toujours obtenu le message d'erreur suivant

ERREUR 1045 (28000) Accès refusé pour l'utilisateur 'Root'@'localhost' (Utilisation du mot de passe NO)

Veuillez me guider pour les points suivants

  1. Comment obtenir l'invite mysql dans le terminal linux ?
  2. Comment arrêter le serveur mysql à partir d'un terminal linux ?
  3. Comment démarrer le serveur mysql à partir d'un terminal linux ?
  4. Comment obtenir l'invite mysql dans le terminal linux ?
  5. Comment se connecter au serveur mysql à partir d'un terminal linux ?
  6. Comment résoudre l'erreur suivante ?

ERREUR 1045 (28000) l'utilisateur 'Root'@'localhost' (Utilisation du mot de passe NO)

Veuillez me donner des solutions pour la question ci-dessus. Je vous remercie de votre attention.

1voto

maioman Points 56

Si vous êtes déjà connecté en tant que Root, il vous suffit de

mysql -u root

l'invite à saisir le mot de passe renverra sinon une erreur

0voto

Abhay Tiwari Points 1

Exécutez d'abord le terminal dans le répertoire racine

sudo su

appuyez sur entrée puis tapez votre mot de passe racine puis lancez votre mysql en utilisant cette commande

mysql -u root -p

appuyez sur entrée puis entrez votre mot de passe mysql

Bonne chance !

0voto

infomasud Points 448
mysql -u username -p password

en tant qu'administrateur

sudo mysql -u username - p password

0voto

Borea Deitz Points 168

MySQL permet d'authentifier les utilisateurs de différentes manières. Ces méthodes sont appelées "plugins d'authentification" et chaque utilisateur peut spécifier son propre plugin. Pour savoir quel plugin est attribué à un utilisateur, vous pouvez utiliser la commande plugin dans le mysql.user table. Sur les systèmes Ubuntu (et éventuellement d'autres systèmes Linux), les paramètres par défaut d'une nouvelle installation de MySQL donnent à la table MySQL root utilisent un plugin différent de celui des utilisateurs standard, ce qui explique l'écart que vous avez remarqué.

Plus précisément, le logiciel MySQL root l'utilisateur est affecté auth_socket par défaut, tandis que les utilisateurs standard se voient attribuer l'une ou l'autre des options suivantes mysql_native_password (avant MySQL 8) ou caching_sha2_password (MySQL 8+). En d'autres termes, vous verriez quelque chose comme

# Prior to MySQL 8

mysql> USE mysql;
mysql> SELECT plugin FROM mysql.user WHERE user='root';
+-------------+
| plugin      |
+-------------+
| auth_socket |
+-------------+

mysql> SELECT plugin FROM mysql.user WHERE user='basic_db_user';
+-----------------------+
| plugin                |
+-----------------------+
| mysql_native_password |
+-----------------------+

ou

# MySQL 8 and above

mysql> USE mysql;
mysql> SELECT plugin FROM mysql.user WHERE user='root';
+-------------+
| plugin      |
+-------------+
| auth_socket |
+-------------+

mysql> SELECT plugin FROM mysql.user WHERE user='basic_db_user';
+-----------------------+
| plugin                |
+-----------------------+
| caching_sha2_password |
+-----------------------+

auth_socket es authentification des sockets qui fonctionne en faisant correspondre l'utilisateur Unix qui se connecte à l'utilisateur MySQL du même nom, s'il y en a un. Cette méthode seulement fonctionne lors d'une connexion locale, ce qui est l'une des raisons pour lesquelles il convient aux utilisateurs privilégiés de MySQL root l'utilisateur ; dans le cadre de la auth_socket il n'est pas possible pour quelqu'un d'accéder à votre base de données en tant que son root à distance (à moins qu'il ne dispose également d'un système d'exploitation de niveau root Dans ce cas, ils possèdent déjà votre machine de toute façon).

Les deux mysql_native_password y caching_sha2_password sont des formes de authentification par mot de passe . Pour comprendre la différence entre l'accès à MySQL en tant que son root et en tant qu'utilisateur standard, nous comparerons le processus de connexion entre l'authentification par mot de passe et l'authentification par socket.

Authentification par mot de passe

Supposons que vous essayiez d'accéder à un serveur MySQL local à l'aide de la commande généralement recommandée. L'utilisateur de votre système d'exploitation Unix/Linux est joeuser et vous voulez vous connecter au serveur MySQL en tant qu'utilisateur MySQL joesql . Vous tapez

joeuser@localhost:~$ mysql -u joesql -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
...

La connexion est réussie. Ce qui s'est passé ici, c'est que le mysql (utiliser $ which mysql pour le trouver sur votre système) est invoqué avec les arguments de la ligne de commande -u, joesql, -p . MySQL comprend alors que vous essayez de vous connecter en tant qu'utilisateur MySQL joesql . Il vérifie les plugin valeur de mysql.user pour joesql et trouve, disons, caching_sha2_password . Il sait donc que vous avez besoin d'un mot de passe pour vous connecter. À partir de l'écran -p il sait que vous voulez qu'il vous demande de saisir votre mot de passe, et il le fait. Vous entrez votre mot de passe, MySQL l'analyse et le compare à ce qu'il a stocké comme mot de passe pour joesql . Il correspond, vous êtes donc autorisé à vous connecter en tant qu'utilisateur MySQL joesql .

Authentification des sockets

Vous souhaitez maintenant accéder au serveur MySQL local en tant que serveur MySQL root l'utilisateur. Si vous tentez naïvement d'utiliser la même commande que pour l'utilisateur standard joesql Vous vous heurtez alors au problème que vous avez signalé :

joeuser@localhost:~$ mysql -u root -p     
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Cela se produit même si vous avez défini un mot de passe pour le serveur MySQL root et le saisir lorsqu'on vous le demande. Que s'est-il passé ? Comme précédemment, vous avez invoqué la fonction mysql avec des arguments de ligne de commande -u, root, -p qui indique à MySQL que vous souhaitez vous connecter en tant que MySQL root l'utilisateur. Cependant, lorsqu'il vérifie le plugin valeur de mysql.user pour root Il constate que auth_socket au lieu d'une des valeurs d'authentification par mot de passe.

Ainsi, au lieu de demander un mot de passe, il vérifie un fichier de socket spécifié que votre système Unix/Linux a écrit expressément à cette fin, et qui comprend le nom de l'utilisateur du système d'exploitation que vous représentez. Au lieu de faire correspondre les mots de passe, auth_socket correspond aux noms d'utilisateur. Ainsi, en notant que le nom d'utilisateur du système d'exploitation que vous utilisez, joeuser n'est pas égal au nom d'utilisateur MySQL auquel vous essayez de vous connecter, root il interdit la connexion en affichant un message d'erreur tout à fait inutile Access denied for user 'root'@'localhost' .

Alors, irrité, vous faites le geste standard de Linux en ajoutant 'sudo' pour faire ce que vous voulez :

joeuser@localhost:~$ sudo mysql -u root -p
[sudo] password for joeuser: 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
...

Cela fonctionne. Pourquoi cela a-t-il fonctionné ? Lorsque le shell interprète votre commande, la première chose qu'il constate est que vous utilisez la commande sudo pour jouer le rôle de l'interface Unix root utilisateur, il vous demande donc votre sudo mot de passe. Une fois le mot de passe donné, le reste de la commande est exécuté en tant qu'utilisateur. Ainsi, le fichier socket créé lors de la connexion au serveur MySQL est identifié par le mot de passe Unix root , pas joeuser et l'authentification par socket de MySQL correspond à l'utilisateur MySQL du même nom. L'authentification est transmise à ce stade, mais vous avez expressément demandé à ce que votre mot de passe vous soit demandé dans le cadre de l'enquête. -p MySQL s'exécute donc consciencieusement en demandant l'option MySQL root le mot de passe de l'utilisateur. Après l'avoir saisi, vous êtes connecté avec succès au serveur MySQL local.

Une fois que l'on a compris cela, une question s'impose : si l'authentification de la socket est basée sur la correspondance des noms d'utilisateur (nom d'utilisateur Unix à nom d'utilisateur MySQL), le mot de passe est-il même nécessaire ? Ce n'est pas le cas ! Vous pouvez omettre le mot de passe -p et faites ceci :

joeuser@localhost:~$ sudo mysql -u root
[sudo] password for joeuser: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
...

et ne saisissez pas votre code MySQL root mot de passe. Cela fonctionne seulement pour le serveur MySQL root et seulement si cet utilisateur est configuré pour utiliser la fonction auth_socket comme plugin d'authentification.

Résumé

Dans les versions récentes d'Ubuntu (au moins 16.04-20.04, probablement d'autres), voici les commandes qui permettent de se connecter facilement au serveur MySQL. mysql coquille :

  • MySQL root l'utilisateur : $ sudo mysql -u root

    (entrez votre mot de passe sudo)

  • Autre utilisateur de MySQL : $ mysql -u <username> -p

    (entrez le mot de passe MySQL de <nom d'utilisateur>)

Bien sûr, vous avez posé une question sur Debian Linux, pas sur Ubuntu. Ubuntu est directement dérivé de Debian, et je suppose qu'il est similaire à ce que j'ai dit ici. Les commentaires sur la façon dont l'explication ci-dessus varie selon les différentes distributions et versions de Linux sont les bienvenus.

-1voto

Utiliser "mysql -uroot -pPassword".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X