目录
MySQL 5.7.17 解压版安装配置(Windows)
基础介绍:
MySQL安装配置
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
若下载的是 5.7.18后将没有配置文件,需要下载之前的版本,比如5.7.17,解压后配置文件即可,注意路径存放在根目录下就好,否则路径太多会造成其他问题。
配置方法
以 MySQL 5.7.17 为例
(1)下载压缩包并解压到根目录,如下,
(2)进入解压缩目录,默认是没有 data 这个文件夹的,后面初始化才生成,
(3)修改 my-default.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.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
#############编辑添加如下内容,注意位置必须在 [mysqld] 后####################
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
basedir=D:\MySql5.7.17\mysql-5.7.17-winx64
datadir=D:\MySql5.7.17\mysql-5.7.17-winx64\data
port = 3306
[client]
default-character-set=utf8
########client 端设置字符编码############
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
(4)初始化,安装两个步骤(windows 10 版本的,通过cmd右键以管理员运行,避免打开powershell,当然 powershell也可以运行,视个人喜好)
打开执行以下命令(进入D盘命令,直接按D:,D:\MySql5.7.17>cd mysql-5.7.17-winx64\bin),进入相应目录
D:\MySql5.7.17\mysql-5.7.17-winx64\bin> .\mysqld.exe --initialize #生成data文件夹
D:\MySql5.7.17\mysql-5.7.17-winx64\bin> .\mysqld.exe --install mysql5.7.17 #执行安装服务,可以起名,比如,安装服务名为mysql5.7.17,则打开服务会有mysql5.7.17的服务名称,若不起名,默认为 mysql
D:\MySql5.7.17\mysql-5.7.17-winx64\bin>mysqld --install
**Service successfully installed.**
D:\MySql5.7.17\mysql-5.7.17-winx64\bin>net start mysql
**MySQL 服务正在启动 .
MySQL 服务已经启动成功。**
D:\MySql5.7.17\mysql-5.7.17-winx64\bin>
(5)以上正常情况结果,在打开系统服务时,可见服务已启动
(6)有可能会在启动MySQL时出错,有两种情况,一是配置文件配置错误,之前参照的文档中有配置 my.ini 时如下斜体这段,经查看错误日志发现这个配置造成启动失败,报错如下,删除该配置,重新启动OK。
[WinMySQLadmin]
Server=D:\MySql5.7.17\mysql-5.7.17-winx64\bin\mysqld.exe
PS D:\MySql5.7.17\mysql-5.7.17-winx64\bin> net start mysql5.7.17
mysql5.7.17 服务正在启动 ..
mysql5.7.17 服务无法启动。
服务没有报告任何错误。
请键入 NET HELPMSG 3534 以获得更多的帮助。
PS D:\MySql5.7.17\mysql-5.7.17-winx64\bin>
(7)还有一种情况是数据库未初始化,执行(4)中的初始化命令
(8)若配置错误,又执行了安装 MySQL 后,可以通过 remove 命令删除刚刚安装的服务,比如,我安装的 MySQL 服务名为 mysql5.7.17 ,现在删除该服务,在同样路径下执行删除操作,需要加上服务名,否则无法删除,删除成功才有提示,只执行 mysqld -remove 会直接回车,并没删除OK,此时会发现 服务中原来的MySQL7.7.17 消失。
D:\MySql5.7.17\mysql-5.7.17-winx64\bin>mysqld -remove mysql5.7.17
**Service successfully removed.**
D:\MySql5.7.17\mysql-5.7.17-winx64\bin>
(9)登录测试
注意一开始初始化时我未指定密码,该密码是自动分配的,在哪找呢?
默认控制台刚刚未输出,需要到 data 文件夹的 *.err 日志文件中找
搜索root@localhost,会在后面看到当时的初始密码(冒号后面就是密码)
D:\MySql5.7.17\mysql-5.7.17-winx64\bin>mysql -u root -p
Enter password: ************
(10)修改密码,重启 MySQL 服务生效
mysql> alter user 'root'@'localhost'identified by '123456';
Query OK, 0 rows affected (0.29 sec)
mysql>
以上配置在使用 java 应用程序项目中和 JavaWeb 中均可以。
但是在 Java 项目和 JavaEE 项目之间会有区别,就是安装 Tomcat 时自己创建的 D 盘根目录下一个文件夹名为 Program Files ,中间的空格会造成影响。
这个问题在 Java 应用程序项目中不会有问题,可以增删改查数据库,但是在 JavaEE 项目中,部署项目到 Tomcat 后,启动服务,执行增删改查动作时会报错,提示系统找不到指定路径,可是路径明明是对的,但是这个 Program Files 这中间的空格会显示 %20 ( String中遇到空格就替换为%20 无法编译通过),因为我的路径是通过 String 字符串获取的。
解决办法,在 String 获取的路径后,使用如下方式,替换原来的语句
URLDecoder.decode(strFile,”UTF-8”)
代码块
代码块语法遵循标准markdown代码,例如:
public void getConnection() {
String strFile=this.getClass().getResource("/").getPath();
try {
System.out.println("StrFile :" +URLDecoder.decode(strFile,"UTF-8"));
conn = com.util.DBUtilities.connect(URLDecoder.decode(strFile,"UTF-8") + configFile);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}