ubuntu20配置mysql8

首先更新软件包索引运行

powershell 复制代码
sudo apt update

命令。然后运行

powershell 复制代码
sudo apt install mysql-server

安装MySQL服务器。

安装完成后,MySQL服务将作为systemd服务自动启动。你可以运行

powershell 复制代码
sudo systemctl status mysql

命令验证MySQL服务器是否正在运行。

连接MySQL

当MySQL安装完成后,你可能会想运行命令

powershell 复制代码
mysql -u root -p

登录到MySQL服务器

如果你登录到Ubuntu的用户不是root用户你将不能访问MySQL服务器。
注意,如果你尝试使用密码登录也将被拒绝连接,MySQL root用户默认是没有密码。

你将会收到类似于这样的消息

powershell 复制代码
(28000): Access denied for user 'root'@'localhost' (using password: YES)

或者

powershell 复制代码
ERROR 1045 (28000): Access denied for user 'root'@'localhost'。

这是因为在MySQL 8.0上,对root用户使用auth_socket插件进行身份验证。auth_socket插件仅对从localhost连接到Unix socket文件用户进行身份验证。

这意味着您无法通过提供密码来以root用户连接到MySQL服务器。但你可以通过命令

powershell 复制代码
sudo mysql

连接到MySQL服务器。

powershell 复制代码
sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql>

总结:可以使用 mysql -u root -p 或者 sudo mysql 在本机登录到mysql,然后执行下一步操作。

修改账号密码

powershell 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

补充:

  • mysql 5.7 localhost和%的区别

基础解释

localhost 只能本地登录

% 任何客户机都能登录(不安全,可以在创建用户时指定ip)
注:user@%和user@localhost是两个不同的用户

相关阅读:

Linux下MySQL出现ERROR 1698 (28000): Access denied for user

'root'@'localhost'和ERROR 1045 (28000)的一些解决方法

powershell 复制代码
先说原因
因为在Ubuntu下用apt装mysql是没有设置密码的环节的
所以一开始就是没有密码,而且密码也不是为空值,直接敲回车也进不去mysql

所以我们这个时候可以直接
mysql -u root
直接进入mysql,那么如何设置密码呢?

按照以下命令即可:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)
然后重启mysql服务器

然后你再尝试进入mysql会发现,

不用密码已经没办法进入了。

配置远程访问

默认情况下,MySQL服务器仅监听来自本地主机的连接,这意味着它只能由运行在同一主机上的应用程序访问。

但是,在某些情况下,有必要从远程位置访问MySQL服务器。例如,当您想从本地系统连接到远程MySQL服务器时。

或者当使用多服务器部署时,应用程序与数据库服务器不在同一台计算机上运行。

  1. 一种选择是通过SSH隧道访问MySQL服务器,
  2. 另一种是将MySQL服务器配置为接受远程连接。

在本教程中,我们将向你展示如何配置MySQL服务器接受远程的连接。包括添加或更改bind-address选项指定监听地址0.0.0.0 ,授权MySQL用户远程访问权限。

配置防火墙iptable,UFW,FirewallD允许连接3306端口。验证MySQL数据库服务器的远程连接。相同的说明适用于MariaDB。

配置MySQL服务器

第一步是设置MySQL服务器监听计算机所有IP地址。如果MySQL服务器和客户端可以通过专用网络相互通信,那么最好的选择是将MySQL服务器设置为仅在指定IP上监听。

如果要通过公共网络连接到MySQL服务器,请将MySQL服务器设置为监听计算机上的所有IP地址。

因此,您需要编辑MySQL配置文件并添加或更改bind-address选项的值。您可以设置一个IP地址和IP范围。

如果地址为0.0.0.0,则MySQL服务器接受所有远程主机IPv4接口上的连接。如果你需要使用IPv6,请使用::代替0.0.0.0。

MySQL配置文件的位置因Linux发行版而异。在Ubuntu和Debian中,文件位于/etc/mysql/mysql.conf.d/mysqld.cnf,而在基于Red Hat的发行版(如CentOS)中,文件位于/etc/my.cnf。

使用你喜欢的文本编辑器打开文件/etc/mysql/mysql.conf.d/mysqld.cnf,在本教程中我们将使用vim打开文件:

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

搜索以bind-address开头的行,并将其值设置为MySQL服务器应监听的IP地址。默认情况下,该值设置为127.0.0.1即仅在本地主机中监听。

在此示例中,我们将值更改为0.0.0.0,将MySQL服务器设置为监听所有IPv4地址。

powershell 复制代码
bind-address           = 0.0.0.0

mysqld.cnf

在MySQL 8.0和更高版本中,bind-address指令可能不存在。在这种情况下,

请将

powershell 复制代码
bind-address           = 0.0.0.0

其添加到**[mysqld]**下。

