Scoop自定义bucket、快速切换软件版本号、数据迁移

前言

网上一大推介绍scoop的基本命令使用的教程,这里不介绍这些,而是讲以下内容:

  • 如何利用scoop,通过一行命令 轻松切换windows系统的jdk版本号?
  • 如何创建自己的Bucket?以及可能遇到的问题。
  • scoop数据迁移:换了一台新电脑,如何将老电脑中scoop管理的软件迁移到新电脑?

Scoop常用操作

安装特定版本

安装特定的软件版本

scoop install 软件名@版本号

有些软件官方网站并不会保留历史版本的下载链接,这也是 scoop 不能支持安装软件指定版本的原因之一。

比如Maven,scoop只能下载最新版本,指定版本3.8.5就不行。

image-20240428164420948

image-20240428164534689

嗯,这需要发挥一下人的能动性,打开第一个ERROR链接:https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.zip

提示Not Found

image-20240428165026348

那,将url的后半段裁剪掉,可以进入了

image-20240428165109035

点击其中的Maven-3/

image-20240428165149761

其中3.9.6就是maven最新版,也就是scoop默认会下载的版本。

看来,只有4个版本的Maven可以在官网下载了。尝试用scoop下载3.8.8

image-20240428165338929

成功了

image-20240428165356734

有意思的是,由于我提前利用scoop下载了maven3.9.6,并且对3.9.6进行了配置。因此,我新下载的3.8.8的xml文件,竟然直接使用了3.9.6的版本!

image-20240428165610836

image-20240428165649011

版本切换

在同一程序的不同版本之间切换

scoop reset 软件名@版本号

注意,也可以根据apps文件夹内的 文件夹名称进行切换

image-20240427223511499

image-20240427223604651

使用scoop的版本切换命令,它只会将 当前路径的 软件版本进行切换(不包括子路径),而不会切换所有路径下的软件版本。不仅如此,当你将当前的 命令行关闭,scoop的版本切换命令 就会失效。

比如下图中,在 /本地电脑 路径下,将node版本切换为20,你可以看到提示信息显示,只是切换了当前路径而已。

image-20240726211739291

当你在其他路径查看node版本,依旧是原来的 node16

image-20240726211859689

版本切换无效的问题: https://v2ex.com/t/1015062

全局版本切换

究竟怎样 才能让一个scoop reset 命令 修改电脑的全局软件版本?

关键在于 scoop生成的 current快捷键文件夹。

以nodejs的版本切换为例子。

image-20240726230603219

本质上,scoop reset 命令 不过是将current快捷方式的指针 改变路径。

我们只要在PC的系统变量中,设置 NODE_HOME变量,值为 current文件夹路径。

image-20240726230913717

在系统变量中,找到 Path变量,在Path变量中,添加一行新路径。

%系统变量名% 可以引用 系统变量的值。注意,由于NodeJs的 .exe文件在current路径下,所以直接写成如下格式就行了:

%NODE_HOME%\

正如下图所示,一般软件的.exe文件在 bin目录下。

image-20240726231015121

将 current快捷访问方式 设置为系统变量后,scoop reset 就可以修改软件版本号为 全局了。

JDK全局切换

根据上一节的内容,我们可以全局切换jdk了。

添加系统变量 JAVA_HOME_SCOOP,变量值为 scoop的 jdk的current文件夹路径。

image-20240726233203586

将JAVA_HOME_SCOOP变量 添加到 系统变量Path之中,替换 原来的 JAVA_HOME变量为 JAVA_HOME_SCOOP

image-20240726233126238

修改软件名称

有时候你在Bucket上下载的软件名称会很奇怪,无法见名知意。

比如jdk8,你需要使用这个名称——temurin8-jdk才能从bucket中下载

image-20240510112104522

这个名称格式有些奇怪,怎么做 才能改成“openjdk8”?

答案是:大胆地在Scoop的安装目录下的app目录下,直接修改文件夹名称!

image-20240510112311200

scoop切换openjdk8的运行,不会出现任何错误

image-20240510112427253

Bucket

Bucket常用操作

参考文章

Bucket是Scoop的一个概念,可以理解为存放了许多安装软件的远程仓库。Scoop默认只自带一个叫做“main”的官方维护的Bucket,这里面可以安装的软件并不多。

可以运行 scoop bucket list 查看本地添加的所有Bucket,默认情况下只有一个main。

image-20240427220815345

其中 extras 是 Scoop 官方维护的另一个 Bucket,包含了比 main 更多的软件包。

个人推荐运行以下命令添加一些 Bucket:

$ scoop install git # 先安装 Git, 这是添加 Bucket 的前置
$ scoop bucket add java
$ scoop bucket add extras
$ scoop bucket add dorado https://github.com/chawyehsu/dorado

其中 extras 是 Scoop 官方维护的另一个 Bucket,包含了比 main 更多的软件包。dorado 则是国内开发者维护的仓库,包含了许多适合国内用户使用的软件包。而 java,顾名思义,包含了许多与 Java 有关的软件包。还有一个名为 php 的 Bucket,如果你需要使用 PHP 也可以装上。

许多软件也都提供了不同版本——你可以通过

$ scoop bucket add versions 添加 versions Bucket 来安装它们。

删除一个bucket

scoop bucket rm bucketname

自定义Bucket

注意:每次你在GitHub的Bucket仓库中修改or添加新的json文件,都需要在本地重新连接github仓库 或者 更新github本地仓库,因为scoop是通过直接将远程的bucket github仓库复制到本地 来运作的。

官方文档部分

先阅读官方文档 关于自定义Bucket的部分——Buckets · ScoopInstaller/Scoop Wiki (github.com)

image-20240510173716064

查看BucketTemplate

点击Use this template,并选择 创建一个新仓库

image-20240510173844483

你需要根据下图中的提示,修改 新创建的Bucket GitHub仓库的一些设置

image-20240510173818160

根据提示,修改auto-pr.ps1的upstream参数

image-20240510174246797

接下来就是在bucket文件夹下创建 软件对应的json了。比如,因为scoop的主流Bucket中,没有maven3.6.1,我想要使用scoop下载并管理这个版本的maven

注意json文件的命名,直接命名为 maven.json,如果是其他命名,比如 maven-3.6.1.json,这个命名会影响到 多版本maven共享配置文件,具体介绍在 进阶部分->需求2。当然,命名为maven-3.6.1.json也不能算错。

image-20240510174430242

json文件

按照这个网站的思路写:Scoop 进阶 - 建立自己的Bucket - 知乎 (zhihu.com)

image-20240510180308208

注意:下载maven,就不需要 bin 配置

查找 下载资源文件的hash值

先随便在github上找一个bucket仓库中的buck/app.json文件

image-20240510141454491

复制url并输入浏览器搜索栏,就可以下载这个软件 安装包了。

下载后,在下载路径打开cmd。

image-20240510141620777

使用windows的命令 certutil -hashfile 下载,有三种参数加密方式选择,默认为sha256码,也有md5和sha1形式的,命令如下

#cd到file所在路径
certutil -hashfile [file] sha256
certutil -hashfile [file] md5
certutil -hashfile [file] sha1

image-20240510141635803

对比发现,与github仓库中json文件的hash一致。

【注意】如果你想要使用md5算法的hash,你必须在 .json配置文件中 hash字段值格式为"md5:哈希值";默认的算法sha256,不需要添加前缀 "sha256:" 。

因此,通过分析别人的json,获取一个软件的hash步骤为

1、下载它的安装包

2、使用windows命令获得hash值

我想要将maven3.6.1加入到自定义的bucket中,创建文件maven-3.6.1.json

{
"##": "This file is a template. Fill the blanks and add or remove fields as necessary.",
"version": "3.6.1",
"description": "This version is compatible with IDEA_2019.3",
"homepage": "https://archive.apache.org/dist/maven/maven-3/",
"notes": "",
"url": "https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip",
"hash": "7e6cfe98dc9c16ae6aa267db277860594695144d719c99d1fc519e89346a8edf",
"bin": "maven.exe"
}

将这个json文件上传到github的MyBucket/bucket目录下

image-20240510145921917

接下来,本地scoop连接MyBucket GitHub仓库

scoop bucket add <bucketname> https://github.com/<username>/<bucketname>
scoop install <bucketname>/<manifestname> # 其中manifestname是由 bucket中的json文件名决定的

scoop连接github仓库出错

image-20240510144520063

github以邮件形式提示错因

image-20240510144554884

直接使用Nodejs20,就可以解决这个问题

image-20240510145212100

下载自定义Bucket的命令,其中“maven”是由 MyBucket/bucket/maven.json文件名决定

# 通过 查询MyBucket中的maven.json文件 来安装maven
scoop install MyBucket/maven

下载速度好慢

image-20240510145526834

下载压缩包出错

出错:

image-20240510152403345

我找原因的方式是,比较Scoop推崇的Main Bucket中的Maven.json,寻找出路

image-20240510152457839

比较有可能的是:extract_dir

查找官方文档

image-20240510152605759

似乎是因为maven3.6.1下载资源为.zip文件,还需要一些额外的指定

image-20240510152728343

打开上述文件,第一层目录是image-20240510152752161

第二层目录才是maven应用

image-20240510152809256

或许就是因为没有设置extract_dir参数了。也就是说,如果url下载的资源为压缩包文件,你需要考虑解压后的文件路径问题,通过 extract_dir 配置项手动指定。

image-20240510154228797

进阶部分

需求1

虽然已经解决了 “自己将资源放入Bucket,并使用scoop下载”的需求。但是,scoop另外一个优点——“切换版本时,自动对软件进行全局配置”——却没有实现

比较Scoop官方的Main Bucket,查看maven.json

image-20240510153124920

怀疑是env_add_path,查看这个参数的官方文档,果然没错

image-20240510153219670

注意,这里的全局配置,有两个参数env_add_path和env_set,若是下载Maven3.6.1,则只需要添加env_add_path。但其他软件未必如此,比如JDK

打开别人写好的某个版本的json文件,你会发现还需要设置env_set,这里就不细琢磨了。

image-20240510151123163

需求2

再比如,我使用别人的bucket下载各个版本的maven,它们都会归类在同一个文件夹下,并且会将配置文件互通

image-20240510151331281

image-20240510151343666

不同版本的maven,共用一个配置文件conf

image-20240510151548406

image-20240510151608932

image-20240510153559935

打开MainBucket的maven.json文件,可以看到persist

image-20240510153723186

刚好与上述的快捷键文件夹一致,查阅官方文档

image-20240510153815405

image-20240510153958785

在maven.json中添加新的参数

{
"##": "This file is a template. Fill the blanks and add or remove fields as necessary.",
"version": "3.6.1",
"description": "This version is compatible with IDEA_2019.3",
"homepage": "https://archive.apache.org/",
"url": "https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip",
"hash": "7e6cfe98dc9c16ae6aa267db277860594695144d719c99d1fc519e89346a8edf",
"extract_dir": "apache-maven-3.6.1",
"env_add_path":"bin",
"persist": [
"conf",
"lib\\ext"
]
}

显然,上述几个参数 明显是用来配置windows全局环境的。

官方文档-各种json参数的含义

/使用 scoop uninstall maven@3.6.1 竟然误删了所有maven......命令行误删还不好恢复......好在问题不大。/

但确实让scoop下成了maven3.6.1了

image-20240510172017006

image-20240510172055077

image-20240510172106112

image-20240510173148205

再下载Main Bucket的maven3.9.6

image-20240510173340437

maven3.6.1与maven3.9.6确实都在同一个文件夹了。

image-20240510173410216

image-20240510173447180

app.json文件补充

杂项

## 注释行,但只能有一行,也可以使用字符串数组

{
"##":"this is a comment."
}

notes: A one-line string, or array of strings, with a message to be displayed after installing the app.

depends:软件运行时的依赖,这个依赖将会自动安装。通常配合 suggest 使用,suggest 用于提示用户需要安装哪些依赖

suggest:展示 建议可选软件 的信息,这些软件会提供互补特性。

格式:

"suggest": {
"JDK": "java/openjdk"
}

如果这些建议的软件已经被下载了,那么用户不会看到 suggest语句

architecture ,如果软件资源不是32bit,需要使用这个键值

比如下面的JDK8的json

"architecture": {
"64bit": {
"url": "https://corretto.aws/downloads/resources/8.412.08.1/amazon-corretto-8.412.08.1-windows-x64-jdk.zip",
"hash": "ac7a2c1020b18c74c0155efac525b36827468e95bf343a721e12027066c16633"
},
"32bit": {
"url": "https://corretto.aws/downloads/resources/8.412.08.1/amazon-corretto-8.412.08.1-windows-x86-jdk.zip",
"hash": "efe8d66520e0678772746f4261d895f044dde38dfebc36d193491567e91933fc"
}
},

shortcuts:中文“快捷方式”。指定快捷方式值 使得在开始菜单可以看到快捷方式。

shortcuts是数组格式,它的每一个元素也是数组格式。

一个shortcut是一个数组,这个数组至少要指定两个参数,还有两个参数是可选的。

  • 第1个参数:到目标文件的路径【必选】
  • 第2个参数:快捷方式的名字【必选】 支持子目录: \\
  • 第3个参数:开始的参数【可选】
  • 第4个参数:快捷方式图标文件的路径【可选】
{
"shortcuts": [
[
"AccessEnum.exe",
"SysInternals/AccessEnum - View accesses to directories, files and registry keys",
"/accepteula"
],
[
"AdExplorer.exe",
"SysInternals/AdExplorer - Active Directory viewer and editor",
"/accepteula"
]
]
}

环境配置

env_add_path: 将这个字段表示的目录 添加到 用户的路径(如果--global参数被使用,则添加到系统路径)。这个字段表示的目录 必须与安装目录相关 而且 在安装目录内部

env_set :环境参数的集合,用于用户环境 (如果使用--global参数,则用于系统环境)

格式(JDK8为例):

"env_set": {
"JAVA_HOME": "$dir"
}

这里的 $dir,该怎么理解?

官方文档

在scoop中$app 代表当前的软件名称,也就是manifest file的名称 eg.maven.json,则$app为maven。

$dir 表示 Scoop的安装路径下的 apps\app\currentappsapp\current

比如jdk8的$dir就是下图(其实current是快捷键,指向 jdk8软件的目录)

image-20240511151219487

$dir的补充(没有用到install之类的键名):

image-20240511152100864

上文是jdk8在scoop中的环境配置状况,接下来再展示jdk8传统的手动配置环境变量,以作为对比。

手动配置情况:

image-20240511143207643

image-20240511143041191

各种$变量的含义

你会在scoop的lib目录下的 各种.ps1文件里经常看到 $开头的变量,.json文件有时也会使用

image-20240511152003152

Pre Post (un)install scripts · ScoopInstaller/Scoop Wiki (github.com)

数据迁移

参考文章1

参考文章2

参考文章3:重装系统后如何恢复使用scoop

重装系统之后, 如果把原有的scoop文件夹粘贴回去user文件夹,然后在powershell中再次输入Windows下的软件管理神器:scoop文章中的安装命令,会得到一个Scoop is already installed错误,要想正确恢复scoop,根据官方回答,请按照以下步骤:

  1. 备份scoop目录
  2. 备份的目录放到新的安装位置,为了描述方便,新scoop位置为 'C:\scoop'
  3. 若安装目录非默认情况下,重新设置安装目录

在Powershell输入如下命令。这些命令其实就是在为这台电脑添加 用户变量级别的环境变量'SCOOP'

