> 文档中心 > Linux服务器上mysql安装部署、mysql数据库防护、mysql用户创建、mysql权限分配

Linux服务器上mysql安装部署、mysql数据库防护、mysql用户创建、mysql权限分配


Linux服务器上mysql安装部署、数据库防护、用户创建以及权限分配


文章目录

  • Linux服务器上mysql安装部署、数据库防护、用户创建以及权限分配
  • 前言
  • 一、Linux服务器上安装配置MySQL
    • 1.下载Linux版本的MySQL
    • 2. 在Linux上安装配置MySQL
  • 二、MySQL安全防护
    • 1.修改MySQL数据库root用户的密码,禁止root用户远程连接
    • 2.修改MySQL的默认3306端口号为其他端口号,关闭服务器不用的端口
    • 3.只允许拥有少量权限的用户远程访问数据库
    • 4.做好数据库备份
  • 三、MySQL创建新用户和分配权限
    • 1. 新建一个mysql用户
    • 2. 为新用户分配权限
    • 3. 测试创建的新用户是否能正常使用
  • 四、MySQL其他常用命令
  • 五、MySQL遇到的一些报错及解决方法
  • 总结

前言

MySQL数据库是最常用的关系型数据库之一,无论是在小规模的demo项目还是商业软件开发中,mysql数据库都十分受欢迎,本文主要介绍Linux环境下mysql的安装部署、安全防护、用户创建以及权限分配等实用操作。


一、Linux服务器上安装配置MySQL

1.下载Linux版本的MySQL

MySQL官方下载地址:https://dev.mysql.com/downloads/mysql/
选择服务器对应的版本,ubuntu服务器直接选ubuntu即可,centos是基于红帽的,直接下载红帽对应的版本即可:Red Hat Enterprise Linux / Oracle Linux
在这里插入图片描述
选择对应的服务器之后,页面会自动刷新,出现该服务器MySQL的各个版本,当前最新的是mysql8.0.28,要根据自己的Linux版本下载,我的是centos7.6,所以选择Linux7 RPM Bundle,下载的是箭头所示的版本:
在这里插入图片描述
下载完成之后上传到服务器上,并解压,注意先创建一个mysql文件夹,将安装包直接放到文件夹里在进行解压,解压的命令:tar -xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar 结果如下图:
在这里插入图片描述

2. 在Linux上安装配置MySQL

解压后的mysql有多个服务,安装部分就能支持使用了,注意安装的时候使用–nodeps --force,要不然会导致失败。如果之前安装过MySQL,要完全删除之前的安装,检查是否已经安装mysql,并删除安装文件:

//检查是否安装过mysqlrpm -qa | grep mysql //删除mysql安装目录rpm -e --nodeps mysql安装目录 

正式安装mysql
1、安装common使用命令:

rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm --nodeps --force

2、安装libs使用命令:

rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm --nodeps --force

3、安装client使用命令:

rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm --nodeps --force

4、安装server使用命令:

rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm --nodeps --force

5、mysql数据库的初始化命令:

mysqld --initialize;chown mysql:mysql /var/lib/mysql -R;systemctl start mysqld.service;systemctl enable mysqld;

以上四条命令的解释,命令1:mysql服务初始化。命令2:指定mysql数据存储位置。命令3:启动mysql服务。命令4:设置mysql服务开机自启动。
6、mysql配置,查看mysql数据库的密码,再执行mysqld --initialize之后,mysql会自动生成一个默认密码,保存在mysqld日志中,查看方式:

cat /var/log/mysqld.log | grep password

7、进行数据库登录,执行命令mysql -uroot -p,输入刚刚的默认密码即可登录成功。
8、修改mysql登录密码,执行以下命令:

alter user 'root'@'%' identified with mysql_native_password by 'your password';

使用新密码即可登录成功:
在这里插入图片描述
9、此时mysql的root用户只能本地访问,不能远程访问,这里先赋予root用户远程访问的权限(这种方法不符合安全规则,后续mysql防护会讲到):

alter user 'root'@'%' identified with mysql_native_password by 'your password';flush privileges;

上面命令作用:命令1:修改root用户远程访问权限(也就是将访问权限从localhost改为%,%表示允许远程访问)。命令2:刷新mysql,一般在执行权限分配、访问修改命令之后,都要刷新mysql,使其生效。
10、mysql默认的端口是3306,但是一般服务器没有打开这个端口,需要设置规则,打开3306端口:
在这里插入图片描述

11、测试连接,使用Navicat进行测试:
在这里插入图片描述
至此,Linux上配置mysql数据库已经完成,现在使用root用户,就能在项目中正常使用服务器上的mysql数据库了。


二、MySQL安全防护

MySQL很容易遭受到攻击,很不幸作者也遇到过数据库攻击的情况,整个数据库被删除了,然后留下一条比特币勒索信息。这令笔者非常生气(想写邮件骂攻击的人),想想还是算了,自己部署的服务器没做任何防护,密码甚至简单到123456,这样不被攻击才怪,于是查阅了相关资料,对mysql进行安全防护。
Linux服务器上mysql安装部署、mysql数据库防护、mysql用户创建、mysql权限分配

1.修改MySQL数据库root用户的密码,禁止root用户远程连接

密码过于简单是数据库遭到攻击的重要原因,因此使用下面命令将root密码设置复杂些,最好有8位以上的字母数字组合:

