一、到官网下载安装包
可以选择使用rpm的文件安装或者使用tar文件安装https://downloads.mysql.com/archives/community/
此处我是用的是tar文件安装
若使用rpm安装,参考这篇博客
https://www.cnblogs.com/lzhdonald/p/12511998.html
二、安装
1.首先查看是否已经安装异步IO接口libaio
rpm -qa|grep libaio
若未安装使用yum安装下
yum -y install libaio
2.将安装包解压到自定义的目录中
tar xvzf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /server/
并将加压后的目录名改为mysql-5.7
3.添加系统用户组和组成员用户,并将目录赋予群成员以及群组
添加系统sqldb组
groupadd sqldb
在sqldb组中添加成员mysql_user_dev
useradd -r -g sqldb mysql_user_dev
赋予解压后的目录权限于用户mysql_user_dev和群组sqldb
4.安装mysql,进入mysql-5.7目录
bin/mysqld --initialize --user=mysql_user_dev --basedir=/server/mysql-5.7 --datadir=/server/mysql-5.7/data
执行完后会生成一个临时随机密码
执行以下命令创建RSA private key
bin/mysql_ssl_rsa_setup --datadir=/server/mysql-5.7/data
执行完后进入data目录发现有的文件的用户以及用户组不是刚刚创建的,因此再改一下
执行指令修改目录的用户以及用户组
chown -R mysql_user_dev:sqldb ./
再次查看data目录下的文件的用户及用户组信息
5.配置/etc/my.cnf文件
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/server/mysql-5.7
datadir=/server/mysql-5.7/data
socket=/tmp/mysql.sock
#不区分大小写
lower_case_table_names = 1
#不开启sql严格模式
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
log-error=/var/log/mysqld.log
pid-file=/server/mysql-5.7/data/mysqld.pid
#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d
配置文件的说明解释:
port = 3306:指定了Mysql开放的端口;basedir=/server/mysql-5.7:指定Mysql安装的绝对路径;datadir = /server/mysql-5.7/data:指定Mysql数据存放的绝对路径;socket = /tmp/mysql.sock:套接字文件;log-error = /var/log/mysqld.log:mysql生成的错误日志存放的路径,它是一个文本文件,遇到有什么问题想查看日志时可以到这个文件里去找线索
配置文件的参数及参数值详细说明可以查看这两篇文章:
https://www.cnblogs.com/JonaLin/p/11067661.html
https://www.cnblogs.com/langdashu/p/5889352.html
6.可以设置开机自启动MySQL
cp /server/mysql-5.7/support-files/mysql.server /etc/init.d/mysqld
7.配置mysql的环境变量
view /etc/profile
保存后再编译下
source /etc/profile
8.启动并设置开机自启动,修改登录密码
报错,在刚刚复制粘贴的/etc/init.d/mysqld文件添加权限即可
然后重启mysqld,成功
设置mysqld开机自启动
systemctl enable mysqld
9.结合密码登录mysql
先输入指令
mysql -uroot -p
然后输入上面的临时密码,登录成功
登录后修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
设置允许远程连接数据库
update user set user.host='%' where user.user = 'root';
注意上面的%的意思:%是一个通配符,用以匹配所有的IP地址,但是不能匹配到locahost这个特殊的域名
详细解释可以查看这篇文章:
https://gohalo.me/post/mysql-localhost-vs-127.0.0.1-introduce.html
刷新权限
flush privileges;
授权新用户
grant all privileges on *.* to 'user_test'@'%' identified by '123123' with grant option;
查看是否大小写敏感,若显示的为0,则是敏感的,应在/etc/my.cnf文件后面加上属性,属性值lower_case_table_names=1,然后重启
开放端口,MySQL的默认端口是3306,若需要可以自行配置:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
参数说明:
--zone #作用域
--add-port=3306/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
然后重启下防火墙,查看开放端口的列表
然后使用windows的mysql连接工具查看数据库的连接我是用navicat,成功,上述user_test用户的权限是赋予全部,实际开发中,会根据不同账号赋予不同的权限
至此mysql安装成功
下面简单的做一些数据库的操作吧
查询当前操作的用户
而在实际开发中有时有的数据库不会暴露给某个用户,而且该用户只有查询权限,权限级别较低
例如:增加一个test2用户,密码为123456,只能在192.168.236.1上登录,并对数据库testdb2只有有查询,没有增加,修改和删除的功能。需要在mysql的root用户下进行
grant select on testdb2.* to test2@192.168.236.1 identified by '123456';
此时本机连接数据库连不上,只能特定的ip能连接的上
只有查询权限,无其余权限
注意图中有information_schema的数据库未分配权限却也能看到是由于:information_schema只是一个视图,新建用户就算没有任何权限都能查到这个视图,但该用户只能看到自己被授权的信息,information_schema库的表是只读表,其实是视图。
详情解释查看这篇文章:https://www.jianshu.com/p/5903e8c002ed
详情的权限分配查看这篇文章:https://www.cnblogs.com/wangchaoyuana/p/7545419.html