CentOS7及Win10安装卸载MySQL

一:MySQL官方下载说明

 MySQL Community Server(社区版本,平常使用这个):

  开源免费,自由下载,但不提供官方技术支持,适用于大多数普通用户。
MySQL Enterprise Edition(企业版本):
  需付费,不能在线下载,可以试用30天。提供了更多的功能和更完备的技术支持,
  更适合于对数据库的功能和可靠性要求较高的企业客户。
MySQL Cluster(集群版):
  开源免费。用于架设集群服务器,可将几个MySQL Server封装成一个Server。
  需要在社区版或企业版的基础上使用。
MySQL Cluster CGE(高级集群版):
  集群需付费。

  官方还提供了MySQL Workbench(GUITOOL)一款专为MySQL设计的图形界面管理工具。MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL WorkbenchSE)

1:下载MySQL管理软件(DBMS)

  官网地址:https://www.mysql.com/  进入链接后点击 DOWNLOADS

  Windows平台下提供两种安装文件:MySQL二进制分发版(.msi安装文件)和免安装版(.zip压缩文件)。一般来讲,应当使用二进制分发版,因为该版本提供了图形化的安装向导过程,比其他的分发版使用起来要简单,不再需要其他工具启动就可以运行MySQL。这里在Windows系统下推荐下载 MSI安装程序;点击Go to Download Page进行下载即可

二:CentOS7使用RPM安装MySQL5.7

  学到了在CentOS里安装MySQL5.7,那你肯定对MySQL有个基本的使用,所以我废话少说直接干货!!

1:下载MySQL5.7的rpm安装包

  下载地址  选择合适的版本,这里我们使用的是MySQL5.7.33;下载完成后发送到自己的CentOS7服务器里,这里可以通过命令:rz -y来上传,或者Xftp

2:卸载已经安装的MySQL(没安装过则跳过)

  注:卸载之前请关闭mysql服务,命令:systemctl stop mysqld  

①:查询已经安装的MySQL信息
    rpm -qa | grep -i mysql
②:卸载查询出来的关于MySQL的依赖信息
    rpm -e --nodeps mysql-community-common-8.0.31-1.el7.x86_64
    rpm -e --nodeps mysql-community-client-plugins-8.0.31-1.el7.x86_64
    rpm -e --nodeps mysql-community-libs-8.0.31-1.el7.x86_64
    rpm -e --nodeps mysql-community-icu-data-files-8.0.31-1.el7.x86_64
    rpm -e --nodeps mysql-community-client-8.0.31-1.el7.x86_64
    rpm -e --nodeps mysql-community-server-8.0.31-1.el7.x86_64

③:卸载完基本的环境后,我们要清理依赖的文件(数据库配置文件及数据库数据文件)
    ## 全路径 '/' 查询相关文件(只是简单查看有哪些要删除的)
        find / -name mysql
    ## 删除数据库配置文件(一般情况下卸载了mysql这个文件也会被自动删除,my.cnf就是windows上的my.ini文件)
        rm -rf  /etc/my.cnf
    ## 删除数据库数据文件(包含系统数据库表和自定义数据库表)
        rm -rf /var/lib/mysql
    ## 删除日志临时文件(比如安装后产生密码的文件,不删除会发现安装后查询2个初始密码,但以下面的为主)
        rm -rf /var/log/mysqld.log
    ## 删除其它关于MySQL上的信息
        rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql

 3:MySQL安装环境准备

# 卸载mariadb:

  检查是否安装了mariadb(CentOS7默认安装),如存在则卸载mariadb;如果你是CentOS6,则默认是MySQL,那么你就卸载MySQL即可

  说明:以前的Linux系统中数据库大部分是MySQL,不过自从被 sun 收购之后,就没用集成在centos这些开源Linux系统中了,那么如果想用的话就需要自己安装了,首先centos7 已经不在默认提供 MySQL,因为收费了你懂得,所以内部集成了mariadb,而安装 MySQL 的话会和mariadb的文件冲突,所以需要先卸载掉mariadb

