一、下载MySQL5.7的rpm安装包

选择合适的版本,这里我们使用的是MySQL5.7.33;下载完成后发送到自己的CentOS7服务器里,这里可以通过Xftp

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_运维

二、卸载已安装的MySQL(没安装过则跳过)

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_运维_02

按照顺序卸载:

rpm -e --nodeps mysql-community-server rpm -e --nodeps mysql-community-client rpm -e --nodeps mysql-community-libs rpm -e --nodeps mysql-community-common

 卸载完基本的环境后,我们要清理依赖的文件(数据库配置文件及数据库数据文件)

-- 删除数据库配置文件(一般情况下卸载了mysql这个文件也会被自动删除) rm -rf /etc/my.cnf -- 删除数据库数据文件(包含系统数据库表和自定义数据库表) rm -rf /var/lib/mysql -- 删除日志临时文件(比如安装后产生密码的文件,不删除会发现安装后查询2个初始密码,但以下面的为主) rm -rf /var/log/mysqld.log

三、MySQL安装环境准备

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

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

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_centos_03


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

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

yum install libaio -y yum install net-tools -y

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

  • 安装时必须严格遵守安装顺序 依赖关系依次为 common → libs → client → server
  • 注:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_centos_04


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版本 mysqladmin --version

  • 启动及查询状态 

# 查询MySQL在系统的状态 [root@VM-8-15-centos ~]# systemctl status mysqld # 启动MySQL数据库 [root@VM-8-15-centos ~]# systemctl start mysqld # 关闭MySQL数据库 [root@VM-8-15-centos ~]# systemctl stop mysqld # 重启MySQL数据库 [root@VM-8-15-centos ~]# systemctl restart mysqld # 查看MySQL进程 [root@VM-8-15-centos ~]# ps -ef | grep mysql

五、登录安装的MySQL5.7

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

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_MySQL_05

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

# new_password替换成自己的密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_linux_06

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

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

看到上面设置个密码那么复杂,还记不住,那我们修改一下策略(设置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     |
+--------------------------------------+-------+

终于可以设置灵魂密码了 : mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123';(建议不要设置成这样!!!)

六、创建用户并授权

 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 chemical_safety DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
# 创建用户
CREATE USER 'chemical'@'%' IDENTIFIED BY 'aaAA$$!!66';           # 可远程访问权限
CREATE USER 'jack'@'localhost' IDENTIFIED BY '54088';   # 本地访问的权限
# 分配school表给用户jack最大权限
GRANT ALL PRIVILEGES ON chemical_safety.* TO 'chemical'@'%';
# 刷新配置
flush privileges;

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

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

  • 删除MySQL用户账户

DROP USER 'jack'@'%';

七、修改my.cnf配置文件

这个配置比较通用,适合中小企业

[mysqld]

#默认
port=3306

#数据目录
datadir=/var/lib/mysql

#该条配置需在[client]段同时配置
socket=/var/lib/mysql/mysql.sock

#多客户访问同一数据库,该选项默认开启
symbolic-links=0

#默认
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#打开时,和max_connections对比,取大数
open_files_limit=65535

#开启慢查询日志相关,默认10秒,慢查询日志路径,记录没有使用索引的sql
slow_query_log=on
long_query_time=10
slow_query_log_file=/var/log/mysql/slow_query.log
log-queries-not-using-indexes=1

#InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
default_storage_engine=InnoDB
innodb_file_per_table=on

#生产中要改,建议为操作系统内存的70%-80%,需重启服务生效
innodb_buffer_pool_size=1G

#忽略主机名解析,提高访问速度(注意配置文件中使用主机名将不能解析)
skip_name_resolve=on

#忽略表单大小写
lower_case_table_names=0

#设定默认字符为utf8mb4
character-set-server=utf8mb4

#SQL_MODEL
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

重启MySQL服务

systemctl restart mysqld

八、Linux上安装了Mysql,然后在Windows环境下通过Navicat来连接时,出现报错1045 Access denied for user 'root'@'XXX' (using password: YES),如下:

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_centos_07

首先,在Linux中是可以正常登录mysql,所以不会是用户密码错误导致的。

接着,我考虑到可能与防火墙有关,于是检查了Linux下的防火墙是否开放了对应端口,发现此时的防火墙是关闭状态,因此可以排除防火墙的影响。

最后,突然想到默认情况下mysql的root用户是不能远程连接的,于是在Linux中登录mysql,发现果然是这个原因,解决过程如下:

  • 1.登录mysql,命令:mysql -u root -p

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_mysql_08

  • 2.查看mysql库中的user表的host字段

使用mysql库:use mysql
查询信息:select user,host from user

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_linux_09

host字段中,localhost表示只允许本机访问,要实现远程连接,可以将root用户的host改为%,%表示允许任意host访问,如果需要设置只允许特定ip访问,则应改为对应的ip。

  • 3.修改root用户的host字段,命令:update user set host="%" where user="root"
  • 4.使本次修改立即生效,命令:flush privileges

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_运维_10

最后,在windows下的Navicat中远程连接,便不会报错了。

centos7rpm安装自动下载rpm文件 centos7怎么安装rpm包_MySQL_11