在实际开发中,一些低版本数据库,不支持一些特殊的sql语句,因此高版本数据库数据导入低版本的时候就会出问题,因此,在一些特殊情况下,低版本数据库不能动,高版本mysql数据又无法导入低版本mysql,我们不得不在同一台机器上安装两个版本mysql.

低版本mysql不支持的sql语句举例,比如下面的这个:

CREATE TABLE `sche_task` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `message` VARCHAR(50) NOT NULL,
  `task_excute_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

在5.5.28 版本的mysql上执行上面语句会报错

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql

 而在5.7.17版本的mysql就支持双时间戳timestamp.可以正常执行上述sql语句

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_数据库_02

 第一步:先停止之前安装的低版本mysql服务:

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql_03

第二步:将下载好的mysql-5.7.17-winx64.zip解压

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_数据库_04

 第三步:解压完成之后,进入该文件夹,然后打开my-default.ini,进行修改端口号,端口号改为3307,basedir和datadir也要重新配一下

[client]
port=3307
mysql]
no-beep
[mysqld]
port = 3307
basedir=C:\mysql-5.7.17-winx64
datadir=C:\mysql-5.7.17-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
explicit_defaults_for_timestamp=true

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_初始化_05

四 开始执行安装和添加服务的步骤:

1.以管理员身份去运行命令行窗口

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql_06

2.进入mysql5.7.17的bin目录下

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_初始化_07

3. 安装mysql服务,指定该mysql服务名为mysql2,并根据my-default.ini文件进行安装,命令如下:

C:\mysql-5.7.17-winx64\bin>mysqld install mysql2
 
成功安装后会提示:
Service successfully installed.

去服务里面,可查看到此时多了一个mysql2服务

 

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql_08

五 初始化数据库

mysql服务安装成功后,就需要初始化数据库了,否则是无法启动服务的。

在bin目录下执行如下命令

C:\mysql-5.7.17-winx64\bin>mysqld --initialize-insecure (不设置root密码,建议使用)

初始化成功后,命令行没有任何提示。但在mysql5.7.17文件夹中已自动生成了data目录

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_数据库_09

六 打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql2,修改ImagePath参数,更正mysql2服务相关路径。

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql_10


七 启动数据库,修改密码

使用net start mysql2 命令启动mysql2服务

C:\WINDOWS\system32>net start mysql2
mysql2 服务正在启动 .
mysql2 服务已经启动成功。

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql_11

使用默认密码进行登录(注意:P 端口,p 密码)

输入“mysql或者mysql -hlocalhost -uroot -p”一回车 密码默认没有 直接回车就行 显示如下: 

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 84
Server version: 5.7.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

修改密码

mysql> set password for root@localhost=password('123456');

成功以后 Query OK, 0 rows affected, 1 warning (0.00 sec)

使用 quit 退出,使用新密码登录。

mysql低版本是不是不支持for share的写法 高版本mysql能兼容低版本吗_mysql_12

完成!!!

 

 

在这里需要注意的几点:

① :  你在看网上的教程配置完my.ini(自己的mysql配置文件)后不能自己创建一个data文件夹。

好多人,包括楼主也是,配置完datadir属性后觉得这个存储数据的文件夹路径没有呀,自己动手建一个呗。错就错在这里,
不能动手建,你自己动手建的data文件夹里怎么可能有mysql启动所需要的表结构配置文件呢?

② :在使用net start msql的时候提示“服务报告没有任何错误”。

安装完mysql服务后迫不及待的开启mysql服务,在mysql5.7以上版本中默认没有一个data目录,即没有初始化服务。需要先初始化mysql才可以启动服务,
否则会报 “服务没有报告任何错误”,启动失败呗。

正确的步骤是:先在mysql的bin目录下执行mysqld  --initialize-insecure (不设置root密码,建议使用)命令,第一次执行这个命令会等待的时间稍微长了一些,
并且控制台没有任何返回结果。可以看到mysql的根目录下会多出一个data文件夹,里面一堆文件。

③ :没有先执行mysqld  --initialize-insecure (不设置root密码,建议使用),而是先执行net start mysql了,启动失败,mysql会自动创建一个data文件夹,并在里面初始化一些文件,在再次执行mysqld - initialize的时候并没有把data文件夹删除。

此时的解决方案是:删除data文件夹,然后执行mysqld - initializemysqld  --initialize-insecure (不设置root密码,建议使用),再启动mysql。