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 文件输入以下内容,记得改路径
[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,方便客户端工具连接使用。
# 查看用户的密码插件: SELECT user, host, plugin FROM mysql.user WHERE user='root'; # 解决方法 # 其实这是一个简单的权限与安全问题 alter user 'root'@'%' identified with mysql_native_password by '123456'; flush privileges;
问题解决,大家共勉
------------剧终------------ 转载请注明出处,谢谢