Centos7下Mysql的安装

干净环境安装

首先,本机环境是CentOS7.2,如下图所示,开始安装时本机没有任何其余的设置。

centos7跟8 centos7跟8的区别_mariadb


我只说一下安装过程中可能的问题:

在CentOS系统下如果直接通过yum安装,比如直接使用下面的语句安装:

yum install mysql
yum install mysql-server
yum install mysql-devel

会发现安装mysql-server失败,因为CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了。所以默认情况是安装Mariadb而不是Mysql,而且Mariadb的版本是5版本的,不是最新的10系列版本。如果对这mysql和mariadb的特性区别没有什么特殊要求的话确实可以安装Mariadb,我认为在显示方面还是比mysql好的(比如会显示当前在操作哪个数据库)。mariadb与mysql都属于同一类数据库管理系统。但是mariadb与mysql在使用范围和使用目的上都有所不同,两者的主要功能都是为了通过开源社区在维护中,从而获得GPL授权许可。从关系上来看,mariadb是属于数据库管理系统的开发和升级版本,它仅仅代表MySQL的一个分支。

安装Mariadb

安装Mariadb的过程很简单,使用下面的命令:(前提是环境是干净的,没有安装过其他DBMS,如果安装过要重装后面有介绍)

yum install mariadb-server mariadb 
#关于Mariadb的使用命令如下
systemctl start mariadb  #启动MariaDB
systemctl stop mariadb  #停止MariaDB
systemctl restart mariadb  #重启MariaDB
systemctl enable mariadb  #设置开机启动

需要注意的是,安装后需要修改字符集,反正我的环境下安装后很多默认字符集都不是utf-8导致数据库中的中文显示乱码,至于字符集修改的问题,可以修改/etc/my.cnf文件,具体的方法可以自行查找,一定要在建库之前修改好,否则建完后再修改需要从库级别,表级别,列级别对字符集进行修改,比较麻烦。可以通过show variables like “%character%”;show variables like “%collation%”;命令查看当前数据库的默认字符集,下面是一个参考的修改方法:

编辑MariaDB的" vi /etc/my.cnf.d/server.cnf “文件,设置编码,然后ESC退出,” :wq "保存。

[root@holer ~]# vi /etc/my.cnf.d/server.cnf

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

编辑MariaDB的" vi /etc/my.cnf.d/mysql-clients.cnf "文件,设置编码。

[root@holer ~]# vi /etc/my.cnf.d/mysql-clients.cnf

[mysql]
default-character-set=utf8

建立好数据库后,默认建立的root用户密码可能为空,可以通过SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘newpass’);修改密码登录。

安装Mysql

在CentOS-7中安装MySQL需要配置下载源,不能直接使用yum安装,否则又安装成了Mariadb

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm  #这里需要根据需要的版本和系统版本选择
#wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm  #安装MySQL源

执行成功后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo及 mysql-community-source.repo
并且通过yum repolist可以看到mysql相关资源

centos7跟8 centos7跟8的区别_数据库_02


接着需要选择安装的版本,默认是8.0,如果想安装5.7:

shell> sudo yum-config-manager --disable mysql80-community
shell> sudo yum-config-manager --enable mysql57-community

centos7跟8 centos7跟8的区别_centos7跟8_03


之后就可以开始安装

安装:$ sudo yum install mysql-community-server

启动:$ sudo systemctl start mysqld

查看状态:$ sudo systemctl status mysqld

centos7跟8 centos7跟8的区别_centos_04

对于8.0版本的数据库,在修改密码时需要注意,由于升级后的密码强度限制,如果还跟5.7一样直接set会报错,需要先修改my.cnf里的限制条件,如下图:

centos7跟8 centos7跟8的区别_mysql_05

最开始mysql会设置一个默认密码给root,通过这个密码登录后再用ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘yourpassword’;

$ sudo grep 'temporary password' /var/log/mysqld.log   #查看默认密码进行登录

升级或者不干净环境重装

升级Mariadb需要修改/etc/yum.repos.d/MariaDB.repo,添加官方源

https://downloads.mariadb.org/mariadb/ http://yum.mariadb.org/

# 添加 MariaDB 官方源 
vi /etc/yum.repos.d/MariaDB.repo

# MariaDB 10.3 CentOS repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64   #这里的版本需要自己切换
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

# 清除 yum 缓存 
yum clean all 
yum makecache

注意,如果是Mairadb切换为Mysql,或者是升级,最好先卸载

