2.3.5 使用非安装版的 Zip 档案文件在 windows 上安装 MySQL
原文详情参看 :Installing MySQL on Microsoft Windows Using a noinstall Zip Archive
安装过程如下 :
① 提取主档案文件到指定的安装目录
可选:如果你打算执行MySQL的 benchmark 和 测试组件 也可以提取 debug-test 档案文件
② 创建一个选项文件
③ 选择 MySQL 的 服务类型
④ 初始化 MySQL
⑤ 启动 MySQL 服务
⑥ 获得默认的用户账户
2.3.5.1 提取主档案文件到指定的安装目录(即 下载非安装档文件)
1.如果是更新 MySQL ,参看: Section 2.3.8, “Upgrading MySQL on Windows”
2.保证以管理员的身份登入
3.选择一个安装位置
4.提取安装文档文件 : MySQL 官网 → Downloads → Community → MySQL Community Server → 选择合适的 版本即可 。
2.3.5.2 创建一个选项文件(即 自定义配置文件)
当你启动服务的时候如果需要指定启动选项,你可以 在命令行指定他们 或者 把他们放在一个选项文件中 。可以发现使用一个选项文件更方便。
当 MySQL 服务启动 时, 会在几个位置,例如 windows 目录的 C:\ 和 MySQL的安装目录(更多的位置,参看Section 5.2.6, “Using Option Files”)寻找选项文件 。MySQL 会在每个位置首先寻找 my.ini 文件 ,然户再寻找 my.cnf 文件,最好只使用一种文件。
你可以充分利用 包含在 MySQL 安装版本中包含的 样例 选项文件 。可参看 Section 6.1.2, “Server Configuration Defaults”.
★ 例如我的免安装的版本中自带的 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 = .....
# 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
指定 basedir 和 datadir 的值 ,使用斜线 而不是 反斜线,如果使用反斜线,需要两条反斜线。
[mysqld]
# mysql 安装路径
basedir=E:/develop/mysql-5.7.14-winx64
# data 目录的位置
datadir=E:/develop/mysql-5.7.14-winx64/data
反斜线
[mysqld]
# mysql 安装路径
basedir=E:\\develop\\mysql-5.7.14-winx64
# data 目录的位置
datadir=E:\\develop\\mysql-5.7.14-winx64\\data
★ 自定义配置文件 my.ini ,防止中文乱码
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=E:\develop\mysql-5.7.14-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\develop\mysql-5.7.14-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
default-character-set=utf8
要先关闭 mysql 服务然后修改配置,再重新开启服务,如果服务无法启动可能是因为配置有问题,需要修改 .修改完成后,使用如下命令查看编码是否都正常修改
show variables like 'character%';
显示如下结果则ok
+--------------------------+------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | E:\develop\mysql-5.7.14-winx64\share\charsets\ |
+--------------------------+------------------------------------------------+
show variables like 'collation%';
显示如下结果则修改正常
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
MySQL 5.7.6 的 ZIP 档案文件不再包含 data 目录 ,这时候就需要创建 data 目录,导入 MySQL 系统数据库中的表 来初始化 MySQL 安装 。
在 MySQL 的 bin 目录下通过以下 cmd 命令 初始化 (区别在于前者会随机初始化密码 ,而后者密码为空):
mysqld --initialize
mysqld --initialize-insecure
执行完成便会自动生成 data 目录 。(详细参看: Section 2.10.1.1, “Initializing the Data Directory Manually Using mysqld”.)
初始化 data 目录之后,安装 mysql 服务(以管理员的身份运行 dos)
mysqld --install
开启 mysql 服务
net start mysql
关闭 mysql 服务
net stop mysql
连接到 mysql 服务(bin 目录下)
mysql -u root -p
输入密码
★ 若使用的是 mysqld --initialize-insecure 初始化的 data 目录 ,则密码为空,直接回车键即可登入,或者使用如下命令直接登入
mysql -u root --skip-password
★ 若使用的是 mysqld --initialize 初始化的 data 目录 ,则需要输入 随机生成的初始化密码 (可以在 log 中查找初始化密码)。
如果未找到初始密码,也可以使用以下方法进行密码重置 : windows下Mysql5.7.11修改初始密码
当然也可以删除 data 目录,重新使用 mysqld --initialize-insecure 生成初始密码为空的 root账户。
连接 mysql 之后 ,修改 root 初始密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
i.e : 修改 root 用户 密码为 root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
flush privileges;
2.3.5.3
2.3.5.4 初始化 MySQL
见 2.3.5.2 。
2.3.5.5 启动 MySQL 服务(在bin 目录下)
启动命令 :
mysqld
然后打开另一个 cmd 窗口 进行登陆操作即可。
停止 Mysql 服务
mysqladmin -u root -p shutdown
然后输入密码即可 。
把 Mysql 服务 作为 window 服务 安装
mysqld --install
移除在 windows 中的服务
mysqld --remove
2.3.5.6 获取默认用户
见 2.3.5.2
另 : Connector/J API 从 5.1 到 6.0 的 变化 ,参看官网: Changes in the Connector/J API
以前 连接 mysql 需要使用反射加载 mysql驱动类,如下是往常的连接设置:
老的连接方法:
@Test
public void mysqlConnection() {
Connection connection = null;
PreparedStatement statement = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xlch", "root", "root");//参数分别代表 url 、userName 、password
statement = connection.prepareStatement("select * from user where id = ?");
statement.setInt(1, 1);//动态设置 id 为 1,index 为 1(起始为1)
ResultSet set = statement.executeQuery();
while (set.next()) {
System.out.println("id===" + set.getInt("id") + " name===" + set.getString(2));//可以通过 index 或者 labelName 获取
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
如果使用新版本的 mysql jar 包还使用如上的方法连接,则会有 2 个警告 和 1 个 异常:
① com.mysql.jdbc.Driver driverClass 已经过时的警告,推荐使用新的com.mysql.cj.jdbc.Driver ,而且现在 驱动可以自动注册,不再需要手动加载驱动。
② MySQL 5.5.45+, 5.6.26+ and 5.7.6+ 关于 SSL 的警告 。
③ 服务器时区的 异常
综上,新版的 mysql 连接应如下配置:
@Test
public void mysqlConnection() {
Connection connection = null;
PreparedStatement statement = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // 可省略
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xlch?serverTimezone=UTC&useSSL=false", "root", "root");//参数分别代表 url 、userName 、password
statement = connection.prepareStatement("select * from user where id = ?");
statement.setInt(1, 1);//动态设置 id 为 1,index 为 1(起始为1)
ResultSet set = statement.executeQuery();
while (set.next()) {
System.out.println("id===" + set.getInt("id") + " name===" + set.getString(2));//可以通过 index 或者 labelName 获取
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}