#1.先检查是否有安装过my sql

rpm -e mysql

mysql补丁包从哪下载_mysql

#2.检查有没有安装,如有则删除 

rpm -qa | grep mysql

#3.卸载MariaDB

如果直接点击rpm包安装会得到错误提示。因为CentOS的默认数据库已经不再是MySQL了,而是MariaDB,为什么呢?

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

查看当前安装的mariadb包:

rpm -qa | grep mariadb

mysql补丁包从哪下载_devops_02

将它们统统强制性卸载掉:

rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

mysql补丁包从哪下载_devops_03

再次查询的时候就已经没有了

mysql补丁包从哪下载_运维_04

#4.现在开始正式安装了

到这里要达到的目的:centos 7 里面没有安装mysql mariadb 纯净的 下面开始正式安装

#5.安装依赖包

yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel

mysql补丁包从哪下载_mysql_05

#6.下载mysql

MySQL :: Download MySQL Community Server

MySQL :: Download MySQL Community Server (Archived Versions)

mysql补丁包从哪下载_mysql_06

在/opt目录下下载mysql(将/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz放到 /opt 文件夹下)

wget https://downloads.mysql.com/archives/get/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

mysql补丁包从哪下载_mysql_07

#7.创建mysql用户组

groupadd mysql

#8.在mysql用户组下创建用户mysql

useradd mysql -g mysql

mysql补丁包从哪下载_mysql补丁包从哪下载_08

#9.解压mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

tar xzvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

mysql补丁包从哪下载_自动化_09

然后把mysql-5.7.24-linux-glibc2.12-x86_64名称修改为mysql

mv mysql-5.7.24-linux-glibc2.12-x86_64/ mysql

mysql补丁包从哪下载_mysql补丁包从哪下载_10

在创建mysql存放目录之前,我们要先查询一下服务器的数据盘在哪里,一般情况下,/usr/local这个目录是根目录,大部分想阿里云的服务器,这个根目录只有40G的存储空间,但我们数据库是一个一直在运行,都会有数据的生成的地方,为了长久运行,我们需要先查询出服务器哪个目录是数据盘,然后通过创建快捷方式,创建一个映射的目录过去。这样下面整个安装路径都不会有影响。

查询这个服务器的存储盘。

df -h

比如我磁盘数据盘挂载在/home目录下,接下来我会在home目录下创建一个mysql目录

cd /home
mkdir  mysql

 最后创建一个快捷方式:

ln -s /home/mysql  /usr/local/mysql

特别注意:这一块要根据服务器的具体情况,灵活变通。

把mysql移到/usr/local/ 目录下

mv mysql /usr/local/

在/usr/local/mysql下创建data目录

mkdir /usr/local/mysql/data

#10.将mysql目录及下面的文件、子目录文件主改成mysql

chown -R mysql:mysql mysql/

 #11.给与mysql目录及下面的文件、子目录755权限

chmod -R 755 mysql/

mysql补丁包从哪下载_devops_11

#12.编译安装并初始化mysql,记住命令行末尾的密码 

/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

mysql补丁包从哪下载_mysql_12

红色部分是初始化密码,需要记住  l3=I-*3Aa9T,

#13.启动mysql服务

/usr/local/mysql/support-files/mysql.server start

mysql补丁包从哪下载_devops_13

#14.做个软连接,重启mysql服务

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

重启命令:

service mysql restart

mysql补丁包从哪下载_运维_14

#15.做个软链接,将安装目录下的mysql 放在/usr/bin 目录下

ln -s /usr/local/mysql/bin/mysql /usr/bin

注意:该链接的作用就是,可以在全局范围内都可以使用mysql命令 

#16.登录msyql,输入密码(密码为步骤11初始化生成的密码)

mysql -u root -p

#17.修改密码为123456

alter user 'root'@'localhost' identified by '123456';

use mysql;

update user set user.Host='%' where user.User='root';

flush privileges;

quit

mysql补丁包从哪下载_运维_15

#18.编辑my.cnf,添加配置文件,配置内容为

创建慢日志文件,并赋予权限

vi mysql_slow.log

 插入一点字符,然后再置空:  > mysql_slow.log

赋予权限:

chmod -R 777 mysql_slow.log
vi /usr/local/mysql/my.cnf

添加如下内容进行

[mysqld]
port = 3306

lower_case_table_names=1
character_set_server=utf8
max_connections=2000
innodb_buffer_pool_size=2048M

#中国标准时间, 会输出08:00
default-time_zone = '+8:00'

default-storage-engine=INNODB
collation-server=utf8_general_ci

