MySQL系列(22): Windows 和 Linux 环境下安装 MySQL 服务

在 Windows 和 Linux 环境安装MySQL,记录下操作步骤。

官方资料:2.3 Installing MySQL on Microsoft Windows2.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 目录 。

此解压目录也是安装的根目录。

环境变量

  1. 请确保您以具有管理员权限的用户身份登录。

  2. 进入MySQL的解压目录:D:\Program Files\mysql-5.7.28-winx64\bin 目录, 复制目录路径。

  3. 打开系统属性,配置环境变量(配置用户环境变量也可以, 系统环境变量也可以), 在 PATH 后面追加上 D:\Program Files\mysql-5.7.10-winx64\bin

    注意:前面有一个分号(;)分隔

  4. 编辑 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客户端默认字符集
    default-character-set=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字符集
    character-set-server=utf8

    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB

注意:Windows路径名在配置文件中使用正斜杠(/)而不是反斜杠(\)指定。如果使用反斜杠,请将其加倍。

1
2
3
4
5
[mysqld]
# set basedir to your installation path
basedir=E:\\mysql
# set datadir to the location of your data directory
datadir=E:\\mydata\\data

安装服务

安装 MySQL 服务,进入 D:\Program Files\mysql-5.7.28-winx64\bin 目录,执行 mysqld 命令。

1
2
3
4
5
# 安装服务
> mysqld --install

# 移除服务
> mysqld --remove

执行完后,英文提示的成功,这时可以在 Windows 系统服务中看到 MySQL 的服务。

备注:如果执行此命令报错:Install/Remove of the Service Denied 。解决办法:打开 cmd.exe 程序的时候选择用管理员身份打开

初始化

ZIP 档安装目是不包含 data目录的,需要通过执行初始化操作来创建 data 目录并填充 MySQL 系统数据库表来完成MySQL安装。

使用 mysqld --initializemysqld --initialize-insecure 来初始化 MySQL,在Windows上,使用--console选项将消息定向到控制台。。

1
2
> bin\mysqld --initialize --console
> bin\mysqld --initialize-insecure --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
2
3
4
# 启动
net start mysql
# 停止
net stop mysql

修改密码

参考下面 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

注意

如果以前使用操作系统本机包管理系统(如 YumAPT )安装过 MySQL,则使用本机二进制文件安装时可能会遇到问题。确保以前的 MySQL 安装已完全删除(使用包管理系统),并且任何其他文件(如旧版本的数据文件)也已删除。还应该检查/etc/my.cnf/etc/mysql目录等配置文件并将其删除。

有关使用官方 MySQL 包替换第三方包的信息,请参阅相关的 APT 指南Yum指南

MySQL 依赖于 libaio 库。如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败。如有必要,请使用相应的包管理器安装它。例如,在基于 Yum 包管理器:

1
2
shell> yum search libaio  # search for info
shell> yum install libaio # install library

或基于 APT 包管理器:

1
2
shell> apt-cache search libaio # search for info
shell> apt-get install libaio1 # install library

安装

要安装压缩 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
2
3
4
5
6
7
8
9
10
11
12
13
14
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chown mysql:mysql mysql-files
shell> chmod 750 mysql-files
shell> bin/mysqld --initialize --user=mysql
shell> bin/mysql_ssl_rsa_setup
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

以下基于 CentOS 安装 MySQL 通用包。

  1. 检查系统是否有安装过 linux

    如果有安装,显示已安装的版本,执行删除,使用参数 --nodeps 忽略依赖删除。

    1
    2
    3
    4
    # 查询
    shell> rpm -qa|grep -i mysql
    # 删除, 若有多个文件,则一直删除直到干净。
    shell> rpm -e mysql-5.7.13-linux-glibc2.5-x86_64 --nodeps
  2. 创建 MySQL 的 用户组 和 用户

    如果系统没有用户和组用于运行 mysqld,则需要创建它们。下面示例创建 msyql 组 和 mysql 用户。

    1
    2
    3
    4
    5
    6
    7
    shell> groupadd mysql
    # -r:创建系统用户, -g:加入用户组, -s /bin/false:用户无法登录
    shell> useradd -r -g mysql -s /bin/false mysql

    # 如果用户和组已存在,可以先执行下面删除命令
    shell> userdel mysql
    shell> userdel mysql

    要拒绝系统用户登录,可以将其 shell 设置为 /usr/sbin/nologin 或者 /bin/false

    1
    2
    3
    usermod -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.
  3. 创建 MySQL 安装目录,和 存放数据目录。MySQL 通常安装在 /usr/local/mysql 下面。

    1
    2
    mkdir /usr/local/mysql
    mkdir /usr/local/mysql/data
  4. 将 MySQL 包解压到 /usr/local/mysql 安装目录下

    1
    2
    tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /usr/local
    # 再重命名目录名为 mysql

    或解压到当前目录,通过 cp 拷贝或 mv 剪切,将安装文件移动到安装目录。

  5. 配置MySQL的根目录和存数据目录的

    1
    2
    3
    4
    5
    cd /usr/local/mysql/support-files
    vi mysql.server #找到并修改如下内容

    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data

