#1.先检查是否有安装过my sql
rpm -e 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
将它们统统强制性卸载掉:
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
再次查询的时候就已经没有了
#4.现在开始正式安装了
到这里要达到的目的:centos 7 里面没有安装mysql mariadb 纯净的 下面开始正式安装
#5.安装依赖包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel
#6.下载mysql
MySQL :: Download MySQL Community Server
MySQL :: Download MySQL Community Server (Archived Versions)
在/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
#7.创建mysql用户组
groupadd mysql
#8.在mysql用户组下创建用户mysql
useradd mysql -g mysql
#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-5.7.24-linux-glibc2.12-x86_64名称修改为mysql
mv mysql-5.7.24-linux-glibc2.12-x86_64/ mysql
在创建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/
#12.编译安装并初始化mysql,记住命令行末尾的密码
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
红色部分是初始化密码,需要记住 l3=I-*3Aa9T,
#13.启动mysql服务
/usr/local/mysql/support-files/mysql.server start
#14.做个软连接,重启mysql服务
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
重启命令:
service mysql restart
#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
#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%';
开启远程访问:
grant all privileges on *.* to root@'%' identified by '123456';
flush privileges;
最后关防火墙
systemctl stop firewalld.service
#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;
SHOW GRANTS FOR 'food'@'%';
#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即可
这几个地方需要修改: