【究极详细版】Ubuntu安装配置MySQL

文章转自CSDN

原文地址:https://blog.csdn.net/LogosTR_/article/details/125602116

 

安装

通过包管理工具apt安装,在ubuntu20.04下mysql版本默认为8.0,而ubuntu18.04在截至本文完成时默认版本为5.7。如果想在20.04下安装5.7版本,可以看这篇连接。

首先,更新软件包列表索引:

sudo apt update

安装MySQL:

sudo apt install mysql-server

查看MySQL版本:

mysql --version

由于本地系统为ubuntu20.04,MySql版本号为8.0。
version

查看服务状态,

service mysql status

status

状态正常,到此安装完毕!

配置

此时,mysql客户端已经作为服务器的依赖安装到本地,故可以通过命令行登录服务器。mysql8.0,root 用户默认通过 auth_socket 插件授权,而 auth_socket 插件通过 Unix socket 文件来验证所有连接到 localhost 的用户。这意味着你不能以用户–密码的方式,登录root账户。通过指令以root身份登录:

sudo mysql

在这里插入图片描述

但是,通过第三方程序是无法连接到数据库的,例如JDBC、pymysql等。可以通过修改mysql下的user表,配置密码方式以root身份登录:

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

在这里插入图片描述

将root对应的plugin由 auth_socket 改为 mysql_native_password 即使是mysql8.0也是,否则影响后续远程连接:

#MySQL8.0必须先执行此步骤设置密码,MySQL5.7可以选择先安装下面的secure!!!
alter user 'root'@'localhost' identified with mysql_native_password by '密码';flush privileges;exit;

至此,可以不用输入sudo,通过密码的方式登录数据库:

mysql -uroot -p

在这里插入图片描述

增强数据库服务的安全性

执行:

sudo mysql_secure_installation

在这里插入图片描述

键入Enter后继续,
在这里插入图片描述

设置root用户密码,并反馈当前密码强度,询问是否确认密码:
在这里插入图片描述

询问三个问题,并根据提供的答案来设置系统的安全性。

  1. 是否关删除匿名测试用户的信息。
  2. 是否禁止远程root登录。只允许本地登录root用户,并拒绝远程连接。
  3. 是否删除 test 数据库。

根据自身需求键入相应的y or n

最后输入 y ,重新加载特权表使上述配置生效。返回 All Done!,设置成功。

远程连接

如何连接ubuntu服务器下的mysql数据库?

修改配置文件:

#MySQL8.0!!!
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 
#MySQL5.7!!!
sudo vim /etc/my.cnf 

注释下图标记行,解除地址绑定:
在这里插入图片描述

重启mysql服务:

sudo service mysql restart

登录mysql后执行:

use mysql;
update user set host='%' where user='root';
flush privileges;#MySQL8.0执行这行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
#MySQL5.7执行这行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;flush privileges;

在这里插入图片描述

卸载

sudo apt purge mysql-* # mysql后用tab补全,把所有与mysql相关的卸载sudo rm -rf /etc/mysql/ /var/lib/mysqlsudo apt autoremovesudo apt autoclean

忘记密码(ERROR 1045)

在这里插入图片描述

修改配置文件,在[mysqld]后添加 skip-grant-tables (登录时跳过权限检查):

#MySQL8.0!!!
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 
#MySQL5.7!!!
sudo vim /etc/my.cnf 

在这里插入图片描述

重启服务后可以无密码登录mysql:

sudo service mysql restartmysql

在这里插入图片描述

mysql8.0

use mysql; 
#必须先将authentication_string置为空!
update user set authentication_string='' where user='root';flush privileges;
#设置新密码
ALTER user 'root'@'%' IDENTIFIED BY '新密码';

mysql5.7

use mysql; 
update user set authentication_string = password('新密码') where user = 'root';

最后记得删除配置文件中的 skip-grant-tables 并重启服务,否则会影响远程连接!

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

查看密码策略:

SHOW VARIABLES LIKE 'validate_password%';

在这里插入图片描述

参照上图变量名修改策略:

set global validate_password.policy=0
set global validate_password.length=1;

最后修改密码:

alter user 'root'@'%' identified by 'root';

登录成功:
在这里插入图片描述