rpm -qa | grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps

# 安装所需依赖:

  一般都是最新版了,以防万一后面安装出错,缺少依赖

yum install libaio
yum install net-tools

4:安装我们上传的四个MySQL包并启动

# 安装:

  安装时必须严格遵守安装顺序 依赖关系依次为 common → libs → client → server

  注:使用RPM安装必须存在这四类文件(具体有什么其它依赖,看具体报错,存在哪个依赖不存在则下载指定的依赖)

  注:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验

rpm -ivh mysql-community-common-5.7.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.33-1.el7.x86_64.rpm 
rpm -ivh mysql-community-client-5.7.33-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.33-1.el7.x86_64.rpm

# 安装后查询安装的MySQL版本(2种方式)
mysqladmin --version    
mysql --version
安装MySQL 8.0.31 必备安装包及顺序
    -- 按照顺序安装
        rpm -ivh mysql-community-common-8.0.31-1.el7.x86_64.rpm
        rpm -ivh mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm
        rpm -ivh mysql-community-libs-8.0.31-1.el7.x86_64.rpm
        rpm -ivh mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm
        rpm -ivh mysql-community-client-8.0.31-1.el7.x86_64.rpm
        rpm -ivh mysql-community-server-8.0.31-1.el7.x86_64.rpm
补充:MySQL 8.0.31 安装顺序

# 安装常见问题及解决:

①:安装报警告: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
    说明:这是由于yum安装了旧版本的GPG keys造成的 
    解决办法:后面加上  --force --nodeps

# 启动和自启动及查询状态:

# 查询MySQL在系统的状态
    systemctl status mysqld
# 启动MySQL数据库
    systemctl start mysqld
# 关闭MySQL数据库
    systemctl stop mysqld
# 重启MySQL数据库
    systemctl restart mysqld
# 查看MySQL进程
    ps -ef | grep mysqld

# 查询MySQL服务是否是自启动
    systemctl list-unit-files | grep mysqld.service
        enabled:当前为开机自启动
        disable:开机后不会自启动
# 设置自启动
    systemctl enable mysqld.service
# 设置不自启动
    systemctl disable mysqld.service

5:登录安装的MySQL5.7

  由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,从而在里面进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码

  获取数据库临时密码:grep 'temporary password' /var/log/mysqld.log

补充:若没有获取临时密码时处理方式
    执行:mysqld --initialize --user=mysql
    说明:--initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将`该密码标记为过期`,
         登录后你需要设置一个新的密码。生成的`临时密码`会往日志中记录一份。
对于MySQL5.7.6以后的5.7系列版本
    Mysql使用 mysqld --initialize 或 mysqld --initialize-insecure命令来初始化数据库,
    mysqld --initialize-insecure 可以不生成随机密码,设置数据库空密码。
    注:其实安装MySQL时默认会使用的mysqld --initialize命令:
    这个命令也会生成一个随机密码。改密码保存在了Mysql的日志文件中。
MySQL的日志文件位置:
    MySQL的配置文件是/etc/my.cnf,打开该文件,可以看到mysql的datadir和log文件等的配置信息,如下:
        datadir=/var/lib/mysql
        log-error=/var/log/mysqld.log
    打开log文件并搜索:
        grep 'temporary password' /var/log/mysqld.log

# 更改密码

   初始化密码只是提供给你登录到内部,而我们进入到内部必须修改密码,否则无法对数据库操作,就如下图我们无法操作

 # new_password替换成自己的密码
 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

  什么??不符合策略,这里告诉你,密码为8位并且包含特殊字符、大小写字母、数字

  如: ALTER USER 'root'@'localhost' IDENTIFIED BY  'aaAA$$!!66' ;

# 查看密码策略及更改策略

  这是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关:

  查看默认的策略配置 : show variables like 'validate_password%';  

