六、 MySQL
Windows 下使用多版本 MySQL 共存的方式
1. 目录结构
安装目录如下:
├─ C:\mysql ==================================================== [MySQL 安装根目录]
| ├─ my -------------------------------------------- 配置基目录
| | ├─ my-55.ini -------------- 配置文件
| | ├─ my-56.ini -------------- 配置文件
| | ├─ my-57.ini -------------- 配置文件
| | ├─ my-80.ini -------------- 配置文件
| | ├─ init-80.sql ------------ 初始化sql
| | ├─ my-84.ini -------------- 配置文件
| | ├─ init-84.sql ------------ 初始化sql
| | └─ ...
| |
| ├─ temp ------------------------------------------ 临时文件基目录
| | ├─ mysql-55.pid ----------- pid 文件
| | ├─ mysql-56.pid ----------- pid 文件
| | ├─ mysql-57.pid ----------- pid 文件
| | ├─ mysql-80.pid ----------- pid 文件
| | ├─ mysql-84.pid ----------- pid 文件
| | └─ ...
| |
| ├─ logs ------------------------------------------ 日志基目录
| | ├─ 55 -------------------- mysql5.5日志目录
| | | ├─ error.log
| | | ├─ binlog.index
| | | ├─ binlog.000001
| | | └─ ...
| | |
| | ├─ 56 -------------------- mysql5.6日志目录
| | | ├─ 同 56
| | | └─ ...
| | |
| | ├─ 57 -------------------- mysql5.7日志目录
| | | ├─ 同 56
| | | └─ ...
| | |
| | ├─ 80 -------------------- mysql8.0日志目录
| | | ├─ 同 56
| | | └─ ...
| | |
| | ├─ 84 -------------------- mysql8.4日志目录
| | | ├─ 同 56
| | | └─ ...
| | |
| | └─ ...
| |
| ├─ product ------------------------------------------ 产品源码基目录
| | ├─ 55 -------------------- mysql-5.5.62-winx64 [终版]
| | | ├─ data-source.7z --- 原始数据
| | | ├─ data.7z ---------- root@'127.0.0.1'密码为1
| | | └─ ...
| | |
| | ├─ 56 -------------------- mysql-5.6.51-winx64 [终版]
| | | ├─ data-source.7z --- 原始数据
| | | ├─ data.7z ---------- root@'127.0.0.1'密码为1
| | | └─ ...
| | |
| | ├─ 57 -------------------- mysql-5.7.44-winx64 [终版]
| | | ├─ data.7z ---------- root@'127.0.0.1'密码为1
| | | └─ ...
| | |
| | ├─ 80 -------------------- mysql-8.0.42-winx64
| | | ├─ data.7z ---------- root@'127.0.0.1'密码为1
| | | └─ ...
| | |
| | ├─ 84 -------------------- mysql-8.4.6-winx64
| | | ├─ data.7z ---------- root@'127.0.0.1'密码为1
| | | └─ ...
| | |
| | └─ ...
| |
| └─
└─2. 初始化数据库
Windows 版的 MySQL 在 5.7 之前未提供数据初始化的能力,但提供了初始 data 目录,建议将 data 目录备份后再使用,默认情况下 root 账户密码为空,需要自己设置。
MySQL >= 5.7 版本支持数据初始化,具体操作如下:
ps1
C:
cd C:\mysql\product\57
.\bin\mysqld.exe --defaults-file="C:\mysql\my\my-57.ini" --initialize-insecure --consoleps1
C:
cd C:\mysql\product\80
.\bin\mysqld.exe --defaults-file="C:\mysql\my\my-80.ini" --initialize-insecure --consoleps1
C:
cd C:\mysql\product\84
.\bin\mysqld.exe --defaults-file="C:\mysql\my\my-84.ini" --initialize-insecure --console| 初始化指令 | 区别 |
|---|---|
--initialize | 为 root 用户生成一个随机的临时密码,密码将被标记为过期,需要修改新的密码 |
--initialize-insecure | 不生成 root 密码,root 账户初始密码为空, 使用 --skip-password 直接登录 |
初始化时注意事项:
datadir父级目录必须存在datadir必须为空或者不存在
MySQL 配置案例:
ini
[client]
port = 10055
plugin-dir = C:\\mysql\\product\\55\\lib\\plugin
[mysqld]
port = 10055
basedir = C:\\mysql\\product\\55
datadir = C:\\mysql\\product\\55\\data
pid_file = C:\\mysql\\temp\\mysql-55.pid
log_error = C:\\mysql\\logs\\55\\error.log
log_bin = C:\\mysql\\logs\\55\\binlog
log_bin_index = C:\\mysql\\logs\\55\\binlog.index
binlog_format = ROW
expire_logs_days = 30
server_id = 1
bind_address = 0.0.0.0
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
# 默认存储引擎
default-storage-engine = InnoDB
# 启用事件调度器 [>=8.0默认启用]
event_scheduler = ON
# MySQL 不进行主机名解析,直接使用客户端的 IP 地址,以提高性能
skip_name_resolve = ON
# 部署环境建议关闭,开发环境建议开启,这样用户无需具备 SUPER 特权也可以创建存储函数
log_bin_trust_function_creators = 0
# 服务器和客户端之间通信时,单个数据包的最大尺寸
max_allowed_packet = 100M
# 调整最大连接数:根据应用需求调整
max_connections = 200
# 启用慢查询日志:帮助识别性能问题
# slow_query_log = 1
# slow_query_log_file = C:\\mysql\\logs\\55\\slowqueries.log
# long_query_time = 2ini
[client]
port = 10056
plugin-dir = C:\\mysql\\product\\56\\lib\\plugin
[mysqld]
port = 10056
basedir = C:\\mysql\\product\\56
datadir = C:\\mysql\\product\\56\\data
pid_file = C:\\mysql\\temp\\mysql-56.pid
log_error = C:\\mysql\\logs\\56\\error.log
log_bin = C:\\mysql\\logs\\56\\binlog
log_bin_index = C:\\mysql\\logs\\56\\binlog.index
binlog_format = ROW
expire_logs_days = 30
server_id = 1
bind_address = 0.0.0.0
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
# 启用事件调度器
event_scheduler = ON
# MySQL 不进行主机名解析,直接使用客户端的 IP 地址,以提高性能
skip_name_resolve = ON
# 部署环境建议关闭,开发环境建议开启,这样用户无需具备 SUPER 特权也可以创建存储函数
log_bin_trust_function_creators = 0
# 服务器和客户端之间通信时,单个数据包的最大尺寸
max_allowed_packet = 100M
# 调整最大连接数:根据应用需求调整
max_connections = 200
# 启用慢查询日志:帮助识别性能问题
# slow_query_log = 1
# slow_query_log_file = C:\\mysql\\logs\\56\\slowqueries.log
# long_query_time = 2ini
[client]
port = 10057
plugin-dir = C:\\mysql\\product\\57\\lib\\plugin
[mysqld]
port = 10057
basedir = C:\\mysql\\product\\57
datadir = C:\\mysql\\product\\57\\data
pid_file = C:\\mysql\\temp\\mysql-57.pid
log_error = C:\\mysql\\logs\\57\\error.log
log_bin = C:\\mysql\\logs\\57\\binlog
log_bin_index = C:\\mysql\\logs\\57\\binlog.index
binlog_format = ROW
expire_logs_days = 30
server_id = 1
bind_address = 0.0.0.0
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
# 5.7缺省值为OFF,8.0以后缺省值为ON
explicit_defaults_for_timestamp = ON
# 启用事件调度器
event_scheduler = ON
# MySQL 不进行主机名解析,直接使用客户端的 IP 地址,以提高性能
skip_name_resolve = ON
# 部署环境建议关闭,开发环境建议开启,这样用户无需具备 SUPER 特权也可以创建存储函数
log_bin_trust_function_creators = OFF
# 服务器和客户端之间通信时,单个数据包的最大尺寸
max_allowed_packet = 100M
# 调整最大连接数:根据应用需求调整
max_connections = 200
# 启用慢查询日志:帮助识别性能问题
# slow_query_log = 1
# slow_query_log_file = C:\\mysql\\logs\\57\\slowqueries.log
# long_query_time = 2ini
[client]
port = 10080
plugin-dir = C:\\mysql\\product\\80\\lib\\plugin
[mysqld]
port = 10080
datadir = C:\\mysql\\product\\80\\data
pid_file = C:\\mysql\\temp\\mysql-80.pid
log_error = C:\\mysql\\logs\\80\\error.log
log_bin = C:\\mysql\\logs\\80\\binlog
log_bin_index = C:\\mysql\\logs\\80\\binlog.index
# 对于MySQL基于行的复制,此变量确定如何将行映像写入二进制日志。
# - full(记录所有列)
# - minimal(仅记录更改的列和标识行所需的列)
# - noblob(记录所有列,不需要的BLOB和TEXT列除外)
binlog_row_image = full
# 以秒为单位设置二进制日志过期期限
binlog_expire_logs_seconds = 2592000
server_id = 1
bind_address = *
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
# 启用事件调度器
event_scheduler = ON
# MySQL 不进行主机名解析,直接使用客户端的 IP 地址,以提高性能
skip_name_resolve = ON
# 部署环境建议关闭,开发环境建议开启,这样用户无需具备 SUPER 特权也可以创建存储函数
log_bin_trust_function_creators = OFF
# 服务器和客户端之间通信时,单个数据包的最大尺寸
max_allowed_packet = 100M
# 调整最大连接数:根据应用需求调整
max_connections = 200
# 启用慢查询日志:帮助识别性能问题
# slow_query_log = 1
# slow_query_log_file = C:\\mysql\\logs\\80\\slowqueries.log
# long_query_time = 2
init_file = C:\\mysql\\my\\init-80.sqlsql
set global default_collation_for_utf8mb4=utf8mb4_general_ci;ini
[client]
port = 10084
plugin-dir = C:\\mysql\\product\\84\\lib\\plugin
[mysqld]
port = 10084
datadir = C:\\mysql\\product\\84\\data
pid_file = C:\\mysql\\temp\\mysql-84.pid
log_error = C:\\mysql\\logs\\84\\error.log
log_bin = C:\\mysql\\logs\\84\\binlog
log_bin_index = C:\\mysql\\logs\\84\\binlog.index
# 对于MySQL基于行的复制,此变量确定如何将行映像写入二进制日志。
# - full(记录所有列)
# - minimal(仅记录更改的列和标识行所需的列)
# - noblob(记录所有列,不需要的BLOB和TEXT列除外)
binlog_row_image = full
# 以秒为单位设置二进制日志过期期限
binlog_expire_logs_seconds = 2592000
server_id = 1
bind_address = *
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
# 启用事件调度器
event_scheduler = ON
# MySQL 不进行主机名解析,直接使用客户端的 IP 地址,以提高性能
skip_name_resolve = ON
# 部署环境建议关闭,开发环境建议开启,这样用户无需具备 SUPER 特权也可以创建存储函数
log_bin_trust_function_creators = OFF
# 服务器和客户端之间通信时,单个数据包的最大尺寸
max_allowed_packet = 100M
# 调整最大连接数:根据应用需求调整
max_connections = 200
# 启用慢查询日志:帮助识别性能问题
# slow_query_log = 1
# slow_query_log_file = C:\\mysql\\logs\\84\\slowqueries.log
# long_query_time = 2
init_file = C:\\mysql\\my\\init-84.sqlsql
set global default_collation_for_utf8mb4=utf8mb4_general_ci;3. 注册 Windows 服务
ps1
# 安装到系统服务
C:
cd C:\mysql\product\55\bin
.\mysqld.exe -install mysql-55 --defaults-file="C:\mysql\my\my-55.ini"
# 启动服务
net start mysql-55
# 关闭服务
net stop mysql-55
# 系统服务设为手动启动
sc config mysql-55 start=demand
# 从系统服务中移除
.\mysqld.exe -remove mysql-55ps1
# 安装到系统服务
C:
cd C:\mysql\product\56\bin
.\mysqld.exe -install mysql-56 --defaults-file="C:\mysql\my\my-56.ini"
# 启动服务
net start mysql-56
# 关闭服务
net stop mysql-56
# 系统服务设为手动启动
sc config mysql-56 start=demand
# 从系统服务中移除
.\mysqld.exe -remove mysql-56ps1
# 安装到系统服务
C:
cd C:\mysql\product\57\bin
.\mysqld.exe -install mysql-57 --defaults-file="C:\mysql\my\my-57.ini"
# 启动服务
net start mysql-57
# 关闭服务
net stop mysql-57
# 系统服务设为手动启动
sc config mysql-57 start=demand
# 从系统服务中移除
.\mysqld.exe -remove mysql-57ps1
# 安装到系统服务
C:
cd C:\mysql\product\80\bin
.\mysqld.exe -install mysql-80 --defaults-file="C:\mysql\my\my-80.ini"
# 启动服务
net start mysql-80
# 关闭服务
net stop mysql-80
# 系统服务设为手动启动
sc config mysql-80 start=demand
# 从系统服务中移除
.\mysqld.exe -remove mysql-80ps1
# 安装到系统服务
C:
cd C:\mysql\product\84\bin
.\mysqld.exe -install mysql-84 --defaults-file="C:\mysql\my\my-84.ini"
# 启动服务
net start mysql-84
# 关闭服务
net stop mysql-84
# 系统服务设为手动启动
sc config mysql-84 start=demand
# 从系统服务中移除
.\mysqld.exe -remove mysql-844. 修改密码
ps1
# root 用户密码为空,为了安全起见,需要设置密码
C:
cd C:\mysql\product\55\bin
mysql -uroot -P10055
mysql> set password for root@localhost=password('1');
mysql> flush privileges;ps1
C:
cd C:\mysql\product\57\bin
# 初始化使用 --initialize 有随机密码
# mysql -uroot -P10057 -p
# Enter password: 随机密码
# 初始化使用 --initialize-insecure 无密码
mysql -uroot -P10057 --skip-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '1';
mysql> flush privileges;5. 创建远程用户
ps1
C:
cd C:\mysql\product\55\bin
mysql -uroot -P10055 -p
mysql> create user 'root'@'192.168.%.%' identified by '1';
mysql> grant all privileges on *.* to 'root'@'192.168.%.%' WITH GRANT OPTION;
mysql> flush privileges;⚠️ 警告:
操作时,强烈建议 MySQL 客户端跟 MySQL 服务器为同个主版本,因为不同版本之间会存在兼容性问题
