服务器上已经有了MYSQL5.X,但因为需要还需要再安装一个MYSQL8,查了一下大概的意思就是 只要服务名和端口别重复就可以同时共存。
所以我们只需要再去服务器上装一个MYSQL8就可以让服务器同时兼容多个版本的MYSQL,顺便重新整理一下MYSQL8的安装过程:
方法还是一样,首先把MYSQL8和系统对应的操作版本压缩包拷备在需要安装的机器上面,并解压,重命名文件夹为mysql8 。
之前说的是要先配置环境变量 和 新建 data文件夹,后来发现高版本的mysql安装不需要data文件夹,如果创建了反而它会不成功,今天先试一下环境变量都不给,直接操作的方式。
my.ini还是必须要有的,所以先建一个my.ini
mysql.ini文件的内容如下
[mysqld]
# 设置3306端口
port=3307
# 设置mysql的安装目录
basedir=D:SOFT_PHP_PACKAGEmysql8
# 设置mysql数据库的数据的存放目录
datadir=D:SOFT_PHP_PACKAGEmysql8data
# 允许最大连接数
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字符编码要求使用 utf8mb4 ,要不然在初始化的时候会报一个警告。在这个配置文件里面把端口号改为 3307
使用管理员模式启动命令行工具,使用初始化命令进行初始化 。。一定要使用管理员模式启动【本来一开始是没配置环境变量的,但由于出错次数太多,后来配置了,所以也不知道是环境变量是否影响运行。】
CMD 路径 C:WindowsSystem32
把目录定位到mysql8的BIN目录里面
接下来正常方式应该是 运行命令 mysqld --initialize --console 来安装服务,,但因为我们是多版本安装,所以这儿要改一下把实例名称加上。
网上搜索的方法
1 mysqld install mysql2 --default-file="D:Program Filemysql-8.0.15-winx64my.ini"
2
可以发现 它们都是在 install后面跟了实例名,然后又跟了my.ini的路径,但都没有加后面的 --console 我们来实际试一下。
我使用的方法为:mysqld --initialize mysql8 --default-file="路径my.ini"
运行后
并没有提示 安装成功 但我发现它自已创建了data目录,去服务里面看了一下,并没有创建mysql8的服务实例名称【因为这个命令只负责初始化MYSQL】。
还是因为出错太多,一气瞎整之后成功了,一激动就把所有窗口都关了,所以下面无截图,靠着记忆把流程写一下吧。
还是在BIN目录的 CMD下面运行。
mysqld --initiailize --user=mysql --console
或者
mysqld --defaults-file=你的目录mysql8my.ini --initialize --console 初始化
这回加了 --console 初始化成功,但不记得用的是这两个哪个命 令了,应该都可以,这个时候可以不用加实例名称。
运行了这个命令之后会在目录中生成data 文件夹,这个时候是不会创建服务的,只是初始化了MYSQL实例。
初始化的时候会给一个临时密码,需要记下来,等会儿修改密码的时候用。
初始化了之后可以安装服务(安装了服务之后,在注册表和服务里面就会出现相应的服务项)
mysqld -install mysql8 (可能最后是用的这个,但注册表里面会添加ini文件的路径,所以下面那个也有可能,因为之前执行了很多回,注册表里早就有路径了。所以最后用这个就成了。)
或者
mysqld install mysql8 --default-file="你的目录mysql8my.ini"
反正这一步执行是安装服务用的,,执行了命令之后在服务里面会出现 mysql8的服务项
然后去注册表看一眼:HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> services ->
找到你新建的实例 mysql8 看一下 ImagePath参数 ,总之最后 ImagePath参数为:你的目录mysql8inmysqld --defaults-file="你的目录mysql8my.ini" mysql8 这种格式就对了。这个就相当于指定了服务使用哪个配置文件。
这时候就可以 合用 net start mysql8 来启动你的服务了。
启动服务的时候也有很多问题,我碰到的一开始是 服务一启动就关闭,可能是因为ini文件哪儿写的不合适,后来把INI文件改了之后就启动成功了。
启动之后,需要先把密码修改掉。
mysql –uroot –P3307 –p 因为使用了3307端口,所以需要在这儿加上端口,我怀疑最早之前我就安装成功了,只是这一步的时候没有加端口,所以导致最后又重装了N次。
这时候会让你输入密码,把之前初始化的时候那个密码输进来就可以了。
要是密码没记得怎么办?
可以停掉 mysql8服务 再把目录中的data文件删除掉,重新mysqld --initiailize --user=mysql --console 初始化一下 ,再记住密码就好了。这个初始化可以执行多次。只要没有data文件夹就可以跑起来。
输入密码之后就进到mysql控制台了 你的 CMD里面会显示为
mysql>
这样的。
这时候 先改一下密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
这步没什么可说的,直接提示修改成功。
然后 用命令 show global variables like 'port'; 查看一下端口。发现用的是3307 说明已经成功了。
用 Navicat Premium 新建了一个链接。端口写 3307 输用户名密码测试链接成功。。
不放心又写了一个链接程序试了一下。
$serve = 'localhost:3307'; //mysql地址
$username = 'root'; //mysql用户名
$password = '密码'; //mysql密码
$dbname = '数据库名'; //mysql数据库名称
@$mysqli = new Mysqli($serve,$username,$password,$dbname); //连接mysql
if($mysqli->connect_error){//连接mysql
die('connect error:'.$mysqli->connect_errno);
}
$mysqli->set_charset('UTF-8'); //设置数据库字符集
连接成功,可以跑。。
至此 WINDOWS服务器同时安装多个版本的MYSQL 并且是兼容 MYSQL8的方式算是完美解决了。服务中上可以同时跑两个版本MYSQL。。。折腾一天,测试无数次。总算成功了。谢天谢地,谢百度大神们。