同一台电脑安装两台MySQL 2020-03-05 14:59 ### 关于版本 msi后缀的是安装包,根据引导安装即可(自动配置一些东西);zip是解压版(免安装)需要配置环境变量。 ### 准备工作 安装前一定要先将自己电脑上已有的mysql服务停掉,在服务列表,右键mysql,停止。 # 安装过程 ## 1、下载与解压 > 以下基于“电脑上已存在MySQL5版本”,再安装一个MySQL8版本 先去官网下载一个mysql8版本的zip包。(现在需要登录才能下载,原谅我眼瞎,不用登陆,左下角点击“不用了,直接下载”,地址:https://dev.mysql.com/downloads/mysql/ ) 下载后解压到某个盘,我这里解压到D盘  解压后是上图这个样子,此时是没有data文件夹和my.ini配置文件的。 ## 2、安装服务与初始化 ### 添加环境变量 在path中新建环境变量,其实此时两个环境变量的上下顺序是没有影响的。  ### 新增配置文件 你需要在解压后的目录下新建一个文件,并改为my.ini。内容: ```ini [mysqld] # 设置3307端口 port=3307 # 设置mysql的安装目录 basedir=D:\\mysql-8.0.19-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:\\mysql-8.0.19-winx64\\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3307 default-character-set=utf8mb4 ``` 配置文件解释:上述中需要注意的是:①设置Mysql的端口,由于电脑上已存在mysql5版本占用3306端口,所以此台MySQL8就使用3307端口。②设置mysql的安装目录basedir,这里即是你的Mysql解压后的目录;设置MySQL数据库中数据的存放目录datadir,这里只需要在上个目录后面多个data即可。**注意这里都是双斜杠** 然后在解压后的目录下新建data文件夹,注意这里data文件夹里是什么都没有的。  ### 安装服务 **以管理员身份运行cmd**(我的是按win键,输入cmd,然后右键选中点击以管理员身份运行)然后切换到安装目录下的bin目录。 ①:输入`mysqld install mysql8` **安装服务**  【如果输入命令后显示错误:Install/Remove of the Service Denied! 那是因为你不是管理员,只需要以管理员方式打开cmd即可:搜索栏输入cmd然后选中右键管理员方式运行,D 去到盘符,再输入具体路径就进入mysql的bin目录】 【如果输入命令后显示错误: *由于找不到VCRUNTIME140.dllxxxx无法继续执行代码*,重新安装程序可能解决此问题,此问题的解决方案在标题:”**后续**“】 这里`mysqld`是安装命令,后面的mysql8是服务名称。这句话安装了一个名为mysq8的服务(直接mysqld install的话会默认安装名为mysql的服务,可是我们电脑上已有这个服务了【mysql5版本的】)。可以在服务列表查看到已经有了一个Mysql8  这里可能有的同学看其他博客是输入mysqld install mysql8 --default -file "xxxxxxxxx"后面指定配置文件的安装,其实是不用的,因为此时已经在cmd里进入了当前mysql8版本的目录下,所以会默认使用当前的,而不会错误的使用mysql5版本的文件。 ②: 输入`mysqld --initialize` **对data目录初始化**  输入命令后需要等待一段时间,这时你去data目录可以看到已经在慢慢生成文件了,生成完成后是这个样子的:  ③: 启动服务试试:`net start mysql8`  服务启动成功。 至此,所有安装配置已经完成。 ### 查看version 可以使用mysql --version命令测试当前MySQL版本,不过要注意一点的是这里的mysql命令其实是有两个(一个5一个8版本),而默认环境变量中前面的权重要比后面的大,所以当环境变量中5版本的配置在8之上时,使用mysql --version就出现的是5版本信息(我这里安装的比较早,当时好像按错了,但是不知道为啥32版本可以在64版本的机器正常运行。说到这里我想起来第一次安装jdk也是32版本的,不过也可以正常在我64版本的机器运行)   反之则是8的信息(需要重新打开一个cmd输入命令)   这里还不能登录MySQL,因为密码还没有修改。 ## 3、修改密码与使用 ### 修改密码 在日常我们coding时需要切换不同版本的数据库时(MySQL5、MySQL8)只需启动服务,然后使用对应端口连接数据库即可: 例如现在我电脑正在运行MySQL5,我想使用MySQL8,那么我就只需将MySQL8服务开启即可(不必关掉MySQL5服务)  然后在cmd下连接MySQL8(不必是管理员身份)输入`mysql -P3307 -uroot -p`,提示输入密码,我们直接enter,发现密码错误。这是因为MySQL初始化data目录时生成了一个默认密码,我们可以在data下的一个`.err`文件中查看,这个文件名字并不是一定的,是以你的计算机名称命名。例如我的计算机名称为hanxu  那么这个文件名字就叫hanxu.err  打开后我们发现这样一句话: `[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: zsZ;eNxyd1x*` 这个root@localhost:后面的内容`zsZ;eNxyd1x*`就是默认密码,我们使用此密码再次登录,然后修改密码即可。 **然鹅我这里出现了另一个极端情况**,输入密码后显示 `ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)` 这个是mysql服务没有启动的原因,可是我明明启动MySQL8的服务,关掉了MySQL5的服务,一切应该正常啊,,,无奈之下几经波折又找到了另外的解决方案。**先免密登录,再清除掉root密码,然后正常登录,后修改密码**即可,。 MySQL8免密登录:以管理员身份运行cmd,进入bin目录下,输入: `mysqld --console --skip-grant-tables --shared-memory` 之前的版本,输入: `mysqld –skip-grant-tables` 然后再开一个cmd窗口(不必以管理员身份,此时前一个窗口并未结束),输入`mysql -uroot`即可进入,进入之后输入以下命令,删除掉默认密码 ``` use mysql select host,user,authentication_string,plugin from user; //查询可以看到是有密码的 update user set authentication_string = '' where user = 'root'; //将密码置空 ``` 然后**将MySQL8服务重启**,接着再开一个cmd(不必管理员身份),进入MySQL `mysql -P3307 -u root -p`  **必须立即修改密码才能进行其他操作** `alter user 'root'@'localhost' identified by '你的密码';`  至此,所有问题都已解决。 【如果你在上述步骤中出了问题,请参见"**另一个错误**"】 ### 4、5与8的切换 上述已经正常运行了MySQL8,我们现在切换为5版本: ①: 将MySQL5服务开启,是可以两个服务都开启的。  ②: 使用对应的端口连接对应的MySQL 我的电脑直接输入MySQL即可连接5版本(因为默认端口号是3306,所以连接时可以不加-P3306)  连接8版本时只需添加上端口号3307即可  ## 4、其他 ### 后续  下载下面文件,并双击运行安装即可解决,再次打开cmd,输入命令正常运行 链接: https://pan.baidu.com/s/1QfyloUDR9nD1Hq0qgX9Wzw 提取码: r2as 此问题不要和“’由于找不到VCRUNTIME140.dll,无法继续执行代码。”这个问题混淆,二者的不是相同的问题。 ### 另一个错误 如果一切正常请不要修改此值 以下适用于在cmd中登录MySQL时出现错误**Can't connect to MySQL server on 'localhost' (10061)**。 检查你的注册表:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql8 查看一个叫做ImagePath的值,并将其修改为: `"D:\mysql-8.0.19-winx64\bin\mysqld" --defaults-file="D:\mysql-8.0.19-winx64\my.ini" mysql8`,这里的路径和服务名称换成你的】  ------ # 直接看这里 无论已有什么版本的MySQL,或者没有已安装的MySQL,然后要安装什么版本的MySQL,都可以使用下面的方法。 浓缩版: **前置工作:关闭已有的MySQL服务。** - 1、下载MySQL的zip包。 - 2、解压到某个文件夹下,比如解压到D:/mysql5.7-x86文件夹中,然后将bin目录配置到path环境变量。 - 3、在上述文件夹中新建my.ini,并添加以下内容。(如果是MySQL8版本,则需要将所有utf8改为utf8mb4) ```ini [mysqld] port=3306 # mysql安装目录 basedir=D:\\mysql-5.7.29-winx64 datadir=D:\\mysql-5.7.29-winx64\\data max_connections=200 max_connect_errors=10 character-set-server=utf8 default-storage-engine=INNODB default_authentication_plugin=mysql_native_password [mysql] default-character-set=utf8 [client] port=3306 default-character-set=utf8 ``` - 4、新建data空文件夹 - 5、以管理员身份启动cmd,并切换到D:/mysql5.7-x86/bin - 6、输入以下命令 - `mysqld install mysql5`:安装服务并命名为mysql5 - `mysqld --initialize`:初始化data目录(自动添加一些配置信息,这里会在data目录下的一个文件中生成随机密码,文件名为你的计算机名称.err) - `net start mysql5`:启动mysql5服务 - 7、win+r输入regedit打开注册表,打开以下目录`计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql5`,将名为`ImagePath`的值修改为正确的路径: 由于我的电脑已存在MySQL8,所以这里会错误的显示为MySQL8的路径:  将其修改为正确的MySQL5的路径:  - 8、继续刚才的cmd命令行,输入`mysql -uroot -p`然后输入密码(随机密码)即可进入。 - 9、进入后无论你输入什么命令都会让你立即修改密码,按照提示的sql语句修改密码(不同版本修改密码sql语句不同)。 - 10、之后若想cmd方式打开,则输入`mysql -P端口号 -uroot -p`,enter,然后输入密码即可(若你电脑上有多个版本的MySQL,则一定要将对应版本的服务启动【在服务列表启动即可】)。    --END--
发表评论