最近重新给一台虚拟机配置环境,发现好久没碰mysql,连安装、远程连接都出问题,故有此文

Ubuntu22.04

mysql8.0.33

f**k ya mysql8

安装

apt yes!!!

本来尝试去官网寻找文档,但发现并不友好,遂直接梭哈apt

1
2
3
4
5
6
//更新apt缓存
sudo apt update
//安装
sudo apt install mysql-server
//查询版本验证是否安装成功
mysql --version

配置密码

默认会有一个没有密码只能本地root访问的账户,即直接sudo mysql就可进入mysql界面,这意味着您无法通过提供密码来以root用户连接到MySQL服务器。但这并不符合直觉,尤其是当你需要远程访问root的时候。

对此有两个方法:

  • 第一个是将身份验证方法从auth_socket更改为mysql_native_password。您可以通过运行ALTER USER SQL语句命令来做到这一点。

    1
    2
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
    FLUSH PRIVILEGES;

    因为 MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具貌似还只支持旧的加密方式。故此处改为mysql_native_password亦可解决部分数据库工具连接密码错误的问题。

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

远程访问

编辑配置文件

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

[mysqld]bind-address值(默认127.0.0.1,即本机)修改为0.0.0.0,意为接收所有ip的访问

当然你也选择你想使用的某个ip

image-20230717211612795

随后重新启动mysql进程

1
sudo systemctl restart mysql

授权 root 用户的所有权限并设置远程访问

1
2
//表示所有权限,% 表示通配所有 host,可以访问远程。
GRANT ALL ON *.* TO 'root'@'%';

如果出现image-20230717212258201

执行

1
update user set host='%' where user='root';

再执行两次

1
GRANT ALL ON *.* TO 'root'@'%';

刷新权限

flush privileges;

开放防火墙端口

1
2
3
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent 设置防火墙开放3306端口

sudo firewall-cmd --reload && sudo firewall-cmd --list-port 重载防火墙&&查看防火墙开放的端口

此时即可远程访问数据库

image-20230717213819840