# 查询设置
# 开启慢查询日志(或设置1)
slow_query_log=1
# # 指定日志文件保存路径,不指定的话默认在数据库文件目录下  注意必须手动建文件 及权限
slow_query_log_file=/var/log/mysql_slow.log
# # 指定达到多少秒才算慢查询 微妙
long_query_time=5
# 记录没有使用索引的查询语句
#log_queries_not_using_indexes=on
# 示每分钟允许记录到slow log的且未使用索引的sql语句次数
#log_throttle_queries_not_using_indexes=10
# 日志存储方式
log_output=FILE

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

注意事项:这里如果改了默认路径,这需要把my.cnf配置文件存放到/etc/my.cnf这个路径下。否则这个配置文件不生效。

如何检测配置文件是否生效,我们安装的时候,mysql默认是区分大小写的,所以我们只要进数据库中使用以下语句查询,如果lower_case_table_names为0,则代码配置文件没有生效。

show variables like "%case%";
show VARIABLES like '%slow%';

 

mysql补丁包从哪下载_mysql_16

开启远程访问:

grant all privileges on *.* to root@'%' identified by '123456';
flush privileges;

mysql补丁包从哪下载_devops_17

最后关防火墙

systemctl stop firewalld.service

mysql补丁包从哪下载_mysql补丁包从哪下载_18

#19.mysql 创建用户并赋予用户权限

#19.1.查看用户

select user,host from mysql.user;

#19.2.创建用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username:用户名;

host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;

password:用户登录密码;

#19.3.授权

GRANT ALL PRIVILEGES ON . TO 'username'@'%' IDENTIFIED BY 'password';

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by “用户密码”;

.代表所有权;@ 后面是访问MySQL的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。

注意:如何只分配读写表权限,不能删库?

例子:为food用户分配food_safety库所有权限

GRANT ALL PRIVILEGES ON food_safety.* TO 'food'@'%' IDENTIFIED BY 'food2021';

然后创建另外一个用户,只有增删改查权限,但没有删库权限

GRANT SELECT ON food_safety.* TO 'foodadmin'@'%' IDENTIFIED BY '123456';
GRANT UPDATE ON food_safety.* TO 'foodadmin'@'%' IDENTIFIED BY '123456';
GRANT INSERT ON food_safety.* TO 'foodadmin'@'%' IDENTIFIED BY '123456';
GRANT DELETE ON food_safety.* TO 'foodadmin'@'%' IDENTIFIED BY '123456';
/*授予用户通过外网IP对于该数据库的全部权限*/

 grant all privileges on `test`.* to 'test'@'%';

 /*授予用户在本地服务器对该数据库的全部权限*/
 
 grant all privileges on `test`.* to 'test'@'localhost';   

  grant select on test.* to 'user1'@'localhost';  /*给予查询权限*/

  grant insert on test.* to 'user1'@'localhost'; /*添加插入权限*/

  grant delete on test.* to 'user1'@'localhost'; /*添加删除权限*/

  grant update on test.* to 'user1'@'localhost'; /*添加权限*/

 flush privileges; /*刷新权限*/

 #19.3.1.查看授权

SHOW GRANTS;

mysql补丁包从哪下载_运维_19

SHOW GRANTS FOR 'food'@'%';

 

mysql补丁包从哪下载_devops_20

#19.3.2.删除权限 

第一种方式:

revoke all privileges on databasename.tablename from 'username'@'host';

FLUSH PRIVILEGES;

例子: 为food用户删除所有权限

REVOKE ALL PRIVILEGES ON food_safety.* FROM 'food'@'%';

FLUSH PRIVILEGES;

#19.4.刷新权限

FLUSH PRIVILEGES;

 

#19.5.修改密码 用set password命令

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

SET PASSWORD FOR 'food'@'%' = PASSWORD('123456');

20.删掉mysql用户

drop
       

drop user XXX;

删除已存在的用户,默认删除的是'XXX'@'%'这个用户,如果还有其他的用户如'XXX'@'localhost'等,不会一起被删除。如果要删除'XXX'@'localhost',使用drop删除时需要加上host即drop user 'XXX'@'localhost'。

delete

delete from user where user='XXX' and host='localhost';

例子: drop user 'mego'@'localhost';

其中XXX为用户名,localhost为主机名。
区别

drop不仅会将user表中的数据删除,还会删除其他权限表的内容。而delete只删除user表中的内容,所以使用delete删除用户后需要执行FLUSH PRIVILEGES;刷新权限,否则下次使用create语句创建用户时会报错。

21.指定特定ip进行访问数据库

use mysql;

update user set user.Host='localhost' where user.User='mego';

grant all privileges on *.* to mego@'localhost' identified by '123456';

flush privileges;

quit

步骤是先修改用户的Host,然后再重新赋予一下权限。注意了,如果是指定特定的ip,则就算在本地也无法进行访问。

如果是指定ip,则把localhost改成ip即可

这几个地方需要修改:

mysql补丁包从哪下载_devops_21