923 words
5 minutes
MySQL:在Ubuntu上的正确安装方式

How to Install MySQL on Ubuntu#

在Ubuntu Linux上怎样正确安装MySQL.

NOTE

System Version: Ubuntu 22.04 LTS

MySQL Version: 8.x


1.更新apt包管理源#

sudo apt update

2.安装MySQL#

sudo apt install mysql-server -y

3.启动服务#

sudo systemctl start mysql.service

查看运行状态

sudo systemctl status mysql.service

4.初始化#

首次进入MySQL控制台

sudo mysql

修改root,使其使用密码登录

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

执行成功会返回Query OK, 0 rows affected (0.03 sec)

退出 exit

运行初始化脚本,输入上一步骤中的 password

sudo mysql_secure_installation

输入密码运行后根据提示Press y|Y for Yes, any other key for No

输入 y

  • 选择密码复杂度,建议值2

    0 表示 低 长度 >= 8
    1 表示 中 长度 >= 8,数字,大小写混合和特殊字符
    2 表示 强 长度 >= 8,数字,大小写混合,特殊字符和字典

“Change the password for root ?” -> 是否更改root的密码

建议类似 Ds&9L08d4f(OV&xm19UC 20位含特殊字符的密码

接下来有数个问题,根据实际情况选择

“Remove anonymous users?” -> 是否移除匿名用户?

“Disallow root login remotely?” -> 是否允许root远程登录? 建议值y

“Remove test database and access to it?” -> 删除测试数据库?

“Reload privilege tables now?” -> 重载权限表 ?一定要y

5.继续完成配置#

本机登录 mysql -u root -p

TIP

如果要恢复默认的身份验证方式

恢复后可以直接在主机中使用 sudo mysql直接登录

登陆后执行;

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

更新权限表

FLUSH PRIVILEGES;

6.配置远程登录#

6.1配置远程登录权限#

查看用户表

use mysql;
select host, user, authentication_string, plugin from user; 
TIP

可以看到用户root一栏的字段host默认为localhost,这表示只能在本机登录

更新用户表,让root也可以远程登录, 把%修改为localhost就恢复默认了

update user set host='%' where user='root';
flush privileges;

新建一位用户manager,让它可以远程登录,并且拥有与root同等的权限,

用户名manager请自行替换语句

加密方式 caching_sha2_password

CAUTION

某些版本的 PHP 存在一个已知问题,会导致caching_sha2_password出现问题。如果您计划将此数据库与 PHP 应用程序(例如 phpMyAdmin)一起使用,您可能需要创建一个用户,该用户将使用较旧但仍然安全的mysql_native_password插件进行身份验证.

CREATE USER 'manager'@'%' IDENTIFIED WITH caching_sha2_password BY '0uPd@SAv%LGp31@t2aHG';
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'manager'@'%' WITH GRANT OPTION;
flush privileges;
TIP

在某些情况下出错

某些情况下MySQL返回了[HY000][1221] Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

使用这样的语句

GRANT ALL PRIVILEGES ON *.* TO 'manager'@'%' WITH GRANT OPTION;
flush privileges;

*.* 表示WITH GRANT OPTION表示可以授权给其他用户;
这里授予全部库的权限,在实际中你应当替换为给特定的库,例如project_app.*

6.2配置服务暴露在公共网络上#

WARNING

不建议允许root用户支持远程访问

编辑文件 /etc/mysql/mysql.conf.d/mysqld.cnf

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

更改默认设置为以下内容,表示监听所有主机网络。(你也可以自定义调整为某一特定的网络)

port                    = 3306
bind-address            = 0.0.0.0
mysqlx-bind-address     = 0.0.0.0

重启服务

sudo systemctl restart mysql

7.让应用程序访问MySQL#

新建一个数据库为某一项目使用,特定用户访问特定的库

架构名 akb_project

若干个

新建库名 akb_project

新建用户 applicationaccess

给予密码 nQr4dDHsZSbVxB*wlrUuS3)%j&WdV^r3

脚本如下示例如下,根据实际情况修改关键值

CREATE USER 'applicationaccess'@'%' IDENTIFIED WITH caching_sha2_password BY 'nQr4dDHsZSbVxB*wlrUuS3)%j&WdV^r3';
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on akb_project.* TO 'applicationaccess'@'%' WITH GRANT OPTION;
flush privileges;

或者

GRANT ALL PRIVILEGES ON akb_project.* TO 'applicationaccess'@'%' WITH GRANT OPTION;

大功告成#

TIP

相关内容参考:
How To Install MySQL on Ubuntu 22.04 — DigitalOcean

MySQL:在Ubuntu上的正确安装方式
https://fuwari.vercel.app/posts/install-mysql-on-ubuntu/
Author
Christine
Published at
2024-10-03