Windows Server 环境下 Mysql-8.0.32-winx64 升级至 Mysql-8.2.0-winx64版本

发布时间 2024-01-10 08:48:29作者: 潇洒AJ

Mysql-8.0.32-winx64 升级至  Mysql-8.2.0-winx64版本

摘要:

  环境:Windows Server 2019 Datacenter

  Mysql 8.0.32 升级至 Mysql 8.2.0 操作记录,跨域服务器访问;

  准备工作:升级新版本、备份旧版本数据

  zip压缩包解压后,需要设置环境变量。

  MYSQL_HOME = E:\mysql-8.0.16-winx64

  在path中,增加变量%MYSQL_HOME%\bin

升级新版本

  # 下载地址:https://dev.mysql.com/downloads/mysql/
  # 解压安装包到任意目录下
  # 在解压后的目录下手动创建 data 文件夹
  # 在解压后的目录下新建一个文本文档,重命名为 my.ini
  # 编辑 my.ini 文件输入以下内容,记得改路径

my.ini文件如下(参考):

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir = D:\softapp\mysql-8.2.0-winx64
# 设置mysql数据库的数据的存放目录
datadir = D:\softapp\mysql-8.2.0-winx64\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

--以下选用
#忘记密码时使用
#skip-grant-tables
#设置协议认证方式(重点)
default_authentication_plugin=mysql_native_password

----------------简要配置-----------------

#  *************简要配置*************
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir = D:\softapp\mysql-8.2.0-winx64
# 设置mysql数据库的数据的存放目录
datadir = D:\softapp\mysql-8.2.0-winx64\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

备份旧版本数据并升级

# 先停止Mysql服务
# 整个物理文件压缩(以防升级失败) 选择性操作
# 导出命令:
d:
cd: D:\softapp\mysql-8.0.32-winx64\bin

# 备份命令将名为 dbname 的数据库备份到一个名为 backup.sql 的 SQL 文件中。在执行命令后,系统会提示你输入密码。
mysqldump -u root -p dbname > D:\Databak\mysql-8.2.0-winx64\dbname20240108.sql

# 备份所有数据库,可以使用 --all-databases 选项:
# 这将备份所有数据库到一个名为 all_databases_backup.sql 的文件中:
mysqldump -u root -p --all-databases > D:\softapp\mysql-8.2.0-winx64\all_databases_backup240108.sql

# 停止服务
net stop mysql

# 删除旧服务
mysqld -remove

# 初始化 MySQL 数据库
mysqld --initialize-insecure --user=mysql

# 或者
# 它创建一个新的数据目录并为你生成一个随机的根密码,这个根密码将在日志中显示。在这个命令中,--initialize-insecure 选项告诉 MySQL 不要生成一个随机的根密码,而是使用空密码,--user=mysql 选项指定使用 mysql 用户运行 MySQL 服务器进程。
# 不要生成一个随机的根密码  (此命令选用)
mysqld --initialize-insecure --user=mysql
# 生成随机密码 (此命令选用)
mysqld --initialize --user=mysql --console

# 启动服务
net start mysql   (OR mysql820[别名])

#导入命令:
mysql -uroot -p   # 输入密码

# 更改初始密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

# 创建升级的数据库
create database dbname;
# 还原一个 MySQL 数据库备份文件
mysql -uroot -p dbname < D:\Data\mysql-8.2.0-winx64\dbname20240108.sql

#升级完成

问题解决

# 跨域连接数据库解决方案
# ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘

# 错误原因: 进入mysql 数据库,修改密码的时候,默认只能localhost访问
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 报出如下错误
# ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

# 解决方案:
# 查看mysql 数据库中user表的 plugin字段;
select host,user,plugin from user;
# 发现都是caching_sha2_password的插件,而不是mysql_native_password插件,所以把他改回去
update user set plugin='mysql_native_password' where user='root';

# 本地就可以通过root用户和密码来登录,如果想要其他ip也能连接的话,我们再改动host
update mysql.user set host='%' where user='root';

# 刷新生效
flush privileges;

# 注释:
为什么还要使用mysql_native_password?
虽然最新版MySql换了新的身份验证插件(caching_sha2_password),
原来的身份验证插件为(mysql_native_password)。但是一些客户端工具比如Navicat
中还找不到新的身份验证插件(caching_sha2_password),因此,我们需要将mysql用户使用的 登录密码加密规则 还原成
mysql_native_password,方便客户端工具连接使用。

 

Navicat 无法连接

# 查看用户的密码插件:
SELECT user, host, plugin FROM mysql.user WHERE user='root';
# 解决方法
# 其实这是一个简单的权限与安全问题
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;

 

问题解决,大家共勉

------------剧终------------ 转载请注明出处,谢谢