MySQL 8.0.22下载和安装说明
MySQL官网:https://dev.mysql.com/downloads/mysql/
Other Downloads:下载 (mysql-8.0.22-winx64.zip)
选择 No thanks, just start my download. 直接下载
下载完成
将下载完压缩包解压到指定位置
配置初始化的my.ini文件
MySQL初始化配置文件说明:
- 如果没有告诉mysqld_safe例如分给多少内存这些条件,mysqld_safe会按照统一(默认)的配置进行启动
- MySQL的启动很多必要条件都是需要管理人员提前设定好才能够正常运行
解压后的目录下并没有my.ini配置文件,在安装根目录下新建文本文档,修改后缀名。
基本配置内容如下:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录,要和实际存放的路径一致
basedir=J:\SoftWare\mysql-8.0.22-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# MYSQL8.0 默认是安装在C盘下的(C:\ProgramData\MySQL\MySQL Server 8.0)安装时不能改变安装路径
#datadir=C:\ProgramData\MySQL\MySQL Server 8.0
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
MySQL的“utf8”实际上不是真正的UTF-8。
MySQL的“utf8mb4”是真正的“UTF-8”
“utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节
初始化MySQL
在安装时,避免权限问题出错我们尽量使用管理员身份运行cmd,否则在安装时会报错,会导致安装失败的情况
选择以管理员身份运行
找到mysql的bin目录,我本地安装在J盘,输入mysqld --initialize --console直接回车,执行初始化
J:
cd J:\SoftWare\mysql-8.0.22-winx64\bin
mysqld --initialize --console
稍等一会,初期化完成,看【Note】后面的信息:zvvgh)Pul2:,很重要哦,这是初始化密码
在没有更改密码前,需要记住这个密码,后续登录需要用到。
2020-11-23T16:00:48.476715Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: zvvgh)Pul2:>
提示:如果你关了这个窗口,或者没记住,那也没事,删除安装目录中data里面文件,再执行一遍初始化命令,又会重新生成的,这次再记住吧。
mysql会在和bin同级目录下产生data文件,即是root的数据库。
–initialize :初始化时,会生成一个root用户和一个随机的密码,并且密码设置为过期,需要你立即修改密码。
–initialize -insecure :另外,你也可以使用该配置初始化,但这种方式会生成一个root用户,并且密码是空(第一次登录密码空即可),同样需要你立即修改密码
–console 控制台表示
安装服务
当前bin 目录下执行命令
mysqld --install [服务名]
服务名可以不写,默认的名字为 mysql。当然,如果电脑上需要安装多个MySQL服务,就可以用不同的名字区分了,比如 mysqlOne
Service successfully installed. 提示安装成功
启动服务
输入下面命令,启动MySQL服务
启动该服务需要使用管理员权限运行
net start mysql
登录数据库
输入下面目录,这时候会提示输入密码,使用上面安装时给的随机密码,填入即可登录成功,进入MySQL命令模式。
mysql -u root -p
输入随机密码:zvvgh)Pul2:
但是登录出现了错误提示。
首先解析此英文:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES);
解析的地方有两处:
①Access denied(拒绝访问root);②using password:NO/YES (使用了密码)
出现access denied的原因有如下可能:
1)mysql的服务器停止
2)用户的端口号或者IP导致
3)mysql的配置文件错误----my.ini等文件
4)root用户的密码错误
上边的原因都排查后,还是登录不进去。
采用新的解决方案
1、跳过权限表认证
打开MySQL目录下的my.ini文件,在[mysqld]后添加一行“skip-grant-tables”,保存并关闭文件。
但是最新的数据库版本MySQL8这个命令已失效
应该添加:skip-grant-tables
shared-memory
2、重启MySQL服务。(或者执行命令:MySQL net start mysql)
**3、在命令行中输入“mysql -uroot -p”(不输入密码),**回车即可进入数据库。
在MySQL8.0.4以前,
执行SET PASSWORD=PASSWORD(’[修改的密码]’);就可以更改密码,
但是MySQL8.0.4开始,这样默认是不行的。
因为之前,MySQL的密码认证插件是“mysql_native_password”,
而现在使用的是“caching_sha2_password”。
因为当前有很多数据库工具和链接包都不支持“caching_sha2_password”,
为了方便,我暂时还是改回了“mysql_native_password”认证插件。
my.ini文件
default_authentication_plugin=mysql_native_password
4、输入’ use mysql '连接权限数据库。
5、输入’ show tables; '(分号注意)
6、输入:select user,host from user; 查看user信息
select host, user, authentication_string, plugin from user;
host: 允许用户登录的ip‘位置’%表示可以远程;
user:当前数据库的用户名;
authentication_string: 用户密码;在mysql 5.7.9以后废弃了password字段和password()函数;
plugin: 密码加密方式;
7、修改密码
update mysql.user set authentication_string="123456" where user="root";
很多博主的修改方式:
update user set password=password(‘123’) where user=‘root’ and host=‘localhost’;
然后一执行就会无数次报错。
注意:
①必须要使用双引号" ",不能使用单引号‘ ’
②数据库8.0已经没有’password’这个字段了,password字段改成了 authentication_string。所以需要将password改成authentication_string。
8、刷新权限
输入命令:flush privileges;
flush privileges;
终于修改成功了。
最后退出数据库
quit
下一步,将my.ini配置文件,跳过权限的设定删除掉
# skip-grant-tables
# shared-memory
在登录还是提示密码有问题。说明还没有修改成功,继续搞。
再一次放开权限,再去看看MySQL的user表
use mysql
select host, user, authentication_string, plugin from user;
update user set authentication_string='' where user='root';
select host, user, authentication_string, plugin from user;
退出mysql
将my.ini配置文件,跳过权限的设定删除掉,然后重启mysql服务;
使用root用户进行登录,因为上面设置了authentication_string为空,所以可以免密码登录;
mysql -u root -p
passwrod:直接回车;
使用ALTER修改root用户密码;
ALTER user 'root'@'localhost' IDENTIFIED BY “js123#”;
重新登录以后终于用我自己设定的密码进来了。