由于之前安装的mysql安装方式比较麻烦,这次使用yum的方式来安装mysql数据库,这篇文章记录下mysql的安装过程。

一、安装之前先来了解下linux系统下目录结构

  1. /usr: 系统级的目录,可以理解为C:/Windows/;/usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,可以理解为C:/Windows/System32
    *比如Java的安装目录,我会放在这里。
  2. /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。
    用户自己编译的软件默认会安装到这个目录下。
    *比如Hadoop,Tomcat的安装目录我一般会放在/usr/目录下
  3. /opt:给主机额外安装软件所摆放的目录。用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
    *比如临时上传到Linux里的软件;tar.gz rpm等文件,用作软件仓库。

完整的目录结构说明:

  1. /
    这就是根目录。对你的电脑来说,有且只有一个根目录。所有的东西,我是说所有的东西都是从这里开始。举个例子:当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  2. /root
    这是系统管理员(root user)的目录。对于系统来说,系统管理员就好比是上帝,它能对系统做任何事情,甚至包括删除你的文件。因此,请小心使用root帐号。
  3. /bin
    这里存放了标准的(或者说是缺省的)linux的工具,比如像“ls”、“vi”还有“more”等等。通常来说,这个目录已经包含在你的“path”系 统变量里面了。什么意思呢?就是:当你在终端里输入ls,系统就会去/bin目录下面查找是不是有ls这个程序。
  4. /etc
    这里主要存放了系统配置方面的文件。举个例子:你安装了samba这个套件,当你想要修改samba配置文件的时候,你会发现它们(配置文件)就在/etc/samba目录下。
  5. /dev
    这里主要存放与设备(包括外设)有关的文件(unix和linux系统均把设备当成文件)。想连线打印机吗?系统就是从这个目录开始工作的。另外还有一些包括磁盘驱动、USB驱动等都放在这个目录。
  6. /home
  7. /tmp
  8. /usr
  9. /opt
    这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。
    举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。
  10. /usr/local
    这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面,我想这应该是个不错的主意。
  11. /media
    有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。

其他

  1. /usr/local 这个目录一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。这个目录下面有子目录。自己看看吧。
  2. /usr/share 系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。
  3. /var/log 系统日志存放,分析日志要看这个目录的东西;
  4. /var/spool 打印机、邮件、代理服务器等假脱机目录;

二、mysql5.7安装

  1. 配置YUM源
    mssql官网下载YUM源rpm安装包
    https://dev.mysql.com/downloads/repo/yum/

下载mysql源安装包

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装mysql源

yum localinstall mysql57-community-release-el7-8.noarch.rpm

检查mysql源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"
[root@iZ2ze3bc56k6c8wubzxn9kZ opt]# yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community                 108
mysql-tools-community/x86_64      MySQL Tools Community                       90
mysql57-community/x86_64          MySQL 5.7 Community Server                 347

看到这个表示安装成功

  1. 安装MySQL
    yum install mysql-community-server
  2. 启动MySQL服务
    systemctl start mysqld
  3. 查看MySQL的启动状态
    systemctl status mysqld
[root@iZ2ze3bc56k6c8wubzxn9kZ opt]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2019-05-29 15:33:36 CST; 18s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 19832 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 19759 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 19837 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─19837 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

5月 29 15:33:31 iZ2ze3bc56k6c8wubzxn9kZ systemd[1]: Starting MySQL Server...
5月 29 15:33:36 iZ2ze3bc56k6c8wubzxn9kZ systemd[1]: Started MySQL Server.
  1. 设置开机启动
systemctl enable mysqld
systemctl daemon-reload
  1. 修改root本地登录密码
    mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
set password for 'root'@'localhost'=password('MyNewPass4!');

注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误,如下图所示:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

通过msyql环境变量可以查看密码策略的相关信息:

show variables like '%password%';
+---------------------------------------+--------+
| Variable_name                         | Value  |
+---------------------------------------+--------+
| default_password_lifetime             | 0      |
| disconnect_on_expired_password        | ON     |
| log_builtin_as_identified_by_password | OFF    |
| mysql_native_password_proxy_users     | OFF    |
| old_passwords                         | 0      |
| report_password                       |        |
| sha256_password_proxy_users           | OFF    |
| validate_password_check_user_name     | OFF    |
| validate_password_dictionary_file     |        |
| validate_password_length              | 8      |
| validate_password_mixed_case_count    | 1      |
| validate_password_number_count        | 1      |
| validate_password_policy              | MEDIUM |
| validate_password_special_char_count  | 1      |
+---------------------------------------+--------+

修改密码策略
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略

# 选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0

如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:

validate_password = off

重新启动mysql服务使配置生效:

systemctl restart mysqld

默认配置文件路径:

配置文件:/etc/my.cnf 
日志文件:/var/log//var/log/mysqld.log 
服务启动脚本:/usr/lib/systemd/system/mysqld.service 
socket文件:/var/run/mysqld/mysqld.pid

如果忘记root密码,则按如下操作恢复:

在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。

mysql  -u root
update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';

flush privileges

三、mysql创建用户及授权

1、创建用户

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

username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

如:

CREATE USER 'pig'@'%' IDENTIFIED BY '123456';

2、授权用户权限

GRANT privileges ON databasename.tablename TO 'username'@'host'

privileges:用户的操作权限,如SELECT,INSERT,DELETE,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*

GRANT SELECT, INSERT,UPDATE ON test.user TO 'pig'@'%';
GRANT ALL ON *.* TO 'pig'@'%';
GRANT ALL ON maindataplus.* TO 'pig'@'%';

3、撤销用户权限

REVOKE privilege ON databasename.tablename FROM 'username'@'host';
如
REVOKE SELECT ON *.* FROM 'pig'@'%';

4、删除用户

DROP USER 'username'@'host';

问题总结

1、阿里云centos重装系统后使用ssh连接服务器报错

root@xxx.xxx.xxx.xx
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:yq14m7w9Vu5yse+A2w6MFwY2//NJUvBC6fIZCdYiomY.
Please contact your system administrator.
Add correct host key in /Users/wuj/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/wuj/.ssh/known_hosts:11
ECDSA host key for 39.105.195.29 has changed and you have requested strict checking.
Host key verification failed.

会出现这些信息是因为,第一次SSH连接时,会生成一个认证,储存在客户端(也就是用SSH连线其他电脑的那个,自己操作的那个)中的known_hosts,但是如果服务器验证过了,认证资讯当然也会更改,服务器端与客户端不同时,就会跳出错误啦~因此,只要把电脑中的认证资讯删除,连线时重新生成,就一切完美啦~要删除很简单,只要在客户端输入一个指令

ssh-keygen -R +输入服务器的IP

接下来再次连接一次,会出现

Are you sure you want to continue connecting (yes/no)?

输入yes, 就完成连接啦!同时,新的认证也生成了

2、mysql远程客户端无法连接服务器

2003 - Can't connect to MySQL server on 'xxx.xxx.xxx' (60 "Operation timed out")

网上查到说是防火墙的问题,但是将防火墙关闭后还是不行,这里说下我的问题及解决方式,通过关闭防火墙以及配置防火墙都无法解决该问题,最后了解到阿里云的安全组,
在阿里云添加安全组规则,增加端口3306/3306,授权对象 0.0.0.0/0就可以访问了

除此之外 ,还有几种其他查找问题的方式

  • 网络不通,通过cmd命令ping服务器IP,看是否ping通;
  • 服务未启动,查看启动端口:#netstat -nltp
  • 防火墙设置
  • 查看配置文件my.cnf,是否配置了bind-address = 127.0.0.1,需屏蔽掉