mysql>  show variables like 'validate_password%';  
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |  是否验证用户名
| validate_password_dictionary_file    |        |  密码策略文件,策略为STRONG才需要
| validate_password_length             | 8      |  密码长度
| validate_password_mixed_case_count   | 1      |  大小写字符长度,至少一个
| validate_password_number_count       | 1      |  数字至少一个
| validate_password_policy             | MEDIUM |  密码策略
| validate_password_special_char_count | 1      |  特殊字符至少一个
+--------------------------------------+--------+

  看到上面设置个密码那么复杂,还记不住,那我们修改一下策略(设置LOW并且长度设置为3)

set global validate_password_policy=0;       # 关闭密码复杂性策略(LOW)
set global validate_password_length=3;       # 设置密码复杂性要求密码最低长度为3

select @@validate_password_policy;           # 查看密码复杂性策略
select @@validate_password_length;           # 查看密码复杂性要求密码最低长度大小

show variables like 'validate_password%';    # 查询具体策略
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
注:补充,在MySQL8.0以后可能这个变量名和之前的不同,设置时请注意
如:set global validate_password.policy=0; ## 关闭密码复杂性策略

  终于可以设置灵魂密码了 : mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123';

6:设置MySQL远程登录

①:本地需要ping一下远程的IP地址是否是网络畅通
    ping xxx.xxx.xxx.xxx
②:确保当前MySQL端口已被放开或者关闭了防火墙
    查看防火墙状态:systemctl status firewalld.service
    开启防火墙:systemctl start firewalld.service
    关闭防火墙:systemctl stop firewalld.service
    若开启了防火墙需要开启3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
    更新防火墙规则:firewall-cmd --reload
③:修改允许远程登录
    SELECT Host, User FROM mysql.user;
    UPDATE mysql.user SET Host = '%' WHERE User = 'root';
    flush privileges;
    说明:`%`是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为"192.168.1."的客户端都可以连接。
         如果`Host=%`,表示所有IP都有连接权限。
    注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置

7:创建用户并授权(具体参考用户权限管理)

  MySQL中的用户账户由用户名和主机部分组成,要创建MySQL账户语法如下

基本创建:
    语法:mysql> CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
    # '用户名'@'localhost' 其中localhost代表设置只能从localhost本机连接到MySQL服务器,无法远程

    语法:mysql> CREATE USER '用户名ser'@'119.28.68.52' IDENTIFIED BY '密码';
    # '用户名'@'119.28.68.52' 只能从IP 119.28.68.52 的计算机授予(远程)访问权限

    语法:mysql> CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
    # '用户名'@'%' 可以从任何主机连接到MySQL

用户账户权限设置:
    ALL PRIVILEGES  - 授予用户帐户的所有权限。
    CREATE          - 允许用户帐户创建数据库和表。
    DROP            - 允许用户帐户删除数据库和表。
    DELETE          - 允许用户帐户从特定表中删除行。
    INSERT          - 允许用户帐户将行插入特定表。
    SELECT          - 允许用户帐户读取数据库。
    UPDATE          - 允许用户帐户更新表行。
    语法:mysql> GRANT ALL 权限1,权限2,... ON 分配权限的数据库名称 . * TO '用户名'@'%';

一些示例如下:
    对特定数据库上的用户帐户授予所有权限:
        GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';
    为所有数据库上的用户帐户授予所有权限:
        GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';
    通过数据库中的特定表格对用户帐户的所有权限:
        GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';
    通过特定数据库为用户帐户授予多个权限:
        GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';
        
显示MySQL用户帐户权限
    要查找授予特定MySQL用户帐户的权限,请使用SHOW GRANTS语句:
    SHOW GRANTS FOR '用户名'@'localhost';
# 首先我创建一个数据库,为了给用户分配上权限
CREATE DATABASE IF NOT EXISTS school DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# 创建用户
CREATE USER 'jack'@'%' IDENTIFIED BY '54088';           # 可远程访问权限
CREATE USER 'jack'@'localhost' IDENTIFIED BY '54088';   # 本地访问的权限
# 分配school表给用户jack最大权限
GRANT ALL PRIVILEGES ON school . * TO 'jack'@'%';
# 刷新配置
flush privileges;

 # 撤销MySQL用户上的权限

  用户帐户撤消一个或多个权限的语法与授予权限时几乎相同。如要通过特定数据库撤消用户帐户的所有权限,请使用以下命令:

     REVOKE ALL PRIVILEGES ON school.* FROM 'jack'@'%';

 # 删除MySQL用户账户

   DROP USER 'jack'@'%';

