root@hcss-ecs-eaf1:~/MySQL# sudo apt-get update
root@hcss-ecs-eaf1:~/MySQL# sudo apt-get install mysql-server
root@hcss-ecs-eaf1:~/MySQL# sudo mysql_secure_installation
y
0
是低,要求密码长度至少八位。1
是中等,长度至少八位,数字大小写混合外加特殊字符。2
是强,在中等的基础上和字典进行比对,排除高危密码。
y
继续
root
用户远程登陆,这里也可以输入y
继续
y
root@hcss-ecs-eaf1:~/MySQL# systemctl status mysql.service
root@hcss-ecs-eaf1:~/MySQL# sudo mysql -u root -p
mysql> show schemas;
root@hcss-ecs-eaf1:~/MySQL# vim /etc/mysql/mysql.conf.d/mysqld.cnf
常见配置项示例
# 绑定地址(允许远程访问时改为 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并验证
sudo systemctl restart mysql
检查配置是否生效
-- 查看字符集
SHOW VARIABLES LIKE 'character_set_server';
-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 查看 InnoDB 缓冲池大小
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
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错误,通常和访问被拒绝有关。可能原因有以下几个:
原因分析:
sudo mysql -u root
通过Unix socket登录时,可能使用了auth_socket
插件,无需密码。但通过TCP连接时,MySQL要求密码验证。root
用户可能仅允许从localhost
(Unix socket)登录,未配置允许从127.0.0.1
(TCP)登录的权限。root
用户未设置密码,或密码不匹配,TCP登录会失败。解决方案: 步骤1:检查root用户的权限和认证方式 以sudo权限登录MySQL,查看用户信息:
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'root';
root
的host
为localhost
且plugin
为auth_socket
,说明需要通过密码认证调整。
步骤2:修改root用户的认证插件并设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
mysql_native_password
,并设置密码。步骤3:允许root通过TCP连接(可选)
若需允许从127.0.0.1
登录:
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连接:
打开配置文件(路径可能不同):
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
确认bind-address
设置为127.0.0.1
或0.0.0.0
(后者允许所有IP,仅限测试环境):
bind-address = 127.0.0.1
重启MySQL服务:
sudo systemctl restart mysql
步骤5:使用密码通过TCP连接
mysql -h 127.0.0.1 -P 3306 -u root -p
输入步骤2中设置的密码,即可成功登录。
注意事项
root@%
,建议限制IP并设置强密码。caching_sha2_password
,改用mysql_native_password
。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) | 清除会话上下文。 |