How to Install MySQL on Ubuntu
在Ubuntu Linux上怎样正确安装MySQL.
NOTESystem 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