@TOC

1.MySQL的安装

MySQL安装网上有一堆教程。
1.1.比较简便方法是:

  • Windows系统,在官网的MySQL Installer下载msi安装版,下载后双击安装包直接安装便可。参考教程:超详细MySQL安装及基本使用教程
    Task00:环境搭建 - 图1

  • Linux系统,以Ubuntu为例,打开终端依次运行下面两条命令,分别安装好MySQL服务和MySQL客户端即可。

  1. sudo apt-get install mysql-service
  2. sudo apt-get install mysql-client
  • macOS没有试过,暂不讨论。

1.2. 比较麻烦的安装方法

  • Windows系统,基本思路是:

①在官网 MySQL Community Server下载压缩包。【推荐下载第一个,第二安装貌似非常麻烦】
Task00:环境搭建 - 图2

②下载后解压文件。 解压后如果文件夹里没有 my.ini文件,则需要手动创建一个。通过新建文本文档,然后再修改文件名就可以。
打开创建好的my.ini文件,输入以下内容,保存就可以。

特别注意: MySQL8.0版本,可以先不用my.ini配置文件安装,不行再添加配置文件进行安装。

文件中的 basedir=后面需要填写你解压文件的路径。secure_file_priv=后面填写的则是MySQL安全路径,因为MySQL安全策略的原因,需要指定一个给MySQL用来导入导出数据的文件夹。注意: 这里路径用了2个反斜杠,是因为Windows系统反斜杠是转义字符,避免因此造成奇奇怪怪的问题。

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=E:\\Program Files\\Mysql\\mysql-5.7.27-winx64
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 安全路径
secure_file_priv='E:\\Program Files\\Mysql'

③用管理员权限打开电脑cmd终端,再依次输入以下命令来切换到MySQL解压目录。E:\Program Files\Mysql\mysql-5.7.27-winx64这部分改为你解压文件的目录里面的bin目录。第二行的E:则是文件夹所在的盘(放在E盘就填E:,D盘就填D:,以此类推)。

cd E:\Program Files\Mysql\mysql-5.7.27-winx64\bin
E:

输入以下代码,注册MySQL服务:
其中的MySQL8.0是服务的名称,可以自定义,不填的话默认注册的服务名称为mysql。对于同一台电脑安装2个版本的mysql这种情况,就必须设置不同服务的名称,以便于区分。

mysql --install MySQL8.0

若出现Service successfully installed,证明安装成功;
如出现Install of the Service Denied,则说明没有以管理员权限来运行cmd。如何操作请参考百度经验
Task00:环境搭建 - 图3
服务安装成功后,再对data目录初始化:

注意:如果解压后的文件夹里面有 data这个文件夹,需要先删除,或者拷贝到其他目录做备份。不然可能会导致初始化失败!

后面--user=mysql --console这部分如果不加入的话,会生成一个没有密码的root用户,如果登录失败,则需要打开前面的my.ini配置文件,在[mysqld]这一行下面,再添加一行 skip-grant-tables,再关闭和打开服务,重新登录。

mysqld --initialize --user=mysql --console

通常初始化data成功后cmd会出来一部分提示,注意这里面有你的MySQL root用户的临时密码,之后要用,你可以先保存下来。比如安装后出现下面提示中的 k9CRxtbKgt?j 就是root用户的临时密码。
A temporary password is generated for root@localhost: k9CRxtbKgt?j

  • Linux和macOS没有尝试过这种压缩包安装法。暂且略过。

2.配置环境变量

  • Windows上配置环境变量
    打开控制面板,打开方法参考Windows电脑打开控制面板
    打开控制面板后依次进入
    系统和安全—>系统—>高级系统设置—>环境变量—>系统变量
    搬运自此链接
    Task00:环境搭建 - 图4
    Task00:环境搭建 - 图5
    Task00:环境搭建 - 图6
    点击新建,变量名为:MYSQL_HOME,变量值为:你的mysql-5.7.27-winx64文件夹所在位置。
    例如本次解压在E:\Program Files\Mysql\mysql-5.7.27-winx64,如图:
    Task00:环境搭建 - 图7
    编辑Path,复制;%MYSQL_HOME%\bin到原有值的后面,如图:
    Task00:环境搭建 - 图8

  • Linux系统上如果按照1.1方法安装,则一般不需要考虑环境变量(也可能是我对Linux了解不够)。macOS没试过,暂时略过。

3.启动MySQL服务,登录数据库

3.1 启动和关闭MySQL服务

  • Windows上启动和关闭MySQL服务
    用管理员权限打开电脑cmd终端,输入以下命令
    其中mysql8.0这部分是前面注册MySQL服务时候用的名称。默认是mysql。如果你是用mysql --install命令安装,或者msi文件安装的话,则输入net start mysql以启动MySQL服务,用net stop mysql关闭MySQL服务。
