admin管理员组

文章数量:1031308

【MySQL】001.MySQL安装

一. MySQL在Ubuntu 20.04 环境安装

1.1 更新软件包列表

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get update

1.2 安装MySQL服务器

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get install mysql-server

1.3 配置安全设置

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo mysql_secure_installation
  1. 这里询问我们是否要对密码组件验证进行配置,输入y
在这里插入图片描述
  1. 这里询问我们强制密码强度,0是低,要求密码长度至少八位。1是中等,长度至少八位,数字大小写混合外加特殊字符。2是强,在中等的基础上和字典进行比对,排除高危密码。
  1. 这里询问是否要移除匿名用户,这里可以输入y继续
  1. 这里询问是否禁用root用户远程登陆,这里也可以输入y继续
  1. 这里询问是否移除测试数据库,我这里选择保留
  1. 这里询问是否重载权限表,其实就是询问是否让设置立刻生效,输入y
  1. 此刻就设置完成了

1.4 检查mysql server是否正在运行

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# systemctl status mysql.service

1.5 进行连接

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo mysql -u root -p

1.6 查询自带的数据库

代码语言:javascript代码运行次数:0运行复制
mysql> show schemas;

二. 配置文件的修改

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# vim /etc/mysql/mysql.conf.d/mysqldf

常见配置项示例

代码语言:javascript代码运行次数:0运行复制
# 绑定地址(允许远程访问时改为 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并验证

代码语言:javascript代码运行次数:0运行复制
sudo systemctl restart mysql

检查配置是否生效

代码语言:javascript代码运行次数:0运行复制
-- 查看字符集
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配置文件(如myf)中的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,查看用户信息:

代码语言:javascript代码运行次数:0运行复制
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'root';
  • 若输出中roothostlocalhostpluginauth_socket,说明需要通过密码认证调整。

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

代码语言:javascript代码运行次数:0运行复制
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
  • 将认证插件改为mysql_native_password,并设置密码。

步骤3:允许root通过TCP连接(可选) 若需允许从127.0.0.1登录:

代码语言:javascript代码运行次数:0运行复制
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连接:

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

代码语言:javascript代码运行次数:0运行复制
sudo vim /etc/mysql/mysql.conf.d/mysqldf

确认bind-address设置为127.0.0.10.0.0.0(后者允许所有IP,仅限测试环境):

代码语言:javascript代码运行次数:0运行复制
bind-address = 127.0.0.1

重启MySQL服务:

代码语言:javascript代码运行次数:0运行复制
sudo systemctl restart mysql

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

代码语言:javascript代码运行次数:0运行复制
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)

清除会话上下文。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-10,如有侵权请联系 cloudcommunity@tencent 删除mysql登录连接配置权限

【MySQL】001.MySQL安装

一. MySQL在Ubuntu 20.04 环境安装

1.1 更新软件包列表

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get update

1.2 安装MySQL服务器

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get install mysql-server

1.3 配置安全设置

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo mysql_secure_installation
  1. 这里询问我们是否要对密码组件验证进行配置,输入y
在这里插入图片描述
  1. 这里询问我们强制密码强度,0是低,要求密码长度至少八位。1是中等,长度至少八位,数字大小写混合外加特殊字符。2是强,在中等的基础上和字典进行比对,排除高危密码。
  1. 这里询问是否要移除匿名用户,这里可以输入y继续
  1. 这里询问是否禁用root用户远程登陆,这里也可以输入y继续
  1. 这里询问是否移除测试数据库,我这里选择保留
  1. 这里询问是否重载权限表,其实就是询问是否让设置立刻生效,输入y
  1. 此刻就设置完成了

1.4 检查mysql server是否正在运行

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# systemctl status mysql.service

1.5 进行连接

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# sudo mysql -u root -p

1.6 查询自带的数据库

代码语言:javascript代码运行次数:0运行复制
mysql> show schemas;

二. 配置文件的修改

代码语言:javascript代码运行次数:0运行复制
root@hcss-ecs-eaf1:~/MySQL# vim /etc/mysql/mysql.conf.d/mysqldf

常见配置项示例

代码语言:javascript代码运行次数:0运行复制
# 绑定地址(允许远程访问时改为 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并验证

代码语言:javascript代码运行次数:0运行复制
sudo systemctl restart mysql

检查配置是否生效

代码语言:javascript代码运行次数:0运行复制
-- 查看字符集
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配置文件(如myf)中的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,查看用户信息:

代码语言:javascript代码运行次数:0运行复制
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'root';
  • 若输出中roothostlocalhostpluginauth_socket,说明需要通过密码认证调整。

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

代码语言:javascript代码运行次数:0运行复制
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
  • 将认证插件改为mysql_native_password,并设置密码。

步骤3:允许root通过TCP连接(可选) 若需允许从127.0.0.1登录:

代码语言:javascript代码运行次数:0运行复制
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连接:

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

代码语言:javascript代码运行次数:0运行复制
sudo vim /etc/mysql/mysql.conf.d/mysqldf

确认bind-address设置为127.0.0.10.0.0.0(后者允许所有IP,仅限测试环境):

代码语言:javascript代码运行次数:0运行复制
bind-address = 127.0.0.1

重启MySQL服务:

代码语言:javascript代码运行次数:0运行复制
sudo systemctl restart mysql

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

代码语言:javascript代码运行次数:0运行复制
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)

清除会话上下文。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-10,如有侵权请联系 cloudcommunity@tencent 删除mysql登录连接配置权限

本文标签: MySQL001MySQL安装