【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) 清除会话上下文。

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

  • 点赞 ⭐️
  • 收藏 📌
  • 关注 🔔
相关推荐
渣波4 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim60021 小时前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL1 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_1 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横4 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二4 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐5 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops