在Windows上手動安裝MySQL而不使用MySQL安裝程式

手动安装MySQL在Windows上的快速步骤

Image 1

介绍

Oracle 发布了独立的 MySQL 安装程序,旨在简化在 Microsoft Windows 上安装和配置 MySQL 产品的复杂性。以下是安装程序的链接:

既然有一个向导式的安装程序,为什么还要手动安装呢?

  • 您可以安装同一版本的 MySQL 的多个实例
  • 更深入了解和洞察 MySQL 配置的工作原理
  • 在配置 MySQL 时具有更好的控制和更灵活的选项

官方 MySQL 安装指南:https://dev.mysql.com/doc/refman/8.0/en/installing.html

以下是一个快速简化的安装步骤概述:

  1. 下载 Microsoft Visual C++ 2019 Redistributable Runtime。
  2. 从 MySQL 下载二进制文件。
  3. 存档文件通常被命名为 mysql-x.x.x-winx64.zip,其中 ‘x.x.x’ 代表版本号。例如,本文撰写时的最新版本是 mysql-8.0.35-winx64.zip。
  4. 官方下载 URL(适用于社区版):https://dev.mysql.com/downloads/mysql/
  5. 将 zip 存档文件解压到一个文件夹中,该文件夹将成为运行 MySQL 服务器的根文件夹。
  6. 在根文件夹中创建一个选项文件 (my.ini)。
  7. 初始化“Data”目录
  8. 安装 MySQL 服务器的 Windows 服务
  9. 启动/停止 MySQL 服务器的服务
  10. 设置/更改“root”用户的密码。

让我们开始

Windows 上的 MySQL 服务器需要 Microsoft Visual C++ 2019 Runtime。您可以在以下链接下载“Visual C++ Redistributable for Visual Studio 2015-2022”:

https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170

假设您将 zip 存档文件提取到以下文件夹中(可以是任何位置):

C:\mysql

根文件夹将包含以下提取内容:

C:\mysql\bin\C:\mysql\docs\C:\mysql\include\C:\mysql\lib\C:\mysql\share\C:\mysql\LICENSEC:\mysql\README

在根文件夹中创建一个选项文件,并将其命名为 my.ini。但是,如果您打算使用所有默认参数,则无需创建选项文件。

选项文件的位置:

// 默认位置<根文件夹>\my.ini// 例如C:\mysql\my.ini

您可以在此处找到有关默认位置和选项文件详细信息的文档:

选项文件可以微调MySQL服务器的行为,例如修改其内存访问限制、性能以及处理特定操作的方式。

下面是我在一个MySQL服务器中使用的选项文件的示例:

[mysqld]max_allowed_packet=1Ginnodb_buffer_pool_size=500Msql-mode="STRICT_TRANS_TABLES"authentication_policy=mysql_native_password

未在选项文件中指定的选项将适用默认值。以下是一些值得注意的默认选项:

[client]port=3306[mysqld]# 根目录: <root>basedir=C:/mysqlorbasedir=C:\\mysql# 数据目录: <root>/datadatadir=C:/mysql/dataordatadir=C:\\mysql\\dataport=3306# 默认字符编码# MySQL 8中的默认值character_ser_server=utf8mb4collation_server=utf8mb4_0900_ai_ci# MySQL 5.7及以下版本的默认值character_ser_server=latin1collation_server=latin1_swedish_ci# https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html# https://dev.mysql.com/doc/refman/8.0/en/storage-engines.htmldefault_storage_engine=InnoDB# https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size# 默认:130 MB# 用于将InnoDB表和索引数据缓存到内存中以提高性能innodb_buffer_pool_size=134217728# 单个查询的最大长度# 默认:64 MBmax_allowed_packet=67108864# 定义MySQL应支持的SQL语法和要执行的数据验证检查类型# https://dev.mysql.com/doc/refman/8.0/en/sql-mode.htmlsql-mode="ONLY_FULL_GROUP_BY,           STRICT_TRANS_TABLES,          NO_ZERO_IN_DATE,          NO_ZERO_DATE,          ERROR_FOR_DIVISION_BY_ZERO,          NO_ENGINE_SUBSTITUTION"# 使用与旧版MySQL 5向后兼容的MySQL传统用户密码authentication_policy=mysql_native_password# 这是MySQL 8的默认选项,提供更强的安全性authentication_policy=caching_sha2_password

在这里,我想花些时间为“sql-mode”的默认值添加一些解释。

ONLY_FULL_GROUP_BY - 启用时=================================-- 这将导致错误select id, groupid, groupname from sales group by groupid;-- group by子句必须包含其余的列select id, groupid, groupname from sales group by groupid, id, groupname;STRICT_TRANS_TABLES - 启用时=================================-- 严格遵守表模式中定义的数据类型和值,-- 任何不正确的数据输入都会导致错误-- 示例:CREATE TABLE test (    id INT NOT NULL AUTO_INCREMENT,    total INT NOT NULL,    PRIMARY KEY (id));-- 这将导致错误,`total`不允许空值INSERT INTO test (total) VALUES (NULL);NO_ZERO_IN_DATE, NO_ZERO_DATE - 启用时=================================-- 不允许以下零日期值:0000-00-000000-00-00 00:00:002023-00-00ERROR_FOR_DIVISION_BY_ZERO=================================-- 无法使用零进行除法- 启用时1000 / 0 = 错误- 关闭时1000 / 0 = nullNO_ENGINE_SUBSTITUTION=================================-- 防止数据库自动将不可用的存储引擎替换为默认引擎,确保表只使用指定的引擎.- 启用时CREATE TABLE example_table (    id INT,    data VARCHAR(100)) ENGINE=MERGE; -- 如果MERGE引擎不可用,将失败- 关闭时-- ENGINE=MERGE将变为Innodb

假设我们有另一个需要以特定的非正常方式运行的MySQL实例。选项文件可能如下所示:

[client]port = 4001[mysqld]port = 4001basedir = D:/database/engine/mysql/v8.0.25/datadir = E:/database/data/mysql/4001/max_allowed_packet = 1Ginnodb_buffer_pool_size = 1G# 将此MySQL实例作为复制运行# 用于复制设置的特殊选项server-id = 2master-host = 192.168.0.254master-user = replication_usermaster-password = replication_passwordmaster-port = 3306read-only = 1

如果你想知道MySQL上下文中的复制设置是什么?MySQL中的复制设置是一种配置,其中从一个MySQL服务器(主服务器)自动复制并保持另一个服务器(副本或从服务器)上的数据是最新的。

*关于复制设置的辅助提示:需要在“主”MySQL服务器上创建一个专用用户。以下是创建用户的SQL语句示例:

 -- 创建用户CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password'; -- 授予执行复制任务的权限GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; -- 确保更改生效FLUSH PRIVILEGES;

下一步:初始化“Data”目录

以管理员身份运行“CMD”(命令提示符)。

进入“BIN”目录并运行以下命令之一。在命令提示符中,它将类似于:

[CMD]// 进入驱动器C:// 进入BIN目录CD C:\mysql\bin

使用以下命令初始化“data”目录:

[CMD]// 方法1:// 为root用户分配空密码mysqld --initialize-insecure// 方法2:// 为root用户分配随机密码,在错误日志文件中获取密码mysqld --initialize// 如果选项文件不在默认路径上,请手动定义选项文件的位置mysqld --initialize-insecure --defaults-file=C:\other\folder\my.ini mysqld --initialize --defaults-file=C:\other\folder\my.ini

如前所述,选项文件的默认位置相对于mysqld.exe。

// mysqld.exe文件的位置: <路径>/bin/mysqld.exe// 选项文件预期位于:<路径>/my.inimysqld.exe路径示例:C:\database\mysql\v8.0.35\bin\mysqld.exe选项文件的默认预期路径:C:\database\mysql\v8.0.35\my.ini

这将在<根目录>下创建一个data目录。例如:

C:\database\mysql\v8.0.35\data// 根据上面的代码块的示例

如果使用“mysqld –initialize”命令初始化“data”目录,则可以在错误日志文件中找到密码,该文件的名称为:<计算机名称>.err。按照上面的示例,它将类似于

C:\database\mysql\v8.0.35\data\mypcname.err

如果出现问题,您可以在错误日志文件中找到有关错误原因的提示。如果初始化成功,错误日志文件将类似于:

(假设您使用以下初始化命令:mysqld --initialize

2023-11-17T13:12:22.493220Z 1 [System] [MY-013576] [InnoDB] InnoDB初始化已开始。2023-11-17T13:12:23.244460Z 1 [System] [MY-013577] [InnoDB] InnoDB初始化已完成。2023-11-17T13:12:25.271888Z 6 [Note] [MY-010454] [Server]为root@localhost生成了一个临时密码:cQ<l/vxC0;P!

手动启动MySQL服务器:

// 如果选项文件位于默认位置mysqldor// 如果选项文件位于其他位置mysqld --defaults-file=C:\dbconfig\my\heavy-ram.ini

安装MySQL服务器的Windows服务

有两种方法安装用于运行MySQL服务器的Windows服务。

(安装服务)方法1:使用Windows命令提示符中的“sc”命令。

注意:该服务将在“LocalSystem”权限下运行,非常适合MySQL服务器。

基本语法:

[CMD]sc create <service_name> binPath= "<path_of_mysqld> <path_option_file> <service_name>"start= <boot|system|auto|demand|disabled|delayed-auto>

例子:

[CMD]示例 1:sc create MySQL8.0.35 binPath= "C:\mysql\bin\mysqld.exe MySQL8.0.35" start= auto示例 2:sc create MySQL8 binPath= "C:\mysql\bin\mysqld.exe MySQL8" start= auto示例 3:sc create "MySQL 8" binPath= "C:\mysql\bin\mysqld.exe \"MySQL 8\"" start= auto

在binPath中包含选项文件(my.ini)的路径。

[CMD]// 在一行中执行示例 1:sc create MySQL8 binPath= "C:\mysql\bin\mysqld --defaults-file=C:\mysql\my.ini MySQL8" start= auto示例 2:sc create "MySQL 8" binPath= "\"C:\mysql 8\bin\mysqld\" --defaults-file=\"C:\mysql 8\my.ini\" \"MySQL 8\"" start= auto

注意:以下语法是不正确的:

[CMD]// 不正确的演示:// 等号'='后面必须有一个空格。sc create "MySQL8" binPath="C:\mysql\bin\mysqld.exe MySQL8" start=auto// binPath的末尾必须包含服务名称sc create "MySQL8" binPath= "C:\mysql\bin\mysqld.exe" start= auto// binPath中空格的服务名没有用双引号包起来sc create "MySQL 8" binPath= "C:\mysql\bin\mysqld.exe MySQL 8" start= auto

如果选项文件不在默认位置,您可以手动将路径指定为参数一起使用binPath。以下是一个示例:

// 在单独的行中执行以下命令sc create MySQL8binPath= "\"C:\mysql\bin\mysqld.exe\" --defaults-file=\"C:\dbconfig\my-heavy-ram.ini\" MySQL8"start= auto

首次手动启动服务:

[CMD]net start MySQL8.0.35ornet start MySQL8ornet start "MySQL 8"

停止服务:

[CMD]net stop MySQL8.0.35ornet stop MySQL8ornet stop "MySQL 8"

删除服务:

[CMD]sc delete MySQL8.0.35orsc delete MySQL8orsc delete "MySQL 8"

编辑服务:

[CMD]// 更改binPathsc config MySQL8 binPath= "C:\db-engine\mysql\v8\bin\mysqld MySQL8"// 更改启动类型sc config "MySQL 8" start= auto

(安装服务)方法2:使用MySQL内置的mysqld安装函数:

[CMD]// 安装服务mysqld --install "MySQL8"// 指定选项文件路径mysqld --install "MySQL8" --defaults-file="C:\mysql\my.ini"

将服务的启动模式从“需要/手动”更改为“自动”,然后启动服务:

// 将启动模式从 "手动" 更改为 "自动"sc config "MySQL8" start= auto// 首次手动启动服务net start "MySQL8"// 停止服务net stop "MySQL8"

无需使用Windows服务手动停止MySQL服务器:

[CMD]mysqladmin -u root -p -h localhost --port 3306 shutdown

设置/更改“root”用户的密码。

在CMD中,仍然在“BIN”文件夹中,使用程序“mysql”进入服务器:

[CMD]// 使用默认端口3306mysql -u root -p -h localhost// 如果服务器运行的端口不同,例如4001mysql -u root -p -h localhost --port 4001
  • u : 用户名
  • -p : 提示输入密码
  • -h : 服务器主机位置
  • --port : MySQL服务器的端口号

接下来,MySQL将提示输入密码。如果你使用mysqld --initialize-insecure进行数据初始化,密码将设置为空白。如果使用mysqld --initialize进行初始化,则会生成一个临时的根密码,请查看错误日志文件以获取该密码。

若要设置或更改密码,请执行以下命令:

[CMD/MySQL]alter user 'root'@'localhost' identified by '在这里填写你的密码';

操作完成。MySQL服务器已经准备就绪。祝你使用愉快!


Leave a Reply

Your email address will not be published. Required fields are marked *