背景:
由于之前一个项目中用的数据库版本是免安装的mysql5.5.36,但是后来经过第三方测试公司测试出该数据库存在很多漏洞需要升级数据库才能解决。所以觉得将数据库更换为mysql-5.7.21-winx64版本的,由于该项目数据量不是很大并且数据库版本跨度比较大,所以采取了“先卸载,再安装”的方式来进行对数据的升级、改造。
环境:
操作系统:server 2012 64bit
数据库:主从设置
步骤:
一、卸载原有的Mysql数据库
1. 删除注册表
(1)HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
(2)HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL【不一定有】
(3)HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL【不一定有】
2. 删除服务
(1) 用管理员身份启动cmd,执行sc delete mysql服务名称
3. 最后将目录下原来的数据库文件删除即可
二、安装数据库:
1.将新的数据库放到原来数据库的目录下。与mysql 5.6不同的是5.7版本中没有data文件夹和my.ini文件。所以需要在mysql-5.7.22-winx64目录下创建data文件夹以及my.ini文件。其中my.ini文件中内容为:
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306
# 设置mysql的安装目录 basedir=E:/seegot/mysql-5.7.22-winx64 # 设置mysql数据库的数据的存放目录 datadir=E:/seegot/mysql-5.7.22-winx64/data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
2.以管理员身份运行cmd,将目录切换到mysql安装文件夹下的bin目录下执行 mysqld install
3.bin目录下,输入 mysqld --initialize --user=root --console 下图红色下划线为root用户的密码(注意:这里的密码通过复制来进行登录,自己输入可能会疯掉。。。别问我怎么知道的)
4.重启mysql服务。在bin目录下,mysql -uroot -p,输入初始化root密码登录。然后通过 set password=password('root') 修改密码
5.导入之前的数据库。
6.修改数据库为远程可以登录,这个就不需要介绍了吧。(mysql ---user --localhost-->% 重启数据库服务)
7.最蛋疼的问题在导入数据库的时候报错了。。。 新版数据库有一个坑,这个坑就是*****group by***full***什么鬼的,
两种解决办法:(1)select @@sql_mode ;查询出的结果为
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重点就出现在这个ONLY_FULL_GROUP_BY 我们要做的就是删除它。
set @@sql_mode =‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘;
上面这个改变的是全局的,也就是以后新创建的数据库不存在这个问题,那么我们还需要修改已经存在的数据库的这个问题,所以就用到了
set sql_mode =‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘;
最后,如果这几种方式实在不行,那么试一试在mysql数据库文件目录下的my.ini
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
由于我的数据库是需要开启定时任务的,所以我们要检查下数据库是否开启了定时任务。
-- 检查是否开启定时任务 SELECT @@event_scheduler; SHOW VARIABLES LIKE 'event%'; -- 如果未开启,那么进行开启 set GLOBAL event_scheduler = 1; SET GLOBAL event_scheduler = ON;
或者直接在my.ini的mysqld后面加上event_scheduler=ON 即可。
完成以上操作后,我们再将数据库配置为主从库即可。配置主从数据库请参考之前的博客。