# 启动mysql服务
net start mysql8.0
# 关闭mysql服务
net stop mysql8.0

Windows上如何查看MySQL服务状态请参考https://blog.csdn.net/sinat_32034679/article/details/69223234
Task00:环境搭建 - 图9

  • Linux上启动和关闭MySQL服务
# 启动MySQL服务
sudo service mysql start
# 查看MySQL服务运行状态
sudo service mysql status
# 停止MySQL服务
sudo service mysql stop

Task00:环境搭建 - 图10

如果MySQL服务启动失败,报错如下
Task00:环境搭建 - 图11

把下面的三行命令,逐行运行即可。

usermod -d /var/lib/mysql/ mysql
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
chown -R mysql:mysql /var/lib/mysql

运行后关闭MySQL服务,再重新启动MySQL服务。

3.2 登录数据库和修改用户密码

  • 登录数据库,Windows和Linux命令是一样的,macOS没有测试过。
    按照前面用管理员权限打开电脑cmd终端,先启动MySQL服务,再输入以下命令,按回车后输入密码。输入密码的时候,Linux系统上是不会显示你的输入的。输入密码后再回车,如果前面没有设置密码就直接按回车。
mysql -u root -h localhost -p

也可以像下面把密码放到后面一起输入。但是这种方法不推荐使用,一般适用于杂乱的初始密码登录的时候使用。

mysql -u root -h localhost -p k9CRxtbKgt?j

如果是Windows系统用msi文件安装的,使用你设置的密码进行登录。

Task00:环境搭建 - 图12
如果没有配置系统变量的话,就需要在MySQL解压目录的bin目录下,执行命令登录MySQL数据库。
Task00:环境搭建 - 图13

  • 修改用户密码
    例如把root用户的密码修改成123456,在MySQL终端输入以下命令
ALTER USER 'root'@'localhost'IDENTIFIED BY '123456';

再输入这行命令更新就可以了。可以退出再尝试登录。

flush privileges;

Task00:环境搭建 - 图14

4.在Windows上同时安装2个不同版本的MySQL

参考资料:windows环境下:安装MySQL8.0;同时安装MySQL5.7

如果你需要在Windows里面安装2个不同版本的MySQL(比如5.7和8.0):

①请先按照前面的方法你最常用的那个版本的MySQL(可以用MSI安装包安装,也可以用压缩包安装)。

②接着,再用压缩包安装方法(即1.2里的方法),安装另外一个版本的MySQL, 此时要注意安装的服务名称不要和前面的一样即可。安装后也不要配置环境变量。
比如第一个版本用默认方式mysql --install安装后,服务名称为 mysql。用msi文件安装的也是这个名称。启动服务的时候用net start mysql,关闭服务用net stop mysql
第二个版本安装的时候用mysql --install MySQL8.0,则服务名称为 mysql8.0,启动服务的时候用net start mysql8.0,关闭用net stop mysql8.0

③如何启用和登录这2个版本的MySQL。

  • 先尝试启动第一个版本的服务,并登录数据库。
    如果服务启动失败,可以把data文件夹删除或者拷贝到其他地方,重新执行一次mysql --installmysqld --initialize --user=mysql --console。具体报错请复制报错问题进行百度搜索。
    如果是登录数据库报错:“ ‘mysql’ 不是内部或外部命令,也不是可运行的程序或批处理文件。” 则需要重新配置一下环境。
    Task00:环境搭建 - 图15

如果环境配置确认没有问题,却还是一样的报错的话,可以切换到安装目录的bin目录里面,再执行登录数据的命令。
Task00:环境搭建 - 图16

  • 再尝试启动服务第二个版本的MySQL服务。
    (这里可以先把前面的数据库退出登录,并关闭mysql服务。因为我本身没有测试过2个数据库同时在同一个电脑运行,所以不能保证2个数据库可以同时运行。又经测试发现,不能同时运行2个MySQL服务。)
    第二个版本的MySQL服务正常启动后,接着切换到第二个版本的MySQL解压目录的bin目录下,再执行myslq -uroot -p等命令进行登录或者连接远程服务器。

5.创建远程连接账号和登录远程MySQL数据库。

假设现在有2台主机,主机A 和主机B。
其中主机A的ip为192.168.0.11 ; 主机B的ip为192.168.0.3 。
(如何获取电脑主机的ip:
Linux系统上在终端使用 ifconfig 命令查询;
Windows系统上在终端使用 ipconfig 命令查询)
现在要用从主机B登录上 主机A上的数据库,需要进行以下步骤:
①在主机A上创建可以用来远程登录的账号 RemoteUser,账号的登录密码为 password。并且为了安全,这个账号只允许ip为 192.168.0.10 的主机进行连接。

  • 需要先按前面的方法登录进mysql数据库。
  • 进入数据库后,再执行以下命令来创建
    以下使用于MySQL5.7以及以下的版本进行用户创建:
grant all privileges on *.* to 'RemoteUser'@'192.168.0.3' identified by 'password';

如果是MySQL8版本,则需要逐行执行以下的命令来创建用户。
其中,MySQL8需要通过mysql_native_password 这个函数密码来进行远程连接。

# 创建账户
create user 'RemoteUser'@'192.168.0.3' WITH mysql_native_password identified by  'password'

# 赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
# *.* 代表 所有库.所有表 ,可以根据实际情况设置
grant all privileges on *.* to 'RemoteUser'@'192.168.0.3' with grant option;

# flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
flush privileges;

Task00:环境搭建 - 图17

② 启用3306端口

  • 在数据库里面执行以下命令,检查数据库绑定的端口(默认是绑定3306端口的)
show global variables like 'port';

Task00:环境搭建 - 图18

  • 查看本机的3306端口是否启用。需要先启动MySQL服务,才能查到MySQL有没有使用这个端口。启动方法看前面的介绍。
    Linux系统使用以下命令,在终端里面查询
netstat -an | grep 3306
root@localhost:~# netstat -an | grep 3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

注意:现在的3306端口绑定的IP地址是本地的127.0.0.1,需要打开配置文件,在bind-address = 127.0.0.1这行前面加上#注释掉这行。

        1)  Linux系统的配置文件放在 “/etc/mysql/mysql.conf.d/mysqld.cnf” 也有的是放在 “/etc/mysql/my.cnf ” 。在文件管理里面找到这个文件后,打开编辑修改保存就可以。
也可以在终端命令行输入以下命令,打开配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

打开文件后,按键盘的 ESC 键,再按一下键盘的字母 O键进入编辑模式,然后找到这一行,在开头输入 # 。最后按键盘的 ESC键,输入 :wq 再按回车,进行保存和退出就可以了。
Task00:环境搭建 - 图19
Task00:环境搭建 - 图20
之后,再关闭MySQL服务,重新启动MySQL服务,再次查看端口信息。

root@localhost:~# netstat -an | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN

        2)  Windows系统在终端里面,使用以下命令查询。

netstat -an | findstr 3306

Windows也是把前面的my.ini配置文件 里面的bind-address = 127.0.0.1这行前面加上#注释掉这行再保存就可以。如果没有这行就不用管。
如果安装的时候没有使用my.ini配置文件,可以在终端里面,先关闭MySQL服务,然后切换到MySQL的解压目录里面的bin目录下,再运行以下命令:

mysqladmin --bind-address 0.0.0.0

Task00:环境搭建 - 图21
执行命令后可以看到这里显示了
Task00:环境搭建 - 图22

  • 启用3306端口,并在防火墙里设置允许连接。

        1)  在Linux系统中启用3306端口:
以Ubuntu为例

# 安装ufw防火墙管理软件
sudo apt install ufw
# 启用防火墙
sudo ufw enable

# 设置默认的规则为allow,这样除非指明打开的端口,否则所有端口默认都是关闭的
sudo ufw default deny

# 打开3306端口
sudo ufw allow 3306

# 查看防火墙状态
sudo ufw status verbose

# 关闭防火墙
sudo ufw disable

在Linux里面启用3306端口,并在防火墙中添加3306端口。

root@localhost:~# sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
root@localhost:~# sudo ufw allow 3306
Rule added
Rule added (v6)
root@localhost:~# sudo ufw reload
Firewall reloaded

        2)  在Windows 中启用3306端口:https://zhidao.baidu.com/question/543532397.html
Task00:环境搭建 - 图23

开启后,在防火墙里面添加3306允许连接。方法如下:
打开 控制面板\系统和安全\Windows 防火墙\允许程序或功能通过Windows防火墙 ,查看前面设置的端口名称是不是有勾选。
Task00:环境搭建 - 图24

我这里安装了2个版本的MySQL,所以会有2个端口的记录。
而且貌似2个不同版本的MySQL不能共用同一个端口?
毋庸置疑的是,不能同时运行2个MySQL服务。
Task00:环境搭建 - 图25

③在主机B使用主机A创建好的的账号进行登录

  • 需要先按前面的方法启动MySQL服务
  • 再用以下的命令登录远程数据库
mysql -u RemoteUser -h 192.168.0.11 -P 3306 -p password

这里是用Windows上的MySQL5.7服务,连接登录Ubuntu上的MySQL5.7数据库。参数和参数值之间可以不带空格。
Task00:环境搭建 - 图26
如果登录失败,出现以下错误,可以尝试删除用户,重新创建一次,再进行登录。我就遇到这个bug。(这个应该密码错误,可能是注册用户的时候操作失误导致的。)
Task00:环境搭建 - 图27

删除用户的命令如下:

drop user RemoteUser@192.168.0.3;
flush privileges;

Task00:环境搭建 - 图28