MySQL系列(22): Windows 和 Linux 环境下安装 MySQL 服务
在 Windows 和 Linux 环境安装MySQL,记录下操作步骤。
官方资料:2.3 Installing MySQL on Microsoft Windows,2.5 Installing MySQL on Linux
Windows
下载
官方下载地址:https://dev.mysql.com/downloads/mysql/ ,页面默认显示当前最新版本的下载,可以点击 【Archives】切换选择历史版本来下载。
MySQL 5.7.28:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-winx64.zip
MySQL 8.0.18:https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.18-winx64.zip
解压
将下载的 MySQL 压缩包解压到安装目录,通常是 D:\Program Files,看个人习惯,解压后可以看到 D:\Program Files\mysql-5.7.28-winx64 目录 。
此解压目录也是安装的根目录。
环境变量
请确保您以具有管理员权限的用户身份登录。
进入MySQL的解压目录:D:\Program Files\mysql-5.7.28-winx64\bin 目录, 复制目录路径。
打开系统属性,配置环境变量(配置用户环境变量也可以, 系统环境变量也可以), 在 PATH 后面追加上 D:\Program Files\mysql-5.7.10-winx64\bin。
注意:前面有一个分号(
;
)分隔编辑 MySQL 的配置文件
进入 MySQL 的安装目录, 在安装目录下面创建一个
my.ini
的文件, MySQL 启动时会读取这个文件,打开此配置文件,配置安装目录,数据目录,端口。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[mysql]
# 设置mysql客户端默认字符集
utf8 =
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:/Program Files/mysql-5.7.28-winx64
# 设置数据目录
datadir=D:/Program Files/mysql-5.7.28-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
utf8 =
# 创建新表时将使用的默认存储引擎
INNODB =
注意:Windows路径名在配置文件中使用正斜杠(/
)而不是反斜杠(\
)指定。如果使用反斜杠,请将其加倍。
1 | [mysqld] |
安装服务
安装 MySQL 服务,进入 D:\Program Files\mysql-5.7.28-winx64\bin 目录,执行 mysqld 命令。
1 | 安装服务 |
执行完后,英文提示的成功,这时可以在 Windows 系统服务中看到 MySQL 的服务。
备注:如果执行此命令报错:Install/Remove of the Service Denied 。解决办法:打开 cmd.exe 程序的时候选择用管理员身份打开。
初始化
ZIP 档安装目是不包含 data
目录的,需要通过执行初始化操作来创建 data 目录并填充 MySQL 系统数据库表来完成MySQL安装。
使用 mysqld --initialize
或 mysqld --initialize-insecure
来初始化 MySQL,在Windows上,使用--console
选项将消息定向到控制台。。
1 | bin\mysqld --initialize --console |
使用
--initialize
进行默认安全安装(即,包括生成随机的初始 root 密码)。在这种情况下,服务器生成一个随机密码,将其标记为已过期,并写入一条显示密码的消息:1
2[Warning] A temporary password is generated for root@localhost:
iTag*AfrH5ej使用
--initialize-insecure
不安全方式安装,不会生成根密码(即无默认随机密码),并写入警告消息。注意这是不安全的。1
2[Warning] root@localhost is created with an empty password ! Please
consider switching off the --initialize-insecure option.此方式初始化,使用 root 身份连接到服务器,无需密码:
1
mysql -u root --skip-password
启动服务
1 | 启动 |
修改密码
参考下面 Linux 的操作。
远程登录
参考下面 Linux 的操作。
Linux
下载
官方下载地址:https://dev.mysql.com/downloads/mysql/,页面默认显示当前最新版本的下载,可以点击 【Archives】切换选择历史版本来下载。
Linux 内核操作系统,根据系统类型和版本选择要下载的安装包,例如 RedHat 和 CentOS 下载 RPM 包,Ubuntu 下载 DEB 包 。还可以下载 Linux 通用的安装包(Linux - Generic),是一个压缩包,不需区分操作系统类型。
本章节基于 Linux 的通用安装包(Linux - Generic)进行安装描述。可从 MySQL官方下载安装包,国内一贯以来的慢,推荐从国内的镜像源库中下载。
中科大镜像源:http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/
MySQL 5.7.28:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
MySQL 8.0.19:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
注意
如果以前使用操作系统本机包管理系统(如 Yum 或 APT )安装过 MySQL,则使用本机二进制文件安装时可能会遇到问题。确保以前的 MySQL 安装已完全删除(使用包管理系统),并且任何其他文件(如旧版本的数据文件)也已删除。还应该检查/etc/my.cnf
或/etc/mysql
目录等配置文件并将其删除。
有关使用官方 MySQL 包替换第三方包的信息,请参阅相关的 APT 指南 或 Yum指南。
MySQL 依赖于 libaio
库。如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败。如有必要,请使用相应的包管理器安装它。例如,在基于 Yum
包管理器:
1 | yum search libaio # search for info |
或基于 APT
包管理器:
1 | apt-cache search libaio # search for info |
安装
要安装压缩 tar
文件二进制发行版,将 tar
包解压给它到安装位置(通常是 /usr/local/mysql)。在安装目录将创建以下目录。
Directory | Contents of Directory |
---|---|
bin | mysqld 服务,客户端,工具程序 |
data | 日志文件,数据库 |
docs | MySQL 手册,Info 格式 |
man | Unix 手册页 |
include | 包含(header)文件 |
lib | 库 |
share | 错误信息,字典,用户数据库安装的SQL |
support-files | 杂项支持文件 |
要安装和使用 MySQL 二进制发行版,命令序列如下所示:
1 | groupadd mysql |
以下基于 CentOS 安装 MySQL 通用包。
检查系统是否有安装过 linux
如果有安装,显示已安装的版本,执行删除,使用参数
--nodeps
忽略依赖删除。1
2
3
4查询
rpm -qa|grep -i mysql
删除, 若有多个文件,则一直删除直到干净。
rpm -e mysql-5.7.13-linux-glibc2.5-x86_64 --nodeps创建 MySQL 的 用户组 和 用户
如果系统没有用户和组用于运行 mysqld,则需要创建它们。下面示例创建 msyql 组 和 mysql 用户。
1
2
3
4
5
6
7groupadd mysql
-r:创建系统用户, -g:加入用户组, -s /bin/false:用户无法登录
useradd -r -g mysql -s /bin/false mysql
如果用户和组已存在,可以先执行下面删除命令
userdel mysql
userdel mysql要拒绝系统用户登录,可以将其 shell 设置为
/usr/sbin/nologin
或者/bin/false
。1
2
3usermod -s | --shell /usr/sbin/nologin username
或者
usermod -s | -shell /bin/false username/bin/false
:什么也不做只是返回一个错误状态,然后立即退出。将用户的 shell 设置为/bin/false
,用户会无法登录,并且不会有任何提示。/usr/sbin/nologin
:会礼貌的向用户显示一条信息,并拒绝用户登录:This account is currently not available.
创建 MySQL 安装目录,和 存放数据目录。MySQL 通常安装在 /usr/local/mysql 下面。
1
2mkdir /usr/local/mysql
mkdir /usr/local/mysql/data将 MySQL 包解压到 /usr/local/mysql 安装目录下
1
2tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /usr/local
再重命名目录名为 mysql或解压到当前目录,通过
cp
拷贝或mv
剪切,将安装文件移动到安装目录。配置MySQL的根目录和存数据目录的
1
2
3
4
5cd /usr/local/mysql/support-files
vi mysql.server #找到并修改如下内容
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
初始化
初始化 MySQ L数据库,初始化的打印日志末尾是一串随机字符串密码,必须记录下来,用于后面登入使用。
1 | cd /usr/local/mysql/bin |
若没有配置mysql根目录和数据目录,可以初始化时指定
1 | ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data |
如果初始化出现错误,则清空 data 目录,再执行初始化操作。初始化操作的提示信息的末尾是 MySQL root
账号的随机密码,需要记住。
设置SSL的RSA
这步可以忽略,但在程序连接时会有告警日志。
该步骤是生成RSA的非对称密钥对。
1 | sudo bin/mysql_ssl_rsa_setup |
启动脚本复制到init.d
1 | sudo cp support-files/mysql.server /etc/init.d/mysql |
启动服务
启动 mysql 服务
1 | cd /usr/local/mysql/support-files |
启动成功显示 OK,否则提示错误。我碰到的,每第一次初始化后启动总会报错:日志文件不存在,PID不存在,或安装目录,数据目录不存在等相关提示。
我是把第一次初始化生成的相关文件全部删除,再重新初始化一次重启,就正常了。清空 data 目录,删除 /etc/my.cnf , /etc/my.cnf.d。
设置开机启动
文件复制
将
/usr/local/mysql/support-files
目录中的mysql.server
文件复制到/etc/rc.d/init.d/
目录下,并重命名为mysqld
。1
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
给
mysqld
文件赋可执行权限1
2注意:/etc/init.d/ 目录是 /etc/rc.d/init.d/ 的软链接
chmod +x /etc/init.d/mysqld查看 Linux 服务列表
1
2
3
4
5
6
7
8
9
10
11[root@iZwz921u2d88awp2um8v9pZ ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:offmysqld 在
3, 4, 5
运行级别都为on
则表示已加入到 Linux 服务,会开机启动。如果为
off
,则执行命令设置开启,重启服务。命令如下:1
chkconfig --level 345 mysqld on
查看 和 添加为系统服务,设置运行级别:
1
2
3chkconfig --list mysqld
chkconfig --add mysqld
chkconfig mysqld onLinxu 运行级别
Linux CentOS7 运行级别在
/lib/systemd/system/runlevel*
中定义,分别有 7 个级别,从 0 - 6。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@iZwz921u2d88awp2um8v9pZ system]# pwd
/lib/systemd/system
[root@iZwz921u2d88awp2um8v9pZ system]# ll
..........
lrwxrwxrwx 1 root root 15 Feb 25 00:05 runlevel0.target -> poweroff.target #停机
lrwxrwxrwx 1 root root 13 Feb 25 00:05 runlevel1.target -> rescue.target #唤醒
drwxr-xr-x. 2 root root 6 Feb 25 00:05 runlevel1.target.wants
lrwxrwxrwx 1 root root 17 Feb 25 00:05 runlevel2.target -> multi-user.target #多用户
drwxr-xr-x. 2 root root 6 Feb 25 00:05 runlevel2.target.wants
lrwxrwxrwx 1 root root 17 Feb 25 00:05 runlevel3.target -> multi-user.target #多用户
drwxr-xr-x. 2 root root 6 Feb 25 00:05 runlevel3.target.wants
lrwxrwxrwx 1 root root 17 Feb 25 00:05 runlevel4.target -> multi-user.target #多用户
drwxr-xr-x. 2 root root 6 Feb 25 00:05 runlevel4.target.wants
lrwxrwxrwx 1 root root 16 Feb 25 00:05 runlevel5.target -> graphical.target #图形模式
drwxr-xr-x. 2 root root 6 Feb 25 00:05 runlevel5.target.wants
lrwxrwxrwx 1 root root 13 Feb 25 00:05 runlevel6.target -> reboot.target #重启
...........查看当前运行级别:
1
2[root@iZwz921u2d88awp2um8v9pZ system]# systemctl get-default
multi-user.target
MySQL系统服务
通过 MySQL 服务启动、重启、停止
CentOS 6 及之前的版本,可使用
/sbin/service
命令:1
2
3
4service mysqld start
service mysqld status
service mysqld restart
service mysqld stopservice
实际是一个执行脚本,调的是/etc/init.d/
中的服务,而 ``/etc/init.d/是
/etc/rc.d/init.d/的软链接,所以要使用该方式的前提是在
/etc/rc.d/init.d/中存在
mysqld` 可执行文件。执行示例如下:
1
2service mysqld status
MySQL running (2354) [ OK ]CentOS 7 及更新的版本,使用
systemctl
命令,也支持service
命令:1
2
3
4
5systemctl status mysqld
systemctl start mysqld
systemctl restart mysqld
systemctl reload mysqld
systemctl stop mysqld注意:如果服务启动了,
service mysqld status
显示running
,而systemctl status mysqld
显示Unit msyqld.service could not be found
,则重启下防火墙。执行示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@iZwz921u2d88awp2um8v9pZ ~]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld; generated)
Active: active (running) since Fri 2020-04-24 01:09:50 CST; 15h ago
Docs: man:systemd-sysv-generator(8)
Process: 2226 ExecStop=/etc/rc.d/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 2250 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
Tasks: 32 (limit: 26213)
Memory: 217.5M
CGroup: /system.slice/mysqld.service
├─2256 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr>
└─2354 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data ->
Apr 24 01:09:49 iZwz921u2d88awp2um8v9pZ systemd[1]: Stopped LSB: start and stop MySQL.
Apr 24 01:09:49 iZwz921u2d88awp2um8v9pZ systemd[1]: Starting LSB: start and stop MySQL...
Apr 24 01:09:50 iZwz921u2d88awp2um8v9pZ mysqld[2250]: Starting MySQL.[ OK ]
Apr 24 01:09:50 iZwz921u2d88awp2um8v9pZ systemd[1]: Started LSB: start and stop MySQL.
mysql 可执行命令
MySQL 安装并启动成功后,执行 mysql
命令可能会报:mysql: command not found 的错,是因为没有将可执行的 mysql
加入到用户命令。
查看
mysql
命令是否加入到用户命令1
2[root@iZwz921u2d88awp2um8v9pZ ~]# ls /usr/bin/ -al |grep mysql
lrwxrwxrwx 1 root root 26 Apr 23 23:55 mysql -> /usr/local/mysql/bin/mysql如果不存在,则给
mysql
命令创建个软链接到/usr/bin
目录下1
ln -s /usr/local/mysql/bin/mysql /usr/bin
连接MySQL
-
--initialize
方式初始化 data 目录,使用 root 连接服务。
1 | mysql -u root -p |
然后,在密码提示下,输入服务器在初始化序列中生成的随机密码:
1 | Enter password: (enter the random root password here) |
如果您不知道此密码,请查看服务器错误日志。
-
--initialize-insecure
方式初始化 data 目录,使用 root 连接服务,不需要密码。
1 | mysql -u root --skip-password |
修改root密码
连接到 MySQL服务器后使用 ALTER USER
语句给 root 分配新的密码。
修改默认密码
MySQL 8.0 安装完后,执行 SQL会报如下提示,要求修改初始密码:
1 | You must reset your password using ALTER USER statement before executing this statement. |
执行如下 SQL 解决:
1 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; |
SQLyog连接报错
用 SQLyog 连接数据库会报错:
1 | plugin caching_sha2_password could not be loaded |
执行如下SQL解决
1 | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; |
MySQL 5.7设置密码
MySQL 5.7 的 user 表没有 password 字段,只能通过 set password
来设置密码;
1 | msyql -u root -p 初始化时的默认密码 |
MySQL 5.6设置密码
MySQL 5.6 及更早版本有 password 字段,可通过设置 password 字段设置密码:
1 | update user set password=PASSWORD('new_password') where User='root'; |
开启root远程登录
root 用户默认只允许本地登录,若要远程使用 root 账号登录,需要做些设置
1 | msyql -u root -p new_password |
注:%
指任意来源的地址,也可以指定允许访问的 IP 地址。
MySQL系列(22): Windows 和 Linux 环境下安装 MySQL 服务
http://blog.gxitsky.com/2020/04/22/MySQL-22-install-windows-linux/