安装MySQL5.7.18遇到的坑

最近才注意到MySQL的各个版本之间差别还挺大的,比如5.5.x版本的timestamp类型列只能有一个设置为default CURRENT_TIMESTAMP的,于是尝试了换成一个新版本是mysql,但是不想动本地原来的数据库,于是想在我的win7系统上安装两个MySQL数据,于是踩了以下好几个坑。
我安装的版本是mysql-5.7.18-winx64解压版,另外网上安装的教程很多,我就不在这里废话了。我参考了一个写的比较详细文档:MySQL安装教程,写的不错,不过这里说的my.ini放在bin下不是很准确,实际上放在和bin同级别的主目录下,当然了这个目录位置是可以配置的。
坑一:运行mysqld直接报msvcr120.dll找不到,解决方式:网上有可以下载https://www.microsoft.com/en-us/download/confirmation.aspx?id=40784,然后在开始->启动运行“regsvr32 msvcr120.dll”完成注册,很多帖子不讲这个,不知道居心何在?
坑二:由于我本地已经安装了MySQL,因此这个新安装的名字服务不能叫mysql,于是我在用mysqld -install安装的时候起名叫:mysql5.7,结果启动的时候发现说“发生系统错误 2。系统找不到文件。”。网上很多人说是因为注册表的原因,老夫查了注册表发现的确注册表的“ImagePath”属性指定的mysqld可执行文件不对,指向了C盘,我的实际上是在D盘,于是乎按照网上的要求修改了,结果不报文件找不到的错误了,但是启动还是失败,更加不幸的是这次啥错误也不报,只是报启动失败,后来我删掉重新搞,最后我仔细比较发现网友安装的时候起的服务名都没有“.”,于是我这次起名叫“mysql7”,果然搞定了,服务启动成功,很显然这是无意中碰到的一个bug,网友说的是一种情况,我遇到的又是更加复杂的一种情况,结论:服务的名称不要加“.”,我觉得最好也不要用其他的特殊符号(这里估计操作系统有要求,没有细查,若干年前遇到一个类似的问题,是因为起的服务名称过长)。
坑三:在使用“Navicat”导入的时候,报“2006 - mysql server has gone away”错误,这次是因为sql_mode设置的不对,这个原因是:MySQL5.7的默认值不兼容的问题。解决办法:在[mysqld]下面添加如下列:“sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
坑四:2006 - mysql server has gone away,这个是因为max_allowed_packet的值太小,解决办法,在[mysqld]下面添加如下列:max_allowed_packet = 256M,这样导入数据的速度也明显提高。
坑五:1265 - Data truncated for column,这是因为倒出的数据列的值不对,比如性别使用的是enum类型的,但是导入的数据值却是空。我这里用Navicat导入psc格式的备份数据,解决办法:使用Navicat备份里的“提取SQL”导出到文本文件中修改下这个列的值即可。

cd bin
mysqld --install mysql
net start mysql

下载MySQL

https://dev.mysql.com/downloads/mysql/5.1.html#downloads

个人机子是64位的,所以选择下载:Windows (x86, 64-bit), ZIP Archive 版本

解压并安装

将下载下载的包解压到指定目录,(本人)解压到:D:\Program Files (x86) 目录下。
因此,MySQL的(安装)包的完整路径为:D:\Program Files (x86)\mysql-5.7.18-winx64

解压后,配置好系统环境变量。
新增系统环境变量:
键名:MYSQL_HOME
值为:D:\Program Files (x86)\mysql-5.7.18-winx64
接着在 Path 中添加:%MYSQL_HOME%\bin

解压后,准备好 my.ini 文件。
注意:(据说)以前版本解压后,在解压目录下都会有 my-default.ini 或 my.ini 文件,不过,v5.7.18 版本中解压后,是没有这些文件的。因此,需要手动创建好 my.ini 文件,文件的具体(完整的)内容如下:
按 Ctrl+C 复制代码

[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
basedir=%MYSQL_HOME%
datadir=%MYSQL_HOME%\data
[WinMySQLAdmin]
%MYSQL_HOME%\bin\mysqld.exe
按 Ctrl+C 复制代码
编辑好 my.ini 文件后,将 my.ini 放在 bin 目录下

以管理员身份打开 cmd 命令窗口,将目录切到MySQL安装包下的bin目录下

安装MySQL数据库,执行如下命令:
mysqld.exe -install
执行命令后,提示:Service successfully installed. 表示安装成功
初始化mysql数据,并创建一个具有空密码的root用户,执行如下命令:
mysqld --initialize-insecure --user=mysql
注意:最后的参数 --user=mysql 在 windows 也可以不用添加,但在 unix 等系统下好像很重要。
执行命令后,等一会后,系统会自动生成相应的 data 目录,并自动创建好空密码的 root 用户。此时表示初始化成功。

启动 mysql 服务,执行如下命令:
net start mysql
执行后,提示:
MySQL服务正在启动..
MySQL服务已经启动成功。
注意:要想登录使用 mysql,服务是必需要先启动的。以后也一样。

在服务启动后,因为刚创建的 root 用户是空密码的,因此,需要先进行密码设定。可执行如下命令:
mysqladmin -u root -p password 此处输入新的密码
Enter password: 此处输入旧的密码
执行完以上两条命令后,只要 Enter password: 后输入的旧密码正确,则 root 用户的新密码就算设定成功了。此后,要想登录 root 用户,则都需要使用新密码。
注意:刚创建的 root 用户是空密码的,因此,在第一次修改 root 用户的密码时,在 Enter password: 后面不需要输入任何密码,直接回车即可。

至此,MySQL v5.7.18 的解压安装就已经全部完成,因此,需要把先前已经启的 MySQL 服务给停止掉,执行如下命令:
net stop mysql
登录并使用MySQL

前面已经完成对MySQL数据库的安装,只要安装成功后,就可以正常登录 root 用户,并进行数据的相关操作,如:建表、增、删、改、查等等。下面是简单的流程:

以管理员身份打开 cmd,并切到 mysql 安装目录的 bin 目录下
net start mysql // 说明:该命令是启动 mysql 服务
mysql -u root -p // 说明:该命令是登录 root 用户
Enter password: 先前设置的 root 用户的密码
正确登录后,就可以对数据进行操作了如:增、删、改、查等等。示例:
mysql> show databases; // 显示所有数据库
mysql> select 语句............
...
不再使用数据库时,要退出用户,并停止服务,执行如下命令:
mysql> quit;
net stop mysql

删除数据库

如果不再想用mysql了,则可以执行如下命令:
mysqld --remove

posted @ 2018-01-24 21:33  comeluder  阅读(742)  评论(0编辑  收藏  举报