我遇到一个超级棘手的难题,由于一个旧web项目需要用到c3p0的数据库操作库,由于本人jdk是1.7版本,mySQL是8.0版本,同时mySQL8.0支持5.x的驱动,在一般的MVC操作并无问题。但是c3p0却提示:
经思考,为保证jar包一致,所有版本的都和旧项目相同,但是mySQL版本可能存在差别,本着用新不用旧的心态我用了8.0的mySQL,但是之前就发现,因为jdk是1.7,我没办法在8.0版本上用上8.0的mySQl驱动,只能用旧的5.x,问题不大,直至现在c3p0无法在8.0的数据库上用旧的驱动,一直提示变量找不到。原因是新版本MYSQL换了变量名字,但是按照上述操作依旧无解。只能更换数据库版本。
同一个关于版本问题的坑踩了两遍,为求高效我要总结目前学习阶段所需要使用的原则:
jdk1.7+mySQL5.7最后一个版本+Navicat
卸载MySQL8.0重装MySQL5.7
那么问题来了,怎么安装mySQL5.7最后一个版本?
官网花里胡哨的英文中挑出一个历史版本的链接:
/archives/community/
5.7最后一个版本不像最新的8.0没有msi安装工具,只是一个压缩文件。
基本操作:/p/a41d45890ab2
值得注意的有,配置环境变量、data和Uploads目录以及手动添加my.ini文件。
以下是根目录下my.ini文件配置信息:
[mysqld]port=3306character_set_server=utf8basedir=//注意这里是zip解压后目录名 如E:\mysql5.7.23datadir=//注意这里是zip解压后data文件夹地址 如E:\mysql5.7.23\dataserver-id=1sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONlower_case_table_names=1innodb_file_per_table = 1log_timestamps=SYSTEMlog-error = error.logslow_query_log = 1slow_query_log_file = slow.loglong_query_time = 5log-bin = binlogbinlog_format = rowexpire_logs_days = 15log_bin_trust_function_creators = 1secure-file-priv=//注意这里是zip解压后Uploads文件夹地址 E:\mysql5.7.23\Uploads[client] default-character-set=utf8
cmd进入解压后的文件夹的bin目录,如D:\mysql-5.7.29-winx64\bin,分四步进行输入
mysqld --initialize-insecure //1.初始化数据库mysqld –install //2.注册服务net start MySQL57 //3.启动MySQL服务mysql -u root -p //4.第一次成功安装后默认无密码登录
一定要注意,my.ini文件内容的路径是否准确,不然会报错:
好巧不巧,第二步意外还是出现了,cmd提示:
server has exist
并没有出现success字样,回到本地服务查看,卸载MySQL8.0后确实残留一个MySQL服务。我明明利用官方的安装工具卸载的,怎么会有残留?是我忘记点选卸载服务了么?
接下来就是删除MySQL这个服务的步骤:
1.定位这个服务的文件夹,删光文件
2.搜索regedit注册表编辑,删掉路径1:\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\MySQL
目录下所有注册表。
3.以管理员身份运行(不然提示SC OpenService 失败5:拒绝访问
),进入cmd输入:
sc delete mysql
4.重启计算机,已经看不到这个MySQL服务了
好了回到上一级步骤,重新进行第二次的注册服务,已经没有问题,新的MySQL服务再次生成,这正是我想要的。
千万不要忘了3.启动MySQL服务,一定要在服务中开启新的MySQL服务,不然提示:
至此,成功进入数据库!
select host,user,plugin,authentication_string from mysql.user; //查询数据库默认用户alter user 'root'@'localhost' identified by 'root' //默认空密码,修改密码,不然Navicat不接受空密码连接
至此,和Navicat连接前期准备成功!
宁愿接受百次看不懂的智商打击,也不想各种工具的版本问题趟坑一两回!