Centos 7 MYSQL5.7 安装与卸载
一、卸载已安装的MySql
1.1 rpm查看安装
rpm -qa | grep -i mysql
1.2 rpm 卸载
清除上述查找出来的MySQL
rpm -e mysql57-community-release-el7-9.noarch
rpm -e mysql-community-server-5.7.17-1.el7.x86_64
rpm -e mysql-community-libs-5.7.17-1.el7.x86_64
rpm -e mysql-community-libs-compat-5.7.17-1.el7.x86_64
rpm -e mysql-community-common-5.7.17-1.el7.x86_64
rpm -e mysql-community-client-5.7.17-1.el7.x86_64
cd /var/lib/
rm -rf mysql/
1.3 清除余项
删除mysql的所有配置
rm –rf /usr/my.cnf
rm -rf /root/.mysql_sercret
剩余配置检查
chkconfig --list | grep -i mysql
chkconfig --del mysqld
根据上面的列表,删除 ,如:mysqld
二、安装MySql
2.1 下载yum源
现在centos上默认是没有yum源的,yum安装的是 MariaDB,所以我们需要自己先配置yum源。
wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'
2.2 安装yum源
rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
2.3 安装MySql
yum install -y mysql-community-server
2.4 启动mysql
mysql 基础配置说明(vim /etc/my.cnf)
character-set-server=utf8
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 设置时区为东八区
default-time_zone = +8:00
# 密码策略
validate_password_policy=0
validate_password_length=1
# 不区分大小写
lower_case_table_names=1
# 慢查询
slow_query_log=on
long_query_time=3
slow_query_log_file=/var/lib/mysql/VM_0_12_centos-slow.log
log_queries_not_using_indexes=on
# 缓存
query_cache_type=on
query_cache_size=102400
在centos7中,没有了service命令,都是使用systemctl命令。
systemctl start mysqld
查看状态
systemctl status mysqld
2.5 登录数据库,修改数据库密码
mysql5.7的新特性之一就是在初始化的时候会生成一个自定义的密码,然后你需要找到这个密码,登录的时候输入。注意,输入密码的时候是不显示。
倘若没有/var/log/mysqld.log,可以先删除原来安装过的mysql残留的数据
rm -rf /var/lib/mysql
再启动mysql
systemctl start mysqld #启动MySQL
找到密码: 红框的地方就是密码:
grep 'temporary password' /var/log/mysqld.log
登录数据库:这里-p之后不用输入密码,回车后再输入。改过密码之后登录则是直接在-p后加密码了。
注意,修改的密码太简单会不给修改,把大小写字母和数字加上就肯定可以了。如果不想设置那么复杂密码,可以修改规则:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
修改密码:
SET PASSWORD = PASSWORD('123456');
设置远程可以登录(建议root不要授权远程访问,请创建新mysql用户)
现在这样是无法在本地用工具登录访问的,现在要做两件事,一件事是将云服务器上的3306端口开放;另一件事是配置远程可以访问。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
先设置刚才的密码可以远程登录,然后使用flush命令使配置立即生效,如果还不行可以尝试重启一下数据库。
其他方案:
#vim /etc/my.cnf(注:windows下修改的是my.ini)
在文档内搜索mysqld定位到[mysqld]文本段,在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程(修改完成后将此行注释掉)。
mysql5.7: update user set password=password('123456') where user='root' and host='localhost';
mysql8: update mysql.user set authentication_string='123456' where user='root';
数据库8.0已经没有password这个字段, password字段改成了authentication_string, 所以需要将password改成authentication_string。
2.6 修改一些简单的配置
yum安装的MySql配置文件默认在/etc文件夹下:
vim /etc/my.cnf
在[mysqld]下面添加,不需要分号
字符集:注意是utf8而不是utf-8!
character-set-server=utf8
这时候使用show variables like 'char%';就可以查看到字符集都是utf8了
sql支持group by语句
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
设置时区为东八区
default-time_zone = '+8:00'
最后重启数据库,使配置生效。
systemctl restart mysqld
其他配置
# 不区分大小写
lower_case_table_names=1
#慢查询
slow_query_log=on
long_query_time=3
slow_query_log_file=/var/lib/mysql/VM_0_12_centos-slow.log
log_queries_not_using_indexes=on
# 缓存
query_cache_type=on
query_cache_size=102400
慢查询基本配置
- slow_query_log 启动停止技术慢查询日志
- slow_query_log_file 指定慢查询日志得存储路径及文件(默认和数据文件放一起)
- long_query_time 指定记录慢查询日志SQL执行时间得伐值(单位:秒,默认10秒)
- log_queries_not_using_indexes 是否记录未使用索引的SQL
- log_output 日志存放的地方【TABLE】【FILE】【FILE,TABLE】
慢查询分析
慢查询的日志记录非常多,要从里面找寻一条查询慢的日志并不是很容易的事情,一般来说都需要一些工具辅助才能快速定位到需要优化的SQL语句,下面介绍两个慢查询辅助工具
Mysqldumpslow(pt_query_digest)
常用的慢查询日志分析工具,汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
语法:
mysqldumpslow -s r -t 10 slow-mysql.log
-s order (c,t,l,r,at,al,ar)
c:总次数
t:总时间
l:锁的时间
r:总数据行
at,al,ar :t,l,r平均数 【例如:at = 总时间/总次数】
-t top 指定取前面几天作为结果输出
mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_12_centos-slow.log
用户权限
创建一个普通用户并授权
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
授权: grant all on *.* to oyc@'%' identified by '123456';
上面,all表示所有的权限(如读、写、查询、删除等操作);
.有两个*,前面的*表示所有的数据库,后面的*表示所有的表;
identified by后面跟密码,用单引号括起来,这里user1指的是localhost上的user1。
给网络上其他机器上的某用户授权:
grant all on oyc1.* to 'oyc1'@'192.168.33.128' identified by '111222';
上面,用户和主机的IP都用单引号括起来,两者之间有@符号,IP可以用%代替,表示所有主机。
查看 MySQL 用户权限
查看当前用户(自己)权限:
show grants;
查看其他 MySQL 用户权限:
show grants for oyc@localhost;
撤销已经赋予给 MySQL 用户权限的权限。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:
grant all ON oyc1.* to 'oyc1'@'%';
revoke all on oyc1.* from 'oyc1'@'%';
Mysql安装位置
//(show variables like "character_sets_dir%")
character_sets_dir : /usr/share/mysql/charsets/
2.7 设置开机启动
systemctl enable mysqld
systemctl daemon-reload