检查mariadb: $ rpm -qa|grep mariadb

如果上面检查的结果有内容,则删除mariadb,把命令中的mariadb-server替换成所有上面输出的内容: $ rpm \-e --nodeps mariadb-server

检查mysql也是类似的,如果要升级的话先卸载老版本,否则后面安装会报错冲突

$ rpm -qa|grep mysql
mysql80-community-release-el7-3.noarch
mysql-community-libs-8.0.19-1.el7.x86_64
mysql-community-server-8.0.19-1.el7.x86_64
mysql-community-common-8.0.19-1.el7.x86_64
mysql-community-client-8.0.19-1.el7.x86_64

那么就要卸载上面出现的,先停止服务sudo systemctl stop mysqld

然后

$ sudo rpm -e --nodeps mysql80-community-release-el7-3.noarch mysql-community-libs-8.0.19-1.el7.x86_64 mysql-community-server-8.0.19-1.el7.x86_64 mysql-community-common-8.0.19-1.el7.x86_64 mysql-community-client-8.0.19-1.el7.x86_64
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave

最后删除所有mysql相关文件:$ sudo rm -rf /var/lib/mysql /var/log/mysqld.log

Mariadb不同版本的区别

起初我不太清楚Mariadb是什么东西,感觉和Mysql没太大区别,但是在Explain这一块发现还是有不少问题

默认情况下安装的Mariadb是5.7版本的,其Explain显示的信息不够全,比如查询开销,另外一个更为详细的 ANALYZE statementMariaDB 10.1.0.版本才引入,所以如果需要使用Analyze,需要进行版本升级。

Mariadb和Mysql的区别

如下图所示,我升级到10.6.4版本后,尝试使用Analyze命令和Expain命令

centos7跟8 centos7跟8的区别_mariadb_06

Explain和Analyze命令对比如下:

centos7跟8 centos7跟8的区别_centos_07

centos7跟8 centos7跟8的区别_mariadb_08

可以发现,ANalyze命令提供了更真实,更准确的查询信息(使用Format=json会显示更多信息),如官网ANALYZE Statement - MariaDB Knowledge Base所说:

ANALYZE statement will invoke the optimizer, execute the statement, and then produce EXPLAIN output instead of the result set. The EXPLAIN output will be annotated with statistics from statement execution.

analyze实际上执行了语句,但是丢弃返回的结果,仅仅是获取执行的信息方便分析,因此在结果上更精准,但在执行时间上肯定比Explain要耗时,比较调用了Opimizer进行了真实的执行过程。

而Mysql就不同,升级到最新的8.0.26版本后,我们再测试explain (mysql不支持analyze命令),另外需要注意的是,8.0开始expalin的select_type不支持extended字段,执行会报错

centos7跟8 centos7跟8的区别_mariadb_09

explain结果如下图所示,可以发现其内容比mariadb下的详细了很多,因此在分析语句时直接使用没什么问题,只是存在准确度的问题

centos7跟8 centos7跟8的区别_mariadb_10

Mysql不同版本的区别

mairadb开始流行版本是5.7,后来逐渐升级为8.0

升级后mysql的安全措施更严,所以在远程连接,修改用户权限时都和5.7版本的略有区别

在创建好数据库后我们尝试远程连接,要设置用户的权限,比如在5.7版本下直接把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户,使用下面命令:mysql> grant all privileges on . to root@’%'identified by ‘password’; 即可授权root用户的远程连接

然而在8.0版本下,如果使用相同的命令会报错:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘identified by ’ password’’ at line 1

因为在mysql8.0创建用户和授权和之前不太一样了,其实严格上来讲,也不能说是不一样,只能说是更严格,mysql8.0需要先创建用户和设置密码,然后才能授权。我们可以新建一个用户,创建完后授权即可。

另外还有一个问题,MySQL8.0 只支持 localhost 访问,我们必须设置一下才可以远程访问。

进入mysql数据库查询存放用户信息的user表:

这里面有两个重要信息,一个是第一列的host,这代表可以访问的ip,默认情况下全是localhost及只能本地,需要执行语句

update user set host=’%’ where user=‘root’;进行修改,下图是修改后的结果,%代表任意ip

执行完后一定要记得刷新权限flush privileges;

另外重要的一行是最后一行,mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法是把mysql用户登录密码加密规则还原成mysql_native_password:

ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘password’; #更新一下用户的密码
 FLUSH PRIVILEGES; #刷新权限

centos7跟8 centos7跟8的区别_centos7跟8_11