最近重装Windows 10系统后准备升级软件版本,发现MySQL新版本为5.7.10,于是按照以前的操作方式安装(①解压ZIP;②安装Windows服务;③启动MySQL服务;③修改root默认空密码),然后先后发现了启动失败、修改密码失败等问题,遂整理以下操作以分享。
问题:启动失败,MySQL 服务无法启动、服务没有报告任何错误。
原因:MySQL 5.7.6 changelog:废弃了mysql_install_db,使用mysqld –initialize (formerly known as “mysqld –bootstrap,” now deprecated.)替代。
总结:MySQL将需要使用命令–initialize初始data,具体请看"操作步骤"。
问题:修改密码失败,Access denied for user 'root'@'localhost' (usering password: NO)。
原因:MySQL 5.7.4 changelog:可以跳过 -skip-random-password 选项来默认生成随机密码。
MySQL 5.7.5 changelog:还是默认生成随机密码,但是选项修改为 –insecure。
总结:MySQL升级日中"提升MySQL安全性"将抛弃空""密码初始方式,通过命令–initialize初始data并生成随机密码。
二、操作步骤:
1.解压至目录D:\Program Files\MySQL\mysql-5.7.10(个人习惯"标准"目录)
2.复制文件my-default.ini重命名新文件my.ini,新文件my.ini粘贴以下内容:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysql]
# 设置客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置端口号
# port=3306
# 设置安装目录
# basedir=D:\Program Files\MySQL\mysql-5.7.10
# 设置数据目录
# datadir=D:\Program Files\MySQL\mysql-5.7.10\data
# 允许最大连接数
# 即使连接数达到最大限制也会预留一个连接给管理员使用,如果设置太小可能会出现"Too many connections"错误
max_connections=200
# 服务端字符集,默认为8比特编码的latin1字符集
character_set_server=utf8
# 默认存储引擎,创建新表时使用
default_storage_engine=INNODB
# 当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接。
# 对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。
max_allowed_packet=64M
# SQL模式
# NO_BACKSLASH_ESCAPES
# 禁用反斜线字符(‘')做为字符串内的退出字符。启用该模式,反斜线则成为普通字符。
# NO_DIR_IN_CREATE
# 创建表时,忽视所有INDEX DIRECTORY和DATA DIRECTORY指令。该选项对从复制服务器有用。
# NO_ENGINE_SUBSTITUTION
# 如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎。
# NO_FIELD_OPTIONS
# 不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。该模式在可移植模式(portability mode)下用于mysqldump。
# NO_KEY_OPTIONS
# 不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。该模式在可移植模式(portability mode)下用于mysqldump。
# NO_TABLE_OPTIONS
# 不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。该模式在可移植模式(portability mode)下用于mysqldump。
# NO_UNSIGNED_SUBTRACTION
# 在减运算中,如果某个操作数没有符号,不要将结果标记为UNSIGNED。请注意这样使UNSIGNED BIGINT不能100%用于上下文中。
# NO_ZERO_DATE
# 在严格模式,不要将 ‘0000-00-00′做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。
# NO_ZERO_IN_DATE
# 在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00′。在非严格模式,可以接受该日期,但会生成警告。
# ONLY_FULL_GROUP_BY
# 不要让GROUP BY部分中的查询指向未选择的列。
# PIPES_AS_CONCAT
# 将||视为字符串连接操作符(+)(同CONCAT()),而不视为OR。
# REAL_AS_FLOAT
# 将REAL视为FLOAT的同义词,而不是DOUBLE的同义词。
# STRICT_TRANS_TABLES
# 为所有存储引擎启用严格模式。非法数据值被拒绝。后面有详细说明。
# STRICT_TRANS_TABLES
# 为事务存储引擎启用严格模式,也可能为非事务存储引擎启用严格模式。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3.DOS进入目录bin执行命令(添加Windows服务):mysqld --install。
移除Windows服务命令(必须时使用):mysqld --remove。
4.继续执行命令(初始化MySQL"data"并获得初始密码):mysqld --initialize --console。
注意:必须记录该初始密码,以备修改密码。
5.继续执行命令(启动MySQL服务):net start mysql。
6.继续执行命令(修改MySQL默认密码为"root"):mysqladmin -u "root" -p password "root"。
注:此处需输入"步骤4"得到的初始密码。
7.完成。
三、升级程序:
如有好的建议或成功案例请留言,谢谢!