alter user 'root'@'%' identified with mysql_native_password by 'your password';

直接让应用程序使用root权限是不安全的(root有mysql的所有权限),也就是我在配置mysql时让root用户有远程访问的权限是不安全的,root用户一旦被破解,很容易对mysql数据库展开攻击。正常的情况应该是:root用户仅能本地访问,其他拥有特定权限的用户才能远程访问。执行以下命令关闭root远程访问权限:

update user set host='localhost' where user ='root';flush privileges;

2.修改MySQL的默认3306端口号为其他端口号,关闭服务器不用的端口

修改端口号很简单,在mysql的配置文件里增加端口号配置就可以了,mysql的配置文件位置为:/etc/my.cnf,执行命令:

vi /etc/my.cnf

然后在最后面加上port=2333,2333是我设置的端口号,大家可以根据自己的情况设置,总之别设置3306就行。
在这里插入图片描述
开放2333端口,关闭3306端口。我这里开放的端口都是用得到的端口,不用的端口直接关了就行,防止黑客攻击:
在这里插入图片描述

3.只允许拥有少量权限的用户远程访问数据库

由于禁用了root用户的远程访问,如果你之前用root用户配置了项目的数据库连接,现在应该是不能正常访问MySQL数据库了,所以要设置一个新的用户,这个新用户仅拥有少量的权限(对某个特定的数据库有权限),这样即使黑客通过应用程序数据传输破解了新用户的密码,由于权限限制,也不能对部署在服务器上的MySQL数据库造成多大的危害,这样就大大降低了MySQL的风险。MySQL创建新用户以及权限分配见下文。

4.做好数据库备份

一个优秀的工程师总是会考虑最坏的情况,做好备份能在危急时刻,让你依旧坦然~


三、MySQL创建新用户和分配权限

1. 新建一个mysql用户

创建远程访问用户dbuser:

create user 'dbuser'@'%' identified by 'your password';flush privileges;

2. 为新用户分配权限

赋予dbuser使用test数据库的权限:

grant all privileges on test.* to 'dbuser'@'%' identified by 'your password' with grant option;

这条命令将数据库test的所有表权限赋予用户dbuser,同时with grant option指的是该用户可以给其他用户赋予权限,但是赋予的权限不超过该用户自己的权限(还挺合理的)。

3. 测试创建的新用户是否能正常使用

使用Navicat测试新用户是否正常使用,在使用新用户的连接里,只显示该用户有权限的数据库,例如mysql等数据库,都不可见。
在这里插入图片描述
mysql新增一个用户和为用户分配权限就完成啦,是不是很简单呢。

四、MySQL其他常用命令

这里记录一些常用的MySQL命令,方便后续工作中查找,当做工具箱使用。

//为用户分配权限,这里补充一点,privileges可以替换成select, insert, update, delete, drop, create等来分配具体的某一项权限,有兴趣的小伙伴可以试一试。grant all privileges on test_grant.* to 'testuser1'@'%' with grant option; //查看用户权限show grants for 'testuser1'@'%';//删除用户权限revoke all privileges,grant option from 'testuser1'@'%';//删除用户drop user 'testuser1'@'%';//查询用户和访问权限(本地或者远程)select user, host from mysql.user;//查看用户访问类型、加密方式select user,host,plugin from user; //启动mysql服务systemctl start mysqld.service//停止mysql服务systemctl stop mysqld.service//重启mysql服务systemctl restart mysqld.service//开机自启mysql服务systemctl enable mysqld.service//关闭开机自启mysql服务systemctl disable mysqld.service//查看所有的数据库show databases;//新建数据库create database databaseName;//退出mysqlquit//切换数据库use databaseName;//查看数据库的所有表show tables;//显示表结构describe tableName;

五、MySQL遇到的一些报错及解决方法

这里记录一些mysql使用过程中遇到的问题和解决方法,避免后续再次遇到这样的问题。
1、Client does not support authentication protocol requested by server:客户端不支持服务器请求的身份验证协议,考虑升级mysql客户端
Linux服务器上mysql安装部署、mysql数据库防护、mysql用户创建、mysql权限分配
这里是指安装的mysql8.0及以上,密码加密方式发生了改变,而Navicat不能进行适配,所以解决方法是升级Navicat客户端或者手动修改密码规则,这里选择修改密码规则:

alter user 'root'@'%' identified with mysql_native_password by 'your password';flush privileges;

执行成功之后,就ok啦,可以使用以下命令查看用户及加密方式,

select user,host,plugin from user; 

我们可以看到加密方式有mysql_native_password和caching_sha2_password两种:
在这里插入图片描述
对于这两种加密方式的官方解释如下:

MySQL8.0版本公布了新的密码加密认证插件caching_sha2_password,而先前版本的默认插件是mysql_native_password。根据官方描述,caching_sha2_password和sha256_password(caching_sha2_password和sha256_password类似)的加密性能强于mysql_native_password,比后者拥有更安全的密码散列,因此8.0版本之后将caching_sha2_password作为MySQL的首选认证插件。

总结

至此,Linux上部署MySQL数据库,并进行安全防护,以及增加新用户和权限分配就完美结束啦,花了两个多小时写这篇七千多字的博客,包含MySQL的基础配置和使用。如果帮助到了大家,感谢点赞支持。