【MySQL】001.MySQL安装

文章目录

  • [一. MySQL在Ubuntu 20.04 环境安装](#一. MySQL在Ubuntu 20.04 环境安装)
    • [1.1 更新软件包列表](#1.1 更新软件包列表)
    • [1.2 安装MySQL服务器](#1.2 安装MySQL服务器)
    • [1.3 配置安全设置](#1.3 配置安全设置)
    • [1.4 检查mysql server是否正在运行](#1.4 检查mysql server是否正在运行)
    • [1.5 进行连接](#1.5 进行连接)
    • [1.6 查询自带的数据库](#1.6 查询自带的数据库)
  • [二. 配置文件的修改](#二. 配置文件的修改)
  • [三. MySQL连接TCP/IP时的登陆问题](#三. MySQL连接TCP/IP时的登陆问题)
  • [四. MySQL中的命令](#四. MySQL中的命令)

一. MySQL在Ubuntu 20.04 环境安装

1.1 更新软件包列表

cpp 复制代码
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get update

1.2 安装MySQL服务器

cpp 复制代码
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get install mysql-server

1.3 配置安全设置

cpp 复制代码
root@hcss-ecs-eaf1:~/MySQL# sudo mysql_secure_installation
  1. 这里询问我们是否要对密码组件验证进行配置,输入y

  2. 这里询问我们强制密码强度,0是低,要求密码长度至少八位。1是中等,长度至少八位,数字大小写混合外加特殊字符。2是强,在中等的基础上和字典进行比对,排除高危密码。

  3. 这里询问是否要移除匿名用户,这里可以输入y继续

  4. 这里询问是否禁用root用户远程登陆,这里也可以输入y继续

  5. 这里询问是否移除测试数据库,我这里选择保留

  6. 这里询问是否重载权限表,其实就是询问是否让设置立刻生效 ,输入y

  7. 此刻就设置完成了

1.4 检查mysql server是否正在运行

cpp 复制代码
root@hcss-ecs-eaf1:~/MySQL# systemctl status mysql.service

1.5 进行连接

cpp 复制代码
root@hcss-ecs-eaf1:~/MySQL# sudo mysql -u root -p


1.6 查询自带的数据库

cpp 复制代码
mysql> show schemas;

二. 配置文件的修改

cpp 复制代码
root@hcss-ecs-eaf1:~/MySQL# vim /etc/mysql/mysql.conf.d/mysqld.cnf

常见配置项示例

cpp 复制代码
# 绑定地址(允许远程访问时改为 0.0.0.0)
bind-address            = 127.0.0.1

# 监听端口(默认3306)
port                    = 3306

# 数据存储目录
datadir                 = /var/lib/mysql

# 字符集配置(避免乱码)
[mysqld]
character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci

# 最大连接数
max_connections         = 200

# 查询缓存(按需启用)
query_cache_type        = 1
query_cache_size        = 64M

# 日志配置(可选)
general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
slow_query_log          = 1
slow_query_log_file     = /var/log/mysql/mysql-slow.log

重启MySQL并验证

cpp 复制代码
sudo systemctl restart mysql

检查配置是否生效

cpp 复制代码
-- 查看字符集
SHOW VARIABLES LIKE 'character_set_server';

-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 查看 InnoDB 缓冲池大小
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

三. MySQL连接TCP/IP时的登陆问题

mysql中用sudo mysql -u root -p可以登陆上,但是用mysql -h 127.0.0.1 -P 3306 -u root -p登陆时出现ERROR1698(28000)是怎么回事?

首先这两种登陆方式的区别:使用sudo mysql -u root -p登陆时,实际上是以系统root用户的权限来运行MySQL客户端,这时候可能绕过了某些权限验证,比如Unixsocket认证方式。而使命令加上-和127.0.0.1则是通过TCP/IP连接到本地MySQL服务器,这时候可能需要正确的用户名和密码,并且用户需要有远程或本地TCP连接的权限。

接下来错误码是1698,对应的是28000错误,通常和访问被拒绝有关。可能原因有以下几个:

  1. root用户的认证插件问题: 在MSQL8.0及以上版本中,默认的认证插件是cachingsha2 password,而日版本可能是mysql native password。如果客户端不支持新的插件,或者用户没有设置正确的密码,可能会导致连接问题。不过这里错误是访问被拒绝,可能更和权限有关。
  2. root用户的host配置: MySQL中的用户账户不仅由用户名决定,还包括host部分。例如,root@localhost和root@%是不同的账户。可能root用户没有配置允许从127.0.0.1或者所有IP(%)的连接权限,所以当使用TCP连接时,即使是在本地,也会因为没有权限而被拒绝。
  3. 密码问题: 可能root用户在使用TCP连接时需要的密码和 Unix socket登录时的密码不同。或者,当通过socket登录时,MySQL使用了auth_socket插件,不需要密码,而通过 TCP则需要密码,这时候如果密码不正确或者没有设置,就会报错。
  4. MySQL的绑定地址: 检查MySQL服务器是否绑定了127.0.0.1或者允许来自本地TCP连接的地址。如果MySQL配置文件(如my.cnf)中的bind-address设置为127.0.0.1,这应该没问题,但如果设置为localhost或者其他地址,可能会影响连接。

原因分析:

  1. 认证插件差异 :使用sudo mysql -u root通过Unix socket登录时,可能使用了auth_socket插件,无需密码。但通过TCP连接时,MySQL要求密码验证。
  2. 用户权限限制root用户可能仅允许从localhost(Unix socket)登录,未配置允许从127.0.0.1(TCP)登录的权限。
  3. 密码未设置 :若root用户未设置密码,或密码不匹配,TCP登录会失败。

解决方案:
步骤1:检查root用户的权限和认证方式

以sudo权限登录MySQL,查看用户信息:

sql 复制代码
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'root';
  • 若输出中roothostlocalhostpluginauth_socket,说明需要通过密码认证调整。

步骤2:修改root用户的认证插件并设置密码

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
  • 将认证插件改为mysql_native_password,并设置密码。

步骤3:允许root通过TCP连接(可选)

若需允许从127.0.0.1登录:

sql 复制代码
CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;

步骤4:检查MySQL绑定地址

确保MySQL配置文件允许TCP连接:

  1. 打开配置文件(路径可能不同):

    bash 复制代码
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 确认bind-address设置为127.0.0.10.0.0.0(后者允许所有IP,仅限测试环境):

    ini 复制代码
    bind-address = 127.0.0.1
  3. 重启MySQL服务:

    bash 复制代码
    sudo systemctl restart mysql

步骤5:使用密码通过TCP连接

bash 复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p

输入步骤2中设置的密码,即可成功登录。

注意事项

  • 安全建议 :生产环境中避免使用root@%,建议限制IP并设置强密码。
  • 插件兼容性 :若客户端不支持caching_sha2_password,改用mysql_native_password

四. MySQL中的命令

MySQL 命令列表:
注意: 所有文本命令必须位于行首,并以";"结尾

指令 功能
? (\?) "help"的同义词。
clear (\c) 清除当前输入的语句。
connect (\r) 重新连接到服务器。可选参数为数据库名和主机名。
delimiter (\d) 设置语句分隔符。
edit (\e) 使用 $EDITOR 编辑命令。
ego (\G) 将命令发送到 MySQL 服务器,垂直显示结果。
exit (\q) 退出 MySQL。与 quit 相同。
go (\g) 将命令发送到 MySQL 服务器。
help (\h) 显示此帮助信息。
nopager (\n) 禁用分页器,将结果打印到标准输出。
notee (\t) 不写入输出文件。
pager (\P) 设置分页器 [to_pager]。通过分页器打印查询结果。
print (\p) 打印当前命令。
prompt (\R) 更改您的 MySQL 提示符。
quit (\q) 退出 MySQL。
rehash (#) 重建补全哈希表。
source (.) 执行 SQL 脚本文件。将文件名作为参数。
status (\s) 从服务器获取状态信息。
system (\!) 如果启用,执行系统 shell 命令。
tee (\T) 设置输出文件 [to_outfile]。将所有内容追加到给定的输出文件中。
use (\u) 使用另一个数据库。将数据库名作为参数。字符集 (\C) 切换到另一个字符集。处理多字节字符集的二进制日志时可能需要。
警告 (\W) 每条语句后显示警告。
不显示警告 (\w) 每条语句后不显示警告。
重置连接 (\x) 清除会话上下文。

👍 如果对你有帮助,欢迎:

  • 点赞 ⭐️
  • 收藏 📌
  • 关注 🔔
相关推荐
maomi_952638 分钟前
数据库学习通期末复习二
服务器·数据库
努力努力再努力wz40 分钟前
【Linux实践系列】:用c/c++制作一个简易的进程池
linux·运维·数据库·c++·c
fly spider2 小时前
一站式Windows下Docker开启MySQL并链接本地Navicat(附乱码解决方案)
windows·mysql·docker·乱码解决
Chandler243 小时前
一图掌握 MySQL 核心要点
数据库·mysql
CodeJourney.3 小时前
从PPT到DeepSeek开启信息可视化的全新之旅
数据库·人工智能·算法·excel·流程图
老李不敲代码4 小时前
榕壹云无人共享系统:基于SpringBoot+MySQL+UniApp的物联网共享解决方案
spring boot·物联网·mysql·微信小程序·uni-app·软件需求
计算机学姐5 小时前
基于SpringBoo的地方美食分享网站
java·vue.js·mysql·tomcat·mybatis·springboot·美食
GOTXX8 小时前
【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门
开发语言·数据库·c++·qt·图形渲染·图形化界面·qt新手入门
猿小喵8 小时前
记录一次TDSQL网关夯住故障
运维·数据库·mysql
电商api接口开发8 小时前
如何在C#中使用LINQ对数据库进行查询操作?
数据库·c#·linq