初始化

初始化 MySQ L数据库,初始化的打印日志末尾是一串随机字符串密码,必须记录下来,用于后面登入使用。

1
2
3
4
5
cd /usr/local/mysql/bin

# 初始化时,指定系统用户
# 配置了mysql根目录和数据目录,可执行如下命令
./mysqld --initialize --user=mysql

若没有配置mysql根目录和数据目录,可以初始化时指定

1
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 

如果初始化出现错误,则清空 data 目录,再执行初始化操作。初始化操作的提示信息的末尾是 MySQL root 账号的随机密码,需要记住。

设置SSL的RSA

这步可以忽略,但在程序连接时会有告警日志。

该步骤是生成RSA的非对称密钥对。

1
shell> sudo bin/mysql_ssl_rsa_setup

启动脚本复制到init.d

1
shell> sudo cp support-files/mysql.server /etc/init.d/mysql

启动服务

启动 mysql 服务

1
2
cd /usr/local/mysql/support-files
./mysql.server start

启动成功显示 OK,否则提示错误。我碰到的,每第一次初始化后启动总会报错:日志文件不存在,PID不存在,或安装目录,数据目录不存在等相关提示。

我是把第一次初始化生成的相关文件全部删除,再重新初始化一次重启,就正常了。清空 data 目录,删除 /etc/my.cnf , /etc/my.cnf.d

设置开机启动

  1. 文件复制

    /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
  2. mysqld 文件赋可执行权限

    1
    2
    # 注意:/etc/init.d/ 目录是 /etc/rc.d/init.d/ 的软链接
    chmod +x /etc/init.d/mysqld
  3. 查看 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:off

    mysqld 在 3, 4, 5 运行级别都为 on 则表示已加入到 Linux 服务,会开机启动。

    如果为 off,则执行命令设置开启,重启服务。命令如下:

    1
    chkconfig --level 345 mysqld on

    查看 和 添加为系统服务,设置运行级别:

    1
    2
    3
    chkconfig --list mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
  4. Linxu 运行级别

    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 服务启动、重启、停止

  1. CentOS 6 及之前的版本,可使用 /sbin/service 命令:

    1
    2
    3
    4
    service mysqld start
    service mysqld status
    service mysqld restart
    service mysqld stop

    service实际是一个执行脚本,调的是 /etc/init.d/ 中的服务,而 ``/etc/init.d//etc/rc.d/init.d/的软链接,所以要使用该方式的前提是在 /etc/rc.d/init.d/中存在mysqld` 可执行文件。

    执行示例如下:

    1
    2
    service mysqld status
    MySQL running (2354) [ OK ]
  2. CentOS 7 及更新的版本,使用 systemctl 命令,也支持 service 命令:

    1
    2
    3
    4
    5
    systemctl 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 加入到用户命令。

  1. 查看 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
  2. 如果不存在,则给 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)

如果您不知道此密码,请查看服务器错误日志。

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
2
msyql -u root -p 初始化时的默认密码
set password = password('new_password');

MySQL 5.6设置密码

MySQL 5.6 及更早版本有 password 字段,可通过设置 password 字段设置密码:

1
update user set password=PASSWORD('new_password') where User='root';

开启root远程登录

root 用户默认只允许本地登录,若要远程使用 root 账号登录,需要做些设置

1
2
3
4
5
6
7
8
9
10
msyql -u root -p new_password
show databases;
use mysql;
select user,host from user; # 默认只允 localhost 访问。
# 更新允许远程登录
update user set host = '%' where user = 'root';

# 或添加一个可以远程访问的账号
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'new_password' WITH GRANT OPTION;
flush privileges; #刷新权限

注:%指任意来源的地址,也可以指定允许访问的 IP 地址。

MySQL系列(22): Windows 和 Linux 环境下安装 MySQL 服务

http://blog.gxitsky.com/2020/04/22/MySQL-22-install-windows-linux/

作者

光星

发布于

2020-04-22

更新于

2023-03-27

许可协议

评论