完成后,重新启动MySQL服务以使更改生效。在现代的Linux发行版中,MySQL通常使用systemd的服务在后台运行,因此你可以使用systemctl命令重启MySQL服务。

实际举例

找到下面的内容:

然后,修改为:

powershell 复制代码
#bind-address            = 127.0.0.1
#mysqlx-bind-address     = 127.0.0.1
bind-address            = 0.0.0.0
mysqlx-bind-address     = 0.0.0.0

要使配置生效是需要重启mysql服务的,不过,先不用急,因为你还得设置可以远程访问数据库的账号,注意,下面以root能够远程登录访问mysql数据库为目的进行操作。

设置允许从远程计算机访问的账号

下一步是允许远程用户访问数据库。首先以root用户登录到MySQL服务器。运行命令

powershell 复制代码
sudo mysql

或者您使用本地MySQL身份验证插件以root用户身份登录,请运行

powershell 复制代码
mysql -uroot -p

命令并在出现提示时输入密码。

在MySQL Shell中,使用GRANT语句为用户授予远程访问权限。

powershell 复制代码
sudo mysql
mysql -uroot -p
MYSQL5版本具体执行
powershell 复制代码
GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

GRANT命令解释

  • 其中database_name是用户将连接到的数据库的名称。
  • user_name是MySQL用户的名称。
  • ip_address是用户本地计算机的IP地址。使用***%***允许用户从任何IP地址进行连接。
  • user_password是用户密码。

例如,仅允许IP是10.8.0.5的客户端使用密码my_passwd和用户名为foo访问数据库dbname,请运行以下命令,如需允许所有IP,请使用%代替IP地址。命令如下:

powershell 复制代码
GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';
MYSQL8版本具体执行

ps:

上面的是mysql5的,在mysql8下面会报错,解释如下:

MySQL8.x使用GRANT为用户赋权时报错

在 MySQL 5.x 的版本中的操作方式

powershell 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

在 MySQL 8.x 中版本中按照以上操作

mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY

'123456' WITH GRANT OPTION; ERROR 1064 (42000): You have an error in

your SQL syntax; check the manual that corresponds to your MySQL

server version for the right syntax to use near 'IDENTIFIED BY

'123456' WITH GRANT OPTION' at line 1
原因分析

通过官网文档的指引可以知道,新版本的 MySQL 8.x 版本已经将创建账户和赋权的方式分开导致以上的命令在 MySQL 8.x 上执行报语法错误。

解决方案

powershell 复制代码
# 创建账户
CREATE USER '用户名'@'访问主机' IDENTIFIED BY '密码';
# 或者修改账号
ALTER USER '用户名'@'访问主机' IDENTIFIED BY '密码';
# 为创建的账户赋权
GRANT '权限列表' ON '数据库' TO '用户名'@'访问主机';
# 你想一劳永逸不考虑任何安全性的话,什么都给root就好了:
GRANT ALL ON *.* TO 'root'@'%';
# 刷新
FLUSH PRIVILEGES;
验证更改

要验证远程用户是否可以连接到MySQL服务器,可以运行命令

ps:验证之前请确保已经重启mysql服务器了,配置已经生效了!

powershell 复制代码
root@toowhite-MS-7D48:~# systemctl stop mysql
root@toowhite-MS-7D48:~# systemctl start mysql

使用以上步骤创建的账号来进行登录测试:

powershell 复制代码
mysql -u user_name -h mysql_server_ip -p
譬如:
mysql -u root -h 127.0.0.1 -p

其中user_name是您授予远程访问权限的用户名,mysql_server_ip是运行MySQL服务器的主机的IP地址。如果一切设置正确,您将能够登录到远程MySQL服务器。

如果收到类似以下的错误,则说明端口3306未打开,或者MySQL服务器未监听IP地址。ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

"ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"。错误表示您尝试登录的用户无权访问远程MySQL服务器。

相关推荐
山山而川粤1 小时前
废品买卖回收管理系统|Java|SSM|Vue| 前后端分离
java·开发语言·后端·学习·mysql
stone51952 小时前
鸿蒙系统ubuntu开发环境搭建
c语言·ubuntu·华为·嵌入式·harmonyos
Bonne journée3 小时前
centos和ubuntu有什么区别?
linux·ubuntu·centos
vvw&3 小时前
如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack
linux·运维·nginx·ubuntu·elk·elasticsearch·开源项目
真真假假々4 小时前
MySQL和ADSDB
数据库·mysql
秦老师Q4 小时前
MySQL第二章 sql约束与sql数据类型
数据库·sql·mysql
不是二师兄的八戒4 小时前
mysql in查询大数据量业务无法避免情境下优化
数据库·mysql
苹果醋34 小时前
vue3 在哪些方便做了性能提升?
java·运维·spring boot·mysql·nginx
sun00770012 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
mqiqe12 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql