[目录]
参考
本文参考了 mysql-8.0 安装教程(自定义配置文件,密码方式已修改)。结合自己的实际操作过程写成。
其他部分
说明
本文的安装过程比较特殊,一些配置因为之前已经安装过一个版本,导致这些配置和平常的不同,因此安装过程中出现了许多问题。
这篇文章是记录这些问题是怎样产生的以及是怎样解决这些问题的,是提供给出现这些安装问题的大哥作为一个参考,并非是一个安装的教程。
因此不建议一开始安装就按照本文中的安装步骤来,这样是容易出问题的。
所以如果是一开始安装 MySql,建议看下面这篇文章,一步到位。
开发环境
| 名称 | 版本 |
|---|---|
| 操作系统 | Windows 10 X64 |
| MySql | 8.0.11 |
1.下载
1.1 安装包
点击 DOWNLOADS-Community (GPL) Downloads »

在页面中找到 MySQL on Windows (Installer & Tools)

页面下方下载安装包

1.2 下载 zip 包
点击底部No thanks, just start my download.即可开始下载

本文以安装 zip 包为例
2.解压zip包到安装目录
我之前有安装过 x86 的 MySql 5.1
安装在
D:\Program Files (x86)\MySQL\MySQL Server 5.1
这次我把 mysql-8.0.11-winx64.zip 解压到 D:\Program Files\mysql-8.0.11-winx64

3.创建配置文件
在解压目录下添加配置文件 my.ini

特别注意这里,如果是首次安装,需要修改为 3306
# 设置3307端口,因为之前安装过 MySql 5.1 已经使用了 3306 端口,这里我设置为 3307 避免冲突port=3307
my.ini 内容如下
[mysqld]# 设置3307端口,因为之前安装过 MySql 5.1 已经使用了 3306 端口,这里我设置为 3307 避免冲突port=3307# 设置mysql的安装目录basedir=D:\Program Files\mysql-8.0.11-winx64# 设置mysql数据库的数据的存放目录datadir=D:\Program Files\mysql-8.0.11-winx64\Data# 允许最大连接数max_connections=200# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为UTF8character-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=3306default-character-set=utf8
查看所有配置项,请参考 https://dev.mysql.com/doc/refman/8.0/en/mysqld-option-tables.html
4.初始化数据库
打开命令行,进入 mysql 安装 bin 目录
D:\Program Files\mysql-8.0.11-winx64\bin
输入命令 mysqld --initialize --console

执行完成后,会打印 root 用户的初始默认密码
上图中的文字如下:
Microsoft Windows [版本 10.0.16299.967](c) 2017 Microsoft Corporation。保留所有权利。C:\windows\system32>D:D:\>cd D:\Program Files\mysql-8.0.11-winx64\binD:\Program Files\mysql-8.0.11-winx64\bin>mysqld --initialize --console2019-04-02T09:52:49.337660Z 0 [System] [MY-013169] [Server] D:\Program Files\mysql-8.0.11-winx64\bin\mysqld.exe (mysqld 8.0.11) initializing of server in progress as process 148362019-04-02T09:53:02.166696Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: YTk-!qghz5d02019-04-02T09:53:09.989487Z 0 [System] [MY-013170] [Server] D:\Program Files\mysql-8.0.11-winx64\bin\mysqld.exe (mysqld 8.0.11) initializing of server has completed
注意!输出结果里面有一段:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: YTk-!qghz5d0
其中 root@localhost: 后面的 YTk-!qghz5d0 就是初始密码。这个密码需要记住。
要是忘记了密码,可以删掉初始化的数据目录 datadir=D:\Program Files\mysql-8.0.11-winx64\Data,再执行一遍初始化命令。
或者参考 https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html
5.安装服务
打开命令行,进入 mysql 安装 bin 目录
D:\Program Files\mysql-8.0.11-winx64\bin
输入命令 mysqld --install [服务名]
后面的服务名可以不写,默认的名字为 mysql
所以我们输入命令 mysqld --install
如果提示 Service successfully installed.,安装成功。

5.1 安装踩坑记
如果在上面已经提示 Service successfully installed.,本部分(5.1)可以不用看了,因为我之前安装了 MySQL Server 5.1 导致这里出现了问题, 下面是踩坑的记录。

D:\Program Files\mysql-8.0.11-winx64\bin>mysqld --installThe service already exists!The current server installed: "D:\Program Files (x86)\MySQL\MySQL Server 5.1\bin\mysqld" --defaults-file="D:\Program Files (x86)\MySQL\MySQL Server 5.1\my.ini" MySQLD:\Program Files\mysql-8.0.11-winx64\bin>
这里提示我们已经存在了这个服务了!
肿么办呢?
上面的提示中我们看到我们安装的是 MySQL Server 5.1,这次我们安装的是 mysql-8.0.11,前面说过,命令的格式是 mysqld --install [服务名],所以我们把安装的命令修改为 mysqld --install mysql8 试试

哈哈,借用云龙兄一句话,真他娘的是个人才
D:\Program Files\mysql-8.0.11-winx64\bin>mysqld --install mysql8Service successfully installed.
所以得到结论,如果你的电脑上需要安装多个MySQL服务,就可以用不同的名字区分了,比如 mysql5 和 mysql8。这个 mysql5 和 mysql8 需要根据版本号来获得。
但是,这样并不能解决问题,之前的 mysql 会对这个 mysql 造成很多影响,给使用带来非常大的不便。所以我们需要把之前的 mysql 卸载掉。
5.1.1 卸载 mysql
1.控制面板里的增加删除程序内进行删除
2.删除之前 mysql 安装目录 D:\Program Files (x86)\MySQL\MySQL Server 5.1
3.开始 -> 运行-> regedit 看看注册表里这几个地方删除没有
(1)HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除
(2)HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录删除
(3)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 目录删除(我卸载的时候没有找到,略过后仍达到完全卸载的目的。)
4.在 cmd 中输入 sc query mysql,查看名为 mysql 的服务

如上图,服务已经存在,所以进行删除操作 sc delete mysql

删除成功,重启电脑
5.1.2 重新安装 mysql
重新进入 mysql bin 目录 D:\Program Files\mysql-8.0.11-winx64\bin,输入 mysqld --install
安装成功

6.启动服务
安装完成之后,就可以通过命令 net start mysql 启动 mysql 服务了。

D:\Program Files\mysql-8.0.11-winx64\bin>mysqld --installService successfully installed.D:\Program Files\mysql-8.0.11-winx64\bin>net start mysqlMySQL 服务正在启动 ..MySQL 服务已经启动成功。D:\Program Files\mysql-8.0.11-winx64\bin>
7.ERROR 2003 (HY000)
7.1 问题描述
在 mysql 安装目录 D:\Program Files\mysql-8.0.11-winx64\bin 下执行命令 mysql -u root -p
提示 ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
又遇到坑了

7.2 解决办法
1.停止 mysql 服务,net stop mysql
2.删除 mysql data 目录 D:\Program Files\mysql-8.0.11-winx64\Data
3.修改 my.ini 文件
之前为了兼容
把 my.ini 文件的端口设置成了
# 设置3307端口,因为之前安装过 MySql 5.1 已经使用了 3306 端口,这里我设置为 3307 避免冲突port=3307
需要修改为
# 设置端口port=3306
my.ini 文件内容如下
[mysqld]# 设置端口port=3306# 设置mysql的安装目录basedir=D:\Program Files\mysql-8.0.11-winx64# 设置mysql数据库的数据的存放目录datadir=D:\Program Files\mysql-8.0.11-winx64\Data# 允许最大连接数max_connections=200# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为UTF8character-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=3306default-character-set=utf8
4.重新初始化数据库
打开命令行,进入 mysql 安装 bin 目录
D:\Program Files\mysql-8.0.11-winx64\bin
输入命令 mysqld --initialize --console
D:\Program Files\mysql-8.0.11-winx64\bin>mysqld --initialize --console2019-04-03T03:19:05.152776Z 0 [System] [MY-013169] [Server] D:\Program Files\mysql-8.0.11-winx64\bin\mysqld.exe (mysqld 8.0.11) initializing of server in progress as process 53802019-04-03T03:19:16.931721Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: #jbdxL4pHquq2019-04-03T03:19:24.813577Z 0 [System] [MY-013170] [Server] D:\Program Files\mysql-8.0.11-winx64\bin\mysqld.exe (mysqld 8.0.11) initializing of server has completed
5.再次启动 mysql 数据库
输入命令 net start mysql
D:\Program Files\mysql-8.0.11-winx64\bin>net start mysqlMySQL 服务正在启动 ..MySQL 服务已经启动成功。
8.进入 mysql 命令模式
在 mysql 安装目录 D:\Program Files\mysql-8.0.11-winx64\bin 下执行命令 mysql -u root -p
D:\Program Files\mysql-8.0.11-winx64\bin>mysql -u root -pEnter password: ************
输入密码:#jbdxL4pHquq

D:\Program Files\mysql-8.0.11-winx64\bin>mysql -u root -pEnter password: ************Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 8Server version: 8.0.11Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
9.更改密码和密码认证插件
在 mysql8.0.4 以前,密码认证插件是mysql_native_password,而现在使用的是caching_sha2_password
因为当前有很多数据库工具和链接包都不支持caching_sha2_password,为了方便,我暂时还是改回了mysql_native_password 认证插件。
进入 mysql 命令模式中执行命令(这个命令修改了插件,同时修改了密码):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1213abc!';
其中 1213abc! 就是我设置的新密码。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1213abc!';Query OK, 0 rows affected (0.06 sec)mysql>

如果想默认使用 mysql_native_password 插件认证,可以在配置文件中(D:\Program Files\mysql-8.0.11-winx64\my.ini)配置 default_authentication_plugin项。
[mysqld]default_authentication_plugin=mysql_native_password
到此,安装部署就完成了。
10.使用工具连接 mysql
输入连接名称,密码


连接成功

也可以使用其它工具,如 SQLyog