Centos7-tar包自定义安装mysql -ERROR 2002_ERROR 1045_ERROR 1054_ERROR 1290_ERROR 1820_ERROR 1819_ERROR 1193

发布时间 2023-03-24 16:51:45作者: Loki_Severus

@

下面是笔者拙劣的测试记录,安装mysql的精华版教程,如下所示:

Linux (Centos 7) 自定义目录安装mysql - 精华版:传送门


1. 自定义安装 mysql 参考链接 ERROR 2002 / ERROR 1045 / ERROR 1054 / ERROR 1290

CentOS7.4自定义安装MySQL

上面链接报错 pid 文件问题,解决方法补充链接:

Starting MySQL. ERROR! The server quit without updating PID file

1.1、 ERROR 2002 报错解决方法:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

(这是由于/etc/my.cnf 文件内,没有填写 [client] 配置)

1.2、 ERROR 1045 报错解决方法:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

需要配置mysql 用户密码

密码修改命令:(下面的1 和 2 两条命令都要输入)

  1. 远程用户密码修改命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
  1. mysql 修改指定用户的密码:
mysql> use mysql;
mysql> update user set password=password("123456") where user="root";

如果报如下错误:

ERROR 1054(42S22) Unknown column 'password' in 'field list'

参考原因: 5.7版本下的mysql数据库下已经没有password这个字段了,password字段改成了authentication_string (但是我的mysql并不是 5.7 以下版本,所以这个说法有问题!而是包括了 5.7 版本,具体的可以帮忙写在评论区

  1. 下面命令适用于 mysql 5.7版本及以下版本
mysql> use mysql;
mysql> update user set authentication_string=password("123456") where user="root";

还有如果出现如下报错问题:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

(请忽略它,直接输入如下命令)

刷新MySQL权限相关的表,无论上面如何操作,下面的命令都必须要输入,刷新一下!

mysql>

 flush privileges;

mysql>

quit

shell 命令:

vi /etc/my.cnf

注释掉 skip-grant-table

重启 mysqld 服务

service mysqld restart

使用 mysql -uroot -p 验证密码是否配置为 123456 ,如果登录成功那么,问题解决。


2. 关于登录 mysql 出现的密码过于简单的问题 ERROR 1045 (28000) / ERROR 1820 / ERROR 1819 / ERROR 1193

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

报错 ERROR 1045 (28000) / 1820 的解决方法(查看如下蓝色字体链接):

下面这两个链接,被笔者我整合了两份文章,虽然下面重复写,但也懒得改了

2.2. Centos 7 - 第一次登陆 Mysql 数据库 修改密码问题 ERROR 1045 (28000) - 临时生效方法

2.3. Centos 7 mysql 5.x / mysql 8.x 出现 mysql 服务重启后,validate_password 的配置失效问题 - 永久生效方法


2.1 Mysql 初次修改密码,因密码太弱报错的多种解决方法如下:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

报错 1819 的解决方法:

使用复杂密码,Mysql 数据库默认的密码策略是要包含数字、字母及特殊字符;
如果只是测试用,不想用那么复杂的密码,可以修改默认策略,即validate_password_policy(以及validate_password_length等相关参数),使其支持简单密码的设定,具体方法可以参考:
1. 如何修改 Mysql 的密码策略:传送门

vi /etc/my.cnf

必须将原来的 skip-grant-table 加入到该配置文件内,否则下面的操作无从谈起。(开启 mysql 数据库的 免密码验证模式

进入 Mysql 服务器 mysql> 使用查看 Mysql 密码策略命令:

mysql>

 SHOW VARIABLES LIKE 'validate_password%'; 

如果报错:看下面传送门解决方法链接

特别注意如下这个链接方法很有问题

ERROR 1193 (HY000): Unknown system variable 'validate_password_policy': 传送门
(一个非常奇妙的是,用了这个方法你后面就用不了,特别注意这个算是填了一个坑,但是引入了更大的坑,下面的修改操作无从用起,因为最终都会失效,重启mysql服务会导致失效的)

2.2 重启mysql 服务后,配置就会失效 - 临时生效方法

修改 Mysql 密码策略安全等级命令

mysql>

 set global validate_password_policy=LOW;

每条命令使用后最好都用

设置限制 Mysql 密码长度为 6 个字符(当然这个长度可以自己选择,但是只有配置了密码策略为 LOW 才可以,仅仅只检查密码长度)

mysql>

 set global validate_password_length=6;

刷新权限

mysql>

 flush privileges;

mysql>

 SHOW VARIABLES LIKE 'validate_password%'; 

查看下是否成功!

退出mysql

mysql>

 quit

或者
mysql>

 exit

如果这样还是出现问题,如
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

那么很有可能是重启mysql服务,导致配置失效了,参考如下解决方法链接:

2.3 配置永久生效, 解决 ERROR 1820 问题

2.3.1 永久生效解决方法链接:

Centos 7 mysql 5.x / mysql 8.x 出现 mysql 服务重启后,validate_password 的配置失效问题

2.3.2 解决 ERROR 1820

在 mysql 终端 输入命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

3. 自定义路径安装mysql 的/etc/my.cnf 配置模板

这里附上今后可能会用到的配置信息

(下面只是笔者找来的示例,应该是windows系统的 mysql 配置文件的模板)

示例自定义目录为 /home/work/

Linux 版本 (注意这里的配置可是有区分下划线间隔和非下划线的,-_ 的,可是关乎配置能否生效或是报错导致mysql服务无法重启和启动的

[mysqld]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 设置mysql的安装目录
basedir=/home/work/mysql
# 设置mysql数据库的数据的存放目录
datadir=/home/work/mysql/data
socket=/home/work/mysql/mysql.sock
log-error=/home/work/mysql/log/mysql.log
pid-file=/home/work/mysql/mysql.pid
tmpdir=/home/work/mysql/tmp
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
# default_authentication_plugin=mysql_native_password
# 在 mysql 启动时载入插件,如果报错缺失 validate-password 插件的话
plugin-load-add=validate_password.so    
# 为阻止该插件在运行时被删除,设置为永久强制使用
validate-password=FORCE_PLUS_PERMANENT  
# 配置 弱化密码策略 如 123456
validate_password_length=6
validate_password_policy=0

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
socket=/home/work/mysql/mysql.sock
default-character-set=utf8mb4

配置理解链接:

1. init-connect='SET NAMES utf8' 的作用

2. mysql通过my.cnf修改默认字符集为utf-8的方法和注意事项 character-set-server=utf8

3. 关于下划线变量和非下划线变量的配置理解,为什么 character-set-server 不可以变成 character_set_server的启发理解


Windows 版本(这个随便看看就好了)

[mysqld]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 设置mysql的安装目录
basedir=D:\Java\mysql-8.0.12-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\Java\mysql-8.0.12-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

4. 卸载删除mysql

因为安装mysql 是一个文件夹形式,所以只要删除了所有关联的mysql目录(文件夹)就可以删除mysql了。

4.1 删除所有与mysql关联的目录

查找与 mysql 关联的目录命令如下:

find / -name mysql

示例如下:

重点是如下的目录,出现权限不够问题,不用理会。

find: ‘/run/user/1000/gvfs’: 权限不够
/var/lib/mysql
/var/lib/mysql/mysql
/usr/lib64/mysql
/usr/share/mysql

删除关联的目录命令

rm -rf  /var/lib/mysql
rm -rf /var/lib/mysql/mysql
rm -rf /usr/lib64/mysql
rm -rf /usr/share/mysql

报错解决参考链接

1. mysql, mysqladmin, mysqld之间的区别: 传送门

2. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

3. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

4. Centos7解决MySQL登录ERROR 1045 (28000): Access denied for user ‘‘@‘localhost‘ (using passwor)问题