ubuntu20.04 APT 安装MySQL Community Server 8

使用APT安装

在Ubuntu 20.04上安装MySQL 8可以通过多种方式完成,包括使用Ubuntu自带的包管理器(APT)安装MySQL 8,或者使用官方的MySQL APT repository,这里使用APT方式安装。

1、更新包索引

bash 复制代码
sudo apt update

2、安装MySQL服务器

使用APT安装MySQL 8.0,可以运行以下命令:

bash 复制代码
sudo apt install mysql-server

3、确认安装

安装完成后,可以通过以下命令来验证MySQL服务的状态:

bash 复制代码
sudo systemctl status mysql

4、安全配置

运行mysql_secure_installation脚本来设置root密码,移除匿名用户,禁止root远程登录等安全设置:

bash 复制代码
sudo mysql_secure_installation
bash 复制代码
root@summergao:/home/summergao# mysql_secure_installation

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

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: 

用户输入的是 "y",表示同意启用验证组件。接下来,系统询问密码策略的级别,选项是 0(LOW)、1(MEDIUM)和 2(STRONG)。用户需要输入对应的数字。

  • LOW:密码长度至少 8 个字符。
  • MEDIUM:在 LOW 的基础上,还需要包含数字、大小写字母和特殊字符。
  • STRONG:在 MEDIUM 的基础上,进一步要求密码不能在字典文件中出现,并且可能更严格的组合要求。

在 MySQL 安全安装过程中,密码策略的选择会影响密码的强度要求。以下是三个级别的具体说明:

0 = LOW

  • 仅要求密码长度 ≥ 8 个字符
  • 无其他字符类型要求
  • 适合安全性要求较低的场景

1 = MEDIUM

  • 密码长度 ≥ 8 个字符
  • 必须包含:
    • 数字(0-9)
    • 大小写字母(A-Z/a-z)
    • 特殊字符(如!@#$%^&*())
  • 适合大多数企业环境

2 = STRONG

  • 包含 MEDIUM 所有要求
  • 额外检查:
    • 密码不能在字典文件中出现
    • 更严格的字符组合规则
  • 需要预先配置字典文件(通常位于 /usr/share/dict/words)
  • 适合高安全要求场景

这里输入:2

bash 复制代码
Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.

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) : 

这里询问是否要移除 MySQL 中的匿名用户。匿名用户允许任何人在没有创建用户账户的情况下登录 MySQL,这主要是为了测试和让安装过程更顺利,在生产环境中保留匿名用户会带来安全风险。

如果你是在生产环境中部署 MySQL,建议选择移除匿名用户,输入 y 然后按回车键。如果你是在测试环境,并且需要使用匿名用户进行一些测试,可以选择不移除,输入除 yY 之外的任意键然后按回车键。

这里输入:y

bash 复制代码
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


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) : 

这一步询问是否禁止 root 用户远程登录 MySQL。禁止 root 用户远程登录是一种增强安全性的做法,它能防止攻击者从网络上猜测 root 密码来登录数据库。

建议

  • 生产环境 :建议选择禁止 root 用户远程登录,输入 y 并回车。在生产环境中,安全是首要考虑因素,限制 root 用户的远程访问能有效降低风险。
  • 开发或测试环境 :如果确实需要 root 用户远程登录进行调试等操作,可以选择不禁止,输入除 yY 之外的任意键并回车。

你可以根据实际情况来决定是否禁止 root 用户远程登录。

这里输入:n

bash 复制代码
 ... 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) : 

这里询问是否要移除 MySQL 默认的 test 数据库及其访问权限。test 数据库是 MySQL 安装时默认创建的,主要用于测试目的,在生产环境中保留它会带来一定的安全隐患,因为任何人都可以访问该数据库。

建议

  • 生产环境 :建议选择移除 test 数据库及其访问权限,输入 y 然后按回车键。这样可以避免不必要的安全风险,确保数据库系统的安全性。
  • 测试环境 :如果后续还需要使用 test 数据库进行测试,那么可以选择不移除,输入除 yY 之外的任意键然后按回车键。

你可以根据实际使用场景来决定是否移除 test 数据库。

这里输入:y

bash 复制代码
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

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) : 

这一步询问是否立即重新加载权限表。重新加载权限表能让之前所做的更改(像移除匿名用户、禁止 root 远程登录、删除测试数据库等)即刻生效。

建议

通常情况下,建议选择立即重新加载权限表,也就是输入 y 并回车。这样能保证你刚刚完成的安全设置马上生效,避免因权限表未更新而存在安全隐患。

如果你有特殊需求,比如还想继续进行其他设置之后再统一更新权限表,那么可以输入除 yY 之外的任意键,之后再手动执行 FLUSH PRIVILEGES; 命令来重新加载权限表。不过一般而言,选择立即更新会更为简便和安全。

这里输入:y

Success.

All done!

5、配置MySQL远程访问:

默认情况下,MySQL只允许本地访问。为了允许远程访问,需要进行以下配置:

1、编辑MySQL配置文件:

bash 复制代码
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

2、在配置文件末尾添加以下内容:

bash 复制代码
bind-address = 0.0.0.0

3、保存并关闭文件。

4、重新启动MySQL服务:

bash 复制代码
sudo systemctl restart mysql

6、创建远程访问用户

为了允许远程访问MySQL,需要创建一个具有远程访问权限的用户。可以使用以下命令创建一个新用户:

bash 复制代码
sudo mysql -u root -p

输入root用户密码后,进入MySQL命令行界面。

1、创建一个新用户:

bash 复制代码
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';

remote_user替换为您想要的用户名,%表示允许任何IP地址访问。

2、授予用户远程访问权限:

bash 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';

3、刷新权限:

bash 复制代码
FLUSH PRIVILEGES;

7、配置防火墙

确保防火墙允许外部访问MySQL端口。可以使用以下命令打开防火墙端口:

bash 复制代码
sudo ufw allow mysql

或者,如果您使用的是iptables防火墙:

bash 复制代码
sudo iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo service iptables save

8、测试远程访问

现在,您应该可以通过远程访问MySQL了。可以使用以下命令连接到MySQL服务器:

bash 复制代码
mysql -u remote_user -p -h your_server_ip -P 3306

remote_user替换为您创建的用户名,your_server_ip替换为您的服务器IP地址。

输入密码后,您应该能够成功连接到MySQL服务器。

这样,您就成功地在Ubuntu 20.04上安装和配置了MySQL 8,并开通了远程访问。请注意,为了确保安全,建议在远程访问时使用安全的连接方式,如SSL/TLS加密。

总结

MySQL 8是一个功能强大、可靠的数据库管理系统,适用于各种规模和类型的应用程序。通过在Ubuntu 20.04上安装和配置MySQL 8,并开通远程访问,您可以方便地管理和访问数据库,提高应用程序的效率和可靠性。同时,要注意保护数据库的安全,使用安全的连接方式和密码管理措施,以防止未经授权的访问和数据泄露。

相关推荐
JavaPub-rodert5 分钟前
Etcd用的是Raft算法
数据库·github·etcd·raft
编程乐趣9 分钟前
FlexLabs.Upsert:EF Core插件推荐,支持多数据库的Upsert功能
数据库
dogplays22 分钟前
dbeaver无法连接Oracle报错:ORA-17800、ORA-12514
数据库·oracle
Acrelhuang44 分钟前
8.3MW屋顶光伏+光储协同:上海汽车变速器低碳工厂的能源革命-安科瑞黄安南
大数据·数据库·人工智能·物联网·数据库开发
喝醉的小喵1 小时前
分布式环境下的主从数据同步
分布式·后端·mysql·etcd·共识算法·主从复制
kfepiza1 小时前
Debian/Ubuntu的networking的`/etc/network/interfaces`配置文件,如何配置route路由
linux·网络·tcp/ip·ubuntu·debian·ip·tcp
崖山数据库系统YashanDB1 小时前
YashanDB json语法
数据库
陈三一1 小时前
关于多数据源下Spring声明式事务管理失效问题的分析与解决
数据库·spring
我有医保我先冲2 小时前
SQL复杂查询与性能优化全攻略
数据库·sql·性能优化
烧瓶里的西瓜皮2 小时前
Go语言从零构建SQL数据库引擎(2)
数据库·sql·golang