8:补充MySQL密码强度评估

  其实在不同的MySQL版本中都有可能出现设置密码时需要强度评估,对于若密码则无法设置成功;提示不符合策略,这里告诉你,密码为8位并且包含特殊字符、大小写字母、数字;报错信息: Your password does not satisfy the current policy requirements

MySQL安装后一般默认会自动安装密码校验插件!
①:卸载MySQL插件、组件(卸载完我们设置密码将不再受限制)
    -- 卸载MySQL密码强度校验插件
    UNINSTALL PLUGIN validate_password;
    -- 卸载MySQL密码强度校验组件
    UNINSTALL COMPONENT 'file://component_validate_password';

②:安装MySQL密码校验插件和组件
    -- 安装MySQL密码强度校验插件
    INSTALL PLUGIN validate_password SONAME 'validate_password.so';
        -- 说明:此方法会注册到元数据,也就是mysql.plugin表中,所以不用担心MySQL重启后插件会失效。
    -- 安装MySQL密码强度校验组件
    INSTALL COMPONENT 'file://component_validate_password';
    查询安装后效果:
        SELECT * FROM mysql.component;
            +--------------+--------------------+------------------------------------+
            | component_id | component_group_id | component_urn                      |
            +--------------+--------------------+------------------------------------+
            |            1 |                  1 | file://component_validate_password |
            +--------------+--------------------+------------------------------------+
        SHOW VARIABLES LIKE 'validate_password%';
            +--------------------------------------+--------+
            | Variable_name                        | Value  |
            +--------------------------------------+--------+
            | validate_password.check_user_name    | ON     | -- 是否验证用户名
            | validate_password.dictionary_file    |        | -- 密码策略文件,策略为STRONG才需要
            | validate_password.length             | 8      | -- 密码长度
            | validate_password.mixed_case_count   | 1      | -- 大小写字符长度,至少一个
            | validate_password.number_count       | 1      | -- 数字至少一个
            | validate_password.policy             | MEDIUM | -- 密码策略(0:LOW、1:MEDIUM、2:STRONG)
            | validate_password.special_char_count | 1      | -- 特殊字符至少一个
            +--------------------------------------+--------+
关于 validate_password 组件对应的系统变量说明:
    validate_password_check_user_name
        【默认NO】:设置为ON的时候表示能将密码设置成当前用户名。
    validate_password_dictionary_file
        【默认空】:用于检查密码的字典文件的路径名
    validate_password_length
        【默认8】:密码的最小长度,也就是说密码长度必须大于或等于8
    validate_password_mixed_case_count
        【默认1】:如果密码策略是中等或更强的,validate_password要求密码具有的小写和大写字符的最小数量。
                  对于给定的这个值密码必须有那么多小写字符和那么多大写字符。
    validate_password_number_count
        【默认1】:密码必须包含的数字个数
    validate_password_policy
        【默认MEDIUM】:密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定。0/LOW:只检查长度
                      1/MEDIUM:检查长度、数字、大小写、特殊字符。2/STRONG:检查长度、数字、大小写、特殊字符、字典文件
    validate_password_special_char_count
        【默认1】:密码必须包含的特殊字符个数
提示:组件和插件的默认值可能有所不同。例如,MySQL 5.7. validate_password_check_user_name的默认值为OFF。

③:修改安全策略(设置只检查长度策略并设置位数3位)
    SET GLOBAL validate_password.policy = 0;
    SET GLOBAL validate_password.length = 3;

