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

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

  • 点赞 ⭐️
  • 收藏 📌
  • 关注 🔔
相关推荐
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz1 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰5 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst5 小时前
数据库知识点
数据库
雪的季节5 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s5 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)7 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick19937 小时前
索引的排序和分组
数据库·mysql
爱莉希雅&&&7 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
不爱编程的小陈7 小时前
事务的进化:从MySQL单机事务到TiDB分布式事务的探究
分布式·mysql·tidb