Ubuntu安装mysql记录

本文详细介绍了如何在Ubuntu20.04上安装MySQL8.0,包括使用`mysql_secure_installation`脚本来增强安全性,设置root用户密码,以及如何通过命令行管理数据库和用户。还解决了在初始化设置密码时可能出现的错误,并提供了删除数据库、创建用户、修改密码和授予/撤销权限的步骤。
摘要由CSDN通过智能技术生成

Ubuntu上安装MySQL

在撰写本文时,Ubuntu存储库中可用的MySQL的最新版本是MySQL 8.0。要安装它,请运行以下命令:

sudo apt update

sudo apt install mysql-server

安装完成后,MySQL服务将自动启动。要验证MySQL服务器正在运行,请输入:

sudo systemctl status mysql

输出应显示该服务已启用并正在运行:

● mysql.service - MySQL Community Server

 Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)

 Active: active (running) since Tue 2020-04-28 20:59:52 UTC; 10min ago

 Main PID: 8617 (mysqld)

 Status: "Server is operational"

 ...

保护MySQL

MySQL安装随附一个名为的脚本mysql_secure_installation,可让您轻松提高数据库服务器的安全性。

调用不带参数的脚本:

sudo mysql_secure_installation

系统将要求您配置VALIDATE PASSWORD PLUGIN用来测试MySQL用户密码强度并提高安全性的密码:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords

and improve security. It checks the strength of password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

密码验证策略分为三个级别:低,中和强。按下y如果你想设置的验证密码插件或任何其他键移动到下一个步骤:

There are three levels of password validation policy:

LOW Length >= 8

MEDIUM Length >= 8, numeric, mixed case, and special characters

STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

在下一个提示符下,将要求您设置MySQL root用户的密码:

Please set the password for root here.

New password:

Re-enter new password:

如果您设置了验证密码插件,该脚本将向您显示新密码的强度。键入y以确认密码:

Estimated strength of the password: 50

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

接下来,将要求您删除匿名用户,限制root用户对本地计算机的访问,删除测试数据库并重新加载特权表。您应该回答y所有问题。

root身份登录

要从命令行与MySQL服务器进行交互,请使用MySQL客户端实用程序,该实用程序是作为MySQL服务器软件包的依赖项安装的。

MySQL 8.0上,auth_socket默认情况下,root用户通过插件进行身份验证。

auth_socket插件对localhost通过Unix套接字文件从进行连接的用户进行身份验证。这意味着您不能通过提供密码来以root用户身份进行身份验证。

要以root用户身份登录到MySQL服务器,请输入:

sudo mysql

将为您提供MySQL Shell,如下所示:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 12

Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

如果要使用外部程序(例如phpMyAdmin)以root用户身份登录到MySQL服务器,则有两个选择。

第一个是将身份验证方法从更改auth_socketmysql_native_password。您可以通过运行以下命令来做到这一点:

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';

mysql > FLUSH PRIVILEGES;

推荐的第二个选项是创建一个新的专用管理用户,该用户可以访问所有数据库:

GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'localhost' IDENTIFIED BY 'very_strong_password';

结论

我们已经向您展示了如何在Ubuntu 20.04上安装MySQL。现在您的数据库服务器已启动并正在运行,下一步是学习如何管理MySQL用户帐户和数据库

如果您有任何疑问或反馈,请随时发表评论。

数据库初始化设置密码时报错"SET PASSWORD has no significance for user 'root'@'localhost' as the authentication met...

1、报错示例

Re-enter new password:

 ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

2、去手动配置密码

root@LNMP:~# mysql

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';

Query OK, 0 rows affected (0.02 sec)

3、重新初始化

root@LNMP:~# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords

and improve security. It checks the strength of password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n

Using existing password for root.

Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

 ... skipping.

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : n

 ... skipping.

Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

 ... skipping.

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

 ... skipping.

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

 ... skipping.

All done!

如何从命令行管理MySQL数据库和用户

MySQL是最流行的开源关系数据库管理系统。MySQL服务器允许我们创建许多用户和数据库并授予适当的特权,以便用户可以访问和管理数据库。本教程说明了如何使用命令行来创建和管理MySQLMariaDB数据库以及用户。

开始之前

在开始本教程之前,我们假设您已经在系统上安装了MySQLMariaDB服务器。所有命令将以root用户身份执行。

要打开MySQL提示符,请键入以下命令,并在出现提示时输入MySQL root用户密码:

mysql -u root -p

创建一个新的MySQL数据库

要创建新的MySQL数据库,请运行以下命令,只需将其替换为要创建的数据库database_name的名称即可:

CREATE DATABASE database_name;

输出:

Query OK, 1 row affected (0.00 sec)

如果您尝试创建一个已经存在的数据库,则会看到以下错误消息:

ERROR 1007 (HY000): Can't create database 'database_name'; database exists

为避免错误,如果存在与您要创建的名称相同的数据库,可以使用以下命令:

CREATE DATABASE IF NOT EXISTS database_name;

输出:

Query OK, 1 row affected, 1 warning (0.00 sec)

在上面的输出中,Query OK表示查询成功,并且1 warning告诉我们该数据库已经存在,并且没有创建新数据库。

列出所有MySQL数据库

您可以使用以下命令列出我们的MySQLMariaDB服务器上存在的所有数据库:

SHOW DATABASES;

输出将如下所示:

+--------------------+
| Database |
+--------------------+
| information_schema |
| database_name |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

information_schemamysqlperformance_schema,和sys数据库是在安装时创建的,并且它们存储有关所有其他数据库,系统配置,用户,许可等重要数据信息。这些数据库对于MySQL安装的正确功能是必需的。

删除MySQL数据库

删除MySQL数据库就像运行单个命令一样简单。这是不可逆的操作,应谨慎执行。确保您没有删除错误的数据库,因为一旦删除数据库就无法恢复。

要删除MySQLMariaDB,数据库运行以下命令:

DROP DATABASE database_name;

输出:

Query OK, 0 rows affected (0.00 sec)

如果您尝试删除一个不存在的数据库,则会看到以下错误消息:

ERROR 1008 (HY000): Can't drop database 'database_name'; database doesn't exist

为避免此错误,可以使用以下命令:

DROP DATABASE IF EXISTS database_name;

创建一个新的MySQL用户帐户

MySQL中的用户帐户由用户名和主机名部分组成。

要创建一个新的MySQL用户帐户,请运行以下命令,只需将“ database_user”替换为您要创建的用户名即可:

CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';

在上面的命令中,我们设置了主机名部分,localhost这意味着该用户将只能从本地主机(即从运行MySQL Server的系统)连接到MySQL服务器。如果要授予来自其他主机的访问权限,只需localhost使用远程计算机IP 更改或'%'在主机部分使用通配符,这意味着该用户帐户将能够从任何主机进行连接。

与使用数据库来避免在尝试创建已经存在的用户帐户时出错时相同,可以使用:

CREATE USER IF NOT EXISTS 'database_user'@'localhost' IDENTIFIED BY 'user_password';

输出:

Query OK, 0 rows affected, 1 warning (0.00 sec)

修改MySQL用户帐号密码

更改MySQLMariaDB用户帐户密码的语法取决于您在系统上运行的服务器版本。

您可以通过发出以下命令来找到服务器版本:

mysql --version

如果您具有MySQL 5.7.6和更高版本或MariaDB 10.1.20和更高版本,请使用以下命令来更改密码:

ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';

如果您拥有MySQL 5.7.5及更高版本或MariaDB 10.1.20及更高版本,请使用:

SET PASSWORD FOR 'database_user'@'localhost' = PASSWORD('new_password');

在这两种情况下,输出应如下所示:

Query OK, 0 rows affected (0.00 sec)

列出所有MySQL用户帐户

您可以通过查询表列出所有MySQLMariaDB用户帐户mysql.users

SELECT user, host FROM mysql.user;

输出应类似于以下内容:

+------------------+-----------+
| user | host |
+------------------+-----------+
| database_user | % |
| database_user | localhost |
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

删除MySQL用户帐户

要删除用户帐户,请使用以下命令:

DROP USER 'database_user@'localhost';

如果您尝试删除不存在的用户帐户,则会发生错误。

ERROR 1396 (HY000): Operation DROP USER failed for 'database_user'@'localhost'

与使用数据库以避免发生错误时相同:

DROP USER IF EXISTS 'database_user'@'localhost';

输出:

Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL用户帐户授予权限

可以向用户帐户授予多种类型的特权。您可以在此处找到MySQL支持的特权的完整列表。在本指南中,我们将介绍几个示例:

要授予对特定数据库用户帐户的所有特权,请使用以下命令:

GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

要授予对所有数据库用户帐户的所有特权,请使用以下命令:

GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';

要对数据库中的特定表授予用户帐户的所有特权,请使用以下命令:

GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';

如果要仅授予特定数据库类型的用户帐户特定特权,请执行以下操作:

GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';

MySQL用户帐户撤消权限

如果您需要撤消一个用户帐户的一个或多个特权或所有特权,则语法几乎与授予它相同。例如,如果要撤消特定数据库上用户帐户的所有特权,请使用以下命令:

REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

显示MySQL用户帐户权限

查找授予特定MySQL用户帐户类型的特权:

SHOW GRANTS FOR 'database_user'@'localhost';

输出:

+---------------------------------------------------------------------------+
| Grants for database_user@localhost |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'database_user'@'localhost' |
| GRANT ALL PRIVILEGES ON `database_name`.* TO 'database_user'@'localhost' |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)

结论

本教程仅介绍基础知识,但是对于任何想从命令行学习如何管理MySQL数据库和用户的人来说,它都是一个不错的开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zou_ys88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值