how to log in to mysql and query the database from linux terminal

I am using debian linux. I have a linux machine on which mysql is install. I can log in to my linux machine using root user as well as other user. I can connect to mysql database on linux machine from windows machine using sqlyog. Now I want to execute queries on linux machine only using linux terminal

I tried some following things on terminal

I went to root directory then I went to /var/lib directory

I run following commands on terminal

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

everytime I have get following error message

ERROR 1045 (28000) Access denied for user 'root'@'localhost' (Using password NO)

please guide me for following

  1. How do I get mysql prompt in linux terminal?
  2. How I stop the mysql server from linux terminal?
  3. How I start the mysql server from linux terminal?
  4. How do I get mysql prompt in linux terminal?
  5. How do I login to mysql server from linux terminal?
  6. How do I solve following error?

ERROR 1045 (28000) Access denied for user 'root'@'localhost' (Using password NO)

Please give me solutions for above question. Thank You

605527 次浏览

1.-如何在 Linux 终端中获得 mysql 提示符?

mysql -u root -p

Enter password:提示符下,输入 root 用户的密码:)

您可以通过键入 mysql --help或在 在线手册找到进一步的参考。

2. 如何从 Linux 终端停止 mysql 服务器?

It depends. Red Hat based distros have the service command:

service mysqld stop

其他发行版需要直接调用 init 脚本:

/etc/init.d/mysqld stop

3. 如何从 Linux 终端启动 mysql 服务器?

和2号一样,不过是 start

4. 如何在 Linux 终端中获得 mysql 提示符?

和1号一样。

5. 如何从 Linux 终端登录 mysql 服务器?

和1号一样。

如何解决下列错误?

和1号一样。

在命令提示符下尝试:

mysql -u root -p

提示时输入密码。

我假设您正在寻找使用 mysql 客户端的方法,这是一件好事,比使用任何 phpMyAdmin 替代方法都要有效得多。

使用命令行客户端登录的正确方法是键入:

mysql -u username -p

注意,我没有键入密码。这样做会使密码在屏幕上可见,这是不好的多用户环境!

在输入这个输入键之后,mysql 会询问您的密码。

一旦登录,当然你需要:

use databaseName;

做任何事。

祝你好运。

回到你的第一个问题:

mysql -u root -p

或者

mysqladmin -u root -p "your_command"

取决于你想做什么。一旦你点击回车,密码就会被询问!我猜你真的想使用 mysql而不是 Mysqladmin

对于在 linux 上重新启动或者停止 MySQL 服务器,这取决于你的安装,但是在常见的 debian 衍生版本中,这将用于启动、停止和重新启动服务:

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

在一些较新的发行版中,如果将 MySQL 设置为守护程序/服务,那么这种方法也可以起到同样的作用。

sudo service mysql start
sudo service mysql stop
sudo service mysql restart
sudo service mysql status

但是,如果不知道您的特定设置,就不可能回答这个问题。

To stop or start mysql on most linux systems the following should work:

/etc/init.d/mysqld stop


/etc/init.d/mysqld start

其他答案看起来很适合从命令行访问 mysql 客户机。

祝你好运!

  1. 你应该使用 mysql命令。它是 mysql RDBMS 的一个命令行客户端,大多数 mysql 安装都带有它: http://dev.mysql.com/doc/refman/5.1/en/mysql.html

  2. 要停止或启动 mysql 数据库(很少需要手动操作) ,使用适当的 init 脚本和 stopstart参数,通常是 /etc/init.d/mysql stop。然而,这取决于您的 Linux 发行版。一些新的发行版鼓励 service mysql start风格。

  3. 您正在使用 mysql sql shell 登录。

  4. 出现错误可能是因为双‘-p’参数。您可以提供 -ppassword或者只提供 -p,然后交互式地询问您的密码。还要注意,有些安装可能使用 mysql (而不是 root)用户作为管理用户。检查 sqlyog 配置以获取工作连接参数。

今天我的 ArchLinux VPS 也有同样的问题。

mysql -u root -p just didn't work, whereas mysql -u root -pmypassword did.

原来我的/dev/tty 设备文件坏了(很可能是在 udev 升级之后) ,所以 mysql 无法使用它进行交互式登录。

最后我删除了/dev/tty,并用 mknod /dev/tty c 5 1chmod 666 /dev/tty重新创建了它。这也解决了 mysql 问题和其他一些问题。

如果你还是无法访问数据库, 1. in ur error message is set no password right? 然后先做 mysqlpasswd’用户名’ 然后输入一个密码 按要求再次键入,然后 如果您是 root 用户,请尝试使用 mysql-p 再次访问

如果您已经以 root 用户身份登录

mysql -u root

否则,提示密码将作为错误返回

Try "sudo mysql -u root -p" please.

使用这个“ mysql-uroot-pPassword”

在 Ubuntu 中,我所要做的就是在 GNOME 终端中运行 sudo mysql,仅此而已。我可以开始建立数据库或查询表中的数据,等等。

首先在根目录下运行终端

sudo su

点击回车然后输入你的根密码 然后使用这个命令运行 mysql

mysql -u root -p

点击回车然后输入您的 mysql 密码

祝你好运!

mysql -u username -p password

作为行政人员

sudo mysql -u username - p password

MySQL 允许以几种不同的方式对用户进行身份验证。这些被称为“身份验证插件”,每个用户都可以指定自己的插件。要查看哪个插件被分配给用户,可以使用 mysql.user表中的 plugin值。在 Ubuntu 系统(可能还有其他 Linux 系统)上,新 MySQL 安装的默认设置给 MySQL root用户提供了一个与标准用户不同的插件,这解释了您注意到的差异。

具体来说,默认情况下,MySQL root用户被分配 auth_socket身份验证,而标准用户被分配 mysql_native_password(MySQL 8之前)或 caching_sha2_password(MySQL 8 +)。也就是说,你会看到

# 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 |
+-----------------------+

或者

# 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_socketsocket authentication,它的工作原理是将连接的 Unix 用户与同名的 MySQL 用户(如果有的话)进行匹配。这个 只有在本地连接时能正常工作,这也是它对拥有特权的 MySQL root用户有好处的一个原因; 在 auth_socket插件下,不可能有人以 root用户的身份远程访问你的数据库(除非他们也拥有 OS 级别的 root访问权,在这种情况下,他们已经拥有了你的机器)。

Both mysql_native_password and caching_sha2_password are forms of 密码认证. To understand the difference you see between accessing MySQL as its root user and as a standard user, we'll compare the login process between password authentication and socket authentication.

密码验证

假设您尝试使用通常推荐的命令访问本地 MySQL 服务器。Unix/Linux 操作系统用户是 joeuser,您希望以 MySQL 用户 joesql的身份连接到 MySQL 服务器。你打字

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

连接成功。这里发生的情况是,使用命令行参数 -u, joesql, -p调用 mysql程序(使用 $ which mysql在系统上查找它)。通过这些,MySQL 理解您正在尝试以 MySQL 用户 joesql的身份进行连接。它为 joesql检查 mysql.userplugin值,并找到(比方说) caching_sha2_password。因此,它知道您需要一个密码来连接。从 -p命令行参数,它知道您希望它要求您输入密码,并且它确实这样做了。输入密码后,MySQL 对其进行哈希处理,并将该哈希值与存储为 joesql密码的哈希值进行比较。它匹配,所以您可以作为 MySQL 用户 joesql进行连接。

Socket 认证

现在,您希望以 MySQLroot用户的身份访问本地 MySQL 服务器。如果您天真地尝试使用与标准用户 joesql相同的命令,就会遇到您已经注意到的问题:

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

即使您为 MySQLroot用户定义了密码,并在提示时输入该密码,也会发生这种情况。到底发生了什么?与前面一样,您使用命令行参数 -u, root, -p调用了 mysql程序,它告诉 MySQL 您希望作为 MySQL root用户进行连接。但是,现在,当它检查 mysql.userplugin值是否为 root时,它找到的是 auth_socket,而不是一个密码身份验证值。

因此,它不会要求输入密码,而是检查一个指定的套接字文件,这个套接字文件是 Unix/Linux 系统专门为此目的编写的,其中包含您所扮演的操作系统用户的名称。auth_socket不匹配密码,而是匹配用户名。因此,注意到您使用的操作系统用户名 joeuser不等于您试图连接的 MySQL 用户名 root,它禁止与严重无用的错误消息 Access denied for user 'root'@'localhost'连接。

所以,恼火的是,你做了标准的 Linux 动作,添加“ sudo”,让它做你想做的:

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

这个管用。为什么会有用?当 shell 解释您的命令时,它发现的第一件事是您正在使用 sudo作为 Unix root用户,因此它询问您的 sudo密码。一旦给定,命令的其余部分将作为该用户执行。因此,连接到 MySQL 服务器时创建的套接字文件是用 Unix root而不是 joeuser标识的,而 MySQL 的套接字身份验证与同名的 MySQL 用户匹配。此时身份验证已经通过,但是确实特别要求使用 -p选项询问您的密码,因此 MySQL 尽职尽责地询问 MySQL root用户密码。输入后,您成功地连接到本地 MySQL 服务器。

一旦您理解了这一点,一个显而易见的问题是,如果套接字身份验证是基于匹配的用户名(Unix 用户名到 MySQL 用户名) ,那么密码是否必要?不是的!你可以关掉 -p然后这样做:

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

并跳过输入 MySQLroot密码。这适用于 MySQLroot用户的 只有,并且仅当该用户被设置为使用 auth_socket作为其身份验证插件时才适用。

摘要

在最新版本的 Ubuntu (至少16.04-20.04,可能还有其他版本)的标准默认情况下,以下是最容易连接到 mysql shell 的命令:

  • MySQL root用户: $ sudo mysql -u root

    (输入你的 sudo 密码)

  • 其他 MySQL 用户: $ mysql -u <username> -p

    (enter the <username> MySQL password)

当然,你问的是 Debian Linux,而不是 Ubuntu。Ubuntu 直接来源于 Debian,我假设它与我在这里所说的相似。关于上述解释如何在不同的 Linux 发行版和版本之间变化的评论是受欢迎的。