④:测试密码强度
    如果你创建密码是遇到“Your password does not satisfy the current policy requirements”,可以通过函数组
    件去检测密码是否满足条件:0-100。当评估在100时就是说明使用上了最基本的规则:大写+小写+特殊字符+数字组成的8位以上密码
    SELECT VALIDATE_PASSWORD_STRENGTH('123');
        +-----------------------------------+
        | VALIDATE_PASSWORD_STRENGTH('123') |
        +-----------------------------------+
        |                                 0 |
        +-----------------------------------+
        -- 注:密码强度0;代表长度小于4
    SELECT VALIDATE_PASSWORD_STRENGTH('1234');
        +------------------------------------+
        | VALIDATE_PASSWORD_STRENGTH('1234') |
        +------------------------------------+
        |                                 25 |
        +------------------------------------+
        -- 注:密码强度25;代表Length ≥ 4 and < validate_password.length
    SELECT VALIDATE_PASSWORD_STRENGTH('aaAA$$!!66');
        +------------------------------------------+
        | VALIDATE_PASSWORD_STRENGTH('aaAA$$!!66') |
        +------------------------------------------+
        |                                      100 |
        +------------------------------------------+
        -- 注:密码强度100代表符合
注意:如果没有安装validate_password组件或插件的话,那么这个函数永远都返回0。 关于密码复杂度对应的密码复杂度策略;
具体指数如下:
    Length < 4                                      0
    Length ≥ 4 and < validate_password.length       25
    Satisfies policy 1 (LOW)                        50
    Satisfies policy 2 (MEDIUM)                     75
    Satisfies policy 3 (STRONG)                     100

三:Windows10安装MySQL5.7(解压版)

  MySQL下载官网  这里我选择 MySQL5.7.35 的版本安装,因为MySQL5+以后的版本都是收费的了。

下载好解压找一个要安装的路径下解压即可!!

1:配置环境变量

2:增加MySQL配置文件

  在我们解压的MySQL目录里创建一个 my.ini 的MySQL配置文件;并设置如下基本属性

[client]
# MySQL客户端端口
port=3306
[mysql]
# MySQL默认字符集编码
default-character-set=utf8
[mysqld]
# MySQL端口
port=3306
# MySQL安装路径
basedir="D:/DevDirectory\MySQL5.7.35/mysql-5.7.35-winx64/"
# MySQL数据库文件路径
datadir="D:/DevDirectory\MySQL5.7.35/mysql-5.7.35-winx64/data/"
# MySQL数据库默认编码
character-set-server=utf8
# 表存储引擎方式 INNODB与MyISAM两种
default-storage-engine=MyISAM
# SQL验证模式
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

log-bin=mysql-bin
#数据库唯一ID,主从的标识号绝对不能重复。
server-id=1

3:注册MySQL服务(也就是安装)

  以管理员方式进入CMD后在命令提示符里执行 mysqld --install 安装MySQL服务指令(必须执行)

语法:mysqld --install MySQL --defaults-file=MySQL配置文件路径
执行:mysqld --install MySQL --defaults-file=D:\DevDirectory\MySQL5.7.35\mysql-5.7.35-winx64\my.ini
显示如下代表安装完毕:

The service already exists!
The current server installed: D:\DevDirectory\MySQL5.7.35\mysql-5.7.35-winx64\bin\mysqld MySQL

初始化:mysqld --initialize --user=mysql --console

注:执行命令可能会出现 “由于找不到MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题。原因:VC运行库是在Windows系统下运行Visual Studio开发的应用必备组件,没有安装的话无法运行软件,会出现缺少DLL的情况。
解决:可以去微软官网直接下载 vcredist_x64.exe  根据系统下载自己对于的版本,下载后打开安装即可
启动mysql服务:net start mysql
登录mysql:mysql -u root -p
回车后会出现Enter password: 这里要输入上面的临时密码:uaiPL<H)g3GI
登录成功后,需要马上重置密码才能正常访问使用,这里设置 123 
    alter user user() identified by "123";

四:Windows10安装卸载常用版本(安装版)

  具体参考文档腾讯文档:安装卸载MySQL8.0、MySQL5.7、MySQL5.5

posted @ 2021-05-18 18:29  蚂蚁小哥  阅读(1555)  评论(0编辑  收藏  举报