$env:SCOOP='C:\scoop'
[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')

image-20241022220901496

  1. 检查“此电脑” 环境变量的 “用户变量” path中有:%SCOOP%\shims
  2. 执行 /apps/scoop/current/bin 里面的 refresh.ps1scoop.ps1 脚本
  3. 执行:scoop reset *

reset 失败:https://github.com/ScoopInstaller/Scoop/issues/4684

我出现了一点小失败:

image-20241027132758394

使用命令 scoop list,tomcat确实异常。

image-20241027132831524

后来我查看了旧电脑的Scoop软件目录中的 "tomcat",原来这个文件夹本来就是空文件夹,起作用的就是下方的"tomcat9"

------------------------

自定义Bucket练习

mysql@8.0.30

mysql.json先在本地git仓库配置,验证正确后再push到远程仓库。

在各种主流的bucket中,找到一个mysql.json文件作为自己的模板(我在main这个bucket中找的mysql.json),复制代码到自己的MyBucket/bucket/目录下的新建文件mysql.json

{
"version": "9.1.0",
"description": "The world's most popular open-source database",
"homepage": "https://dev.mysql.com/downloads/mysql/#info-tab",
"license": "GPL-2.0-only",
"notes": [
"Run 'mysqld --standalone' or 'mysqld --console' to start the Database,",
"or run following command as administrator to register MySQL as a service. See: https://dev.mysql.com/doc/refman/en/windows-start-service.html",
"",
"mysqld --install MySQL --defaults-file=\"$dir\\my.ini\"",
"",
"To stop and/or delete the Service run 'sc stop MySQL' and 'sc delete MySQL'."
],
"suggest": {
"vcredist": "extras/vcredist2022",
"mysql-shell": "mysql-shell"
},
"architecture": {
"64bit": {
"url": "https://dev.mysql.com/get/Downloads/MySQL-9.1/mysql-9.1.0-winx64.msi",
"hash": "md5:7a26420bb3446eab56f389dba05a9718",
"extract_dir": "PFiles64\\MySQL\\MySQL Server 9.1"
}
},
"pre_install": [
"$ini = \"$dir\\my.ini\"",
"if (!(Test-Path \"$ini\")) {",
" # Using $dir instead of $persist_dir, causes this error:",
" # [ERROR] [MY-010187] [Server] Could not open file '~/scoop/apps/mysql/current/data/host.err' for error logging: Permission denied",
" Add-Content -Path \"$ini\" -Value \"[mysqld]`ndatadir=$($persist_dir -replace '\\\\', '/')/data\" -Encoding Ascii",
" # Set username so it's not required when connecting",
" Add-Content -Path \"$ini\" -Value \"[client]`nuser=root\" -Encoding Ascii",
"}"
],
"post_install": [
"if (!(Test-Path \"$dir\\data\\auto.cnf\")) {",
" warn 'Initializing data directory ...'",
" Invoke-ExternalCommand -FilePath \"$dir\\bin\\mysqld.exe\" -ArgumentList '--initialize-insecure' | Out-Null",
" warn 'Database has been initialized (username: root, password: <blank>)'",
"}"
],
"bin": [
"bin\\ibd2sdi.exe",
"bin\\innochecksum.exe",
"bin\\myisamchk.exe",
"bin\\myisamlog.exe",
"bin\\myisampack.exe",
"bin\\myisam_ftdump.exe",
"bin\\mysql.exe",
"bin\\mysqladmin.exe",
"bin\\mysqlbinlog.exe",
"bin\\mysqlcheck.exe",
"bin\\mysqld.exe",
"bin\\mysqldump.exe",
"bin\\mysqlimport.exe",
"bin\\mysqlshow.exe",
"bin\\mysqlslap.exe",
"bin\\mysql_config_editor.exe",
"bin\\mysql_secure_installation.exe",
"bin\\mysql_tzinfo_to_sql.exe",
"bin\\my_print_defaults.exe",
"bin\\perror.exe"
],
"shortcuts": [
[
"bin\\mysql_configurator.exe",
"MySQL Configurator"
]
],
"persist": [
"data",
"my.ini"
],
"checkver": "MySQL Community Server ([\\d.]+)",
"autoupdate": {
"architecture": {
"64bit": {
"url": "https://dev.mysql.com/get/Downloads/MySQL-$majorVersion.$minorVersion/mysql-$version-winx64.msi",
"hash": {
"url": "https://dev.mysql.com/downloads/mysql/",
"regex": "(?s)$basename.*?$md5"
},
"extract_dir": "PFiles64\\MySQL\\MySQL Server $majorVersion.$minorVersion"
}
}
}
}

将上面的配置项修改为mysql8.0.30

autoupdate是负责自动更新的,不需要,删除它;shortcuts负责安装成功后生成桌面快捷键,不需要,删除它;suggest也没啥用,删除。pre_install和post_install似乎是 安装失败的提示信息,留着吧。

mysql8.0.30 压缩包 官方下载地址

获取 压缩包的hash值,这次采用md5算法:

d17b3d4bab676a2c365b82f65c9a5374

因为这是一个压缩包,因此,需要配置解压路径信息

mysql-8.0.30-winx64.zip解压后的第一层路径是 mysql-8.0.30-winx64,然后才是软件的各种文件。

image-20241226153134714

因此,需要在mysql.json设置 extract_dir 字段。

"architecture": {
"64bit": {
"url": "https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-winx64.zip",
"hash": "md5:d17b3d4bab676a2c365b82f65c9a5374",
"extract_dir": "mysql-8.0.30-winx64"
}
},

因此,我最终的mysql.json文件如下:

{
"version": "8.0.30",
"description": "The world's most popular open-source database: mysql",
"homepage": "https://dev.mysql.com/downloads/mysql/#info-tab",
"license": "GPL-2.0-only",
"notes": [
"Run 'mysqld --standalone' or 'mysqld --console' to start the Database,",
"or run following command as administrator to register MySQL as a service. See: https://dev.mysql.com/doc/refman/en/windows-start-service.html",
"",
"mysqld --install MySQL --defaults-file=\"$dir\\my.ini\"",
"",
"To stop and/or delete the Service run 'sc stop MySQL' and 'sc delete MySQL'."
],
"architecture": {
"64bit": {
"url": "https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-winx64.zip",
"hash": "md5:d17b3d4bab676a2c365b82f65c9a5374",
"extract_dir": "mysql-8.0.30-winx64"
}
},
"pre_install": [
"$ini = \"$dir\\my.ini\"",
"if (!(Test-Path \"$ini\")) {",
" # Using $dir instead of $persist_dir, causes this error:",
" # [ERROR] [MY-010187] [Server] Could not open file '~/scoop/apps/mysql/current/data/host.err' for error logging: Permission denied",
" Add-Content -Path \"$ini\" -Value \"[mysqld]`ndatadir=$($persist_dir -replace '\\\\', '/')/data\" -Encoding Ascii",
" # Set username so it's not required when connecting",
" Add-Content -Path \"$ini\" -Value \"[client]`nuser=root\" -Encoding Ascii",
"}"
],
"post_install": [
"if (!(Test-Path \"$dir\\data\\auto.cnf\")) {",
" warn 'Initializing data directory ...'",
" Invoke-ExternalCommand -FilePath \"$dir\\bin\\mysqld.exe\" -ArgumentList '--initialize-insecure' | Out-Null",
" warn 'Database has been initialized (username: root, password: <blank>)'",
"}"
],
"bin": [
"bin\\ibd2sdi.exe",
"bin\\innochecksum.exe",
"bin\\myisamchk.exe",
"bin\\myisamlog.exe",
"bin\\myisampack.exe",
"bin\\myisam_ftdump.exe",
"bin\\mysql.exe",
"bin\\mysqladmin.exe",
"bin\\mysqlbinlog.exe",
"bin\\mysqlcheck.exe",
"bin\\mysqld.exe",
"bin\\mysqldump.exe",
"bin\\mysqlimport.exe",
"bin\\mysqlshow.exe",
"bin\\mysqlslap.exe",
"bin\\mysql_config_editor.exe",
"bin\\mysql_secure_installation.exe",
"bin\\mysql_tzinfo_to_sql.exe",
"bin\\my_print_defaults.exe",
"bin\\perror.exe"
],
"persist": ["data", "my.ini"],
"checkver": "MySQL Community Server ([\\d.]+)"
}

命令行运行 专门在自定义bucket范围内寻找软件的命令:

"MyBucket": 自定义的bucket名称

"mysql" : 这个名字由 bucket中的 .json 文件名决定

"@8.0.30" : 由.json文件中的 version 字段决定

scoop install MyBucket/mysql@8.0.30

scoop 启动!

image-20241226160536277

从别人仓库复制的mysql.json中,有一个bin配置

"bin": [
"bin\\ibd2sdi.exe",
"bin\\innochecksum.exe",
"bin\\myisamchk.exe",
"bin\\myisamlog.exe",
"bin\\myisampack.exe",
"bin\\myisam_ftdump.exe",
"bin\\mysql.exe",
"bin\\mysqladmin.exe",
"bin\\mysqlbinlog.exe",
"bin\\mysqlcheck.exe",
"bin\\mysqld.exe",
"bin\\mysqldump.exe",
"bin\\mysqlimport.exe",
"bin\\mysqlshow.exe",
"bin\\mysqlslap.exe",
"bin\\mysql_config_editor.exe",
"bin\\mysql_secure_installation.exe",
"bin\\mysql_tzinfo_to_sql.exe",
"bin\\my_print_defaults.exe",
"bin\\perror.exe"
],

我在自己的mysql-8.0.30-winx64.zip中,一个一个的搜索,确认了所有的.exe文件都存在。

根据后来运行scoop时的结果,bin中的.exe文件都放到了 shim 文件夹中

image-20241226155436643

image-20241226155722994

安装好之后,尽管命令行已经没有正确运行mysql,但至少计算机知道确实存在mysql指令了。

image-20241226160729117

根据测试,上面的mysql.json文件已经把mysql的环境变量弄好了,你不需要再配置环境变量了。

配置mysql

接下来的内容,就是 windows 如何使用mysql压缩包安装mysql了,已经与Scoop无关了。

接下来你需要新建mysql.ini 文件,放入Scoop\InstallationFileDirectory\apps\mysql\current\data\目录下:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Developer\Scoop\InstallationFileDirectory\apps\mysql\current
# 设置mysql数据库的数据的存放目录,data就是你以后创建的数据库存放的位置
datadir=D:\Developer\Scoop\InstallationFileDirectory\apps\mysql\current\data
# 此处同上
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=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

为 windows 安装mysql服务

mysqld install

查看mysql服务,默认的是停止状态,我们需要手动启动它,点击启动就行

或者命令 :net start MySQL

在这里插入图片描述

测试:mysql --version

image-20241226162829970

验证安装是否成功:第一次没有设置密码,直接回车 进入

mysql -u root -p
-u :uers用户名 root
-p :password 密码

【注意】默认状态下,mysql root账号密码为空,这将会使得第三方工具无法连接mysql。

image-20241226162936825

修改root密码:

切换数据库到 mysql

use mysql;

检查 user 表的 authentication_string 字段 是否为空。

select authentication_string from user;

如果不为空,将该字段设置为空(不是 空格字符):

update user set authentication_string='' where user='root';

修改密码

alter user 'root'@'localhost' identified by '新密码';

image-20241226164507157

push MyBucket

既然mysql安装无误,说明 mysql.json配置正确,可以把它push到远程库了。

在MyBucket文件目录下 git bash here

git add bucket/mysql.json

本文作者:DriftingAE86

本文链接:https://www.cnblogs.com/theSunAndSnow/p/18724080

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   DriftingAE86  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起