一、yum安装。
centos7已经不支持mysql,因为收费了你懂得,所以内部集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb,以下为卸载mariadb,安装mysql的步骤。
#列出所有被安装的rpm package
rpm -qa | grep mariadb
#卸载
rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
#强制卸载,因为没有--nodeps
rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
#安装mysql依赖
yum install vim libaio net-tools
其他情况:
1、centos下yum暂时没有mysql-server直接安装包;
MariaDB是MySQL社区开发的分支,也是一个增强型的替代品;
2、安装MariaDB
yum -y install mariadb-server mariadb mariadb-devel
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
firewall-cmd --permanent --add-service mysql
systemctl restart firewalld.service
iptables -L -n|grep 3306
CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题,我们要先下载mysql的repo源。
在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/
# 下载mysql源安装包
shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# 安装mysql源
shell> yum localinstall mysql57-community-release-el7-8.noarch.rpm
检查mysql源是否安装成功
shell> yum repolist enabled | grep "mysql.*-community.*"
看到上图所示表示安装成功。
可以修改vim /etc/yum.repos.d/mysql-community.repo
源,改变默认安装的mysql版本。比如要安装5.6版本,将5.7源的enabled=1改成enabled=0。然后再将5.6源的enabled=0改成enabled=1即可。改完之后的效果如下所示:
2、安装MySQL
shell> yum install mysql-community-server
3、启动MySQL服务
shell> systemctl start mysqld
查看MySQL的启动状态
shell> systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2016-06-24 04:37:37 CST; 35min ago
Main PID: 2888 (mysqld)
CGroup: /system.slice/mysqld.service
└─2888 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
6月 24 04:37:36 localhost.localdomain systemd[1]: Starting MySQL Server...
6月 24 04:37:37 localhost.localdomain systemd[1]: Started MySQL Server.
4、开机启动
shell> systemctl enable mysqld
shell> systemctl daemon-reload
5、修改root本地登录密码
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
shell> grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
或者
mysql> set password for 'root'@'localhost'=password('MyNewPass4!');
注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误,如下图所示:
通过msyql环境变量可以查看密码策略的相关信息:
mysql> show variables like '%password%';
validate_password_policy:密码策略,默认为MEDIUM策略 validate_password_dictionary_file:密码策略文件,策略为STRONG才需要 validate_password_length:密码最少长度 validate_password_mixed_case_count:大小写字符长度,至少1个 validate_password_number_count :数字至少1个 validate_password_special_char_count:特殊字符至少1个 上述参数是默认策略MEDIUM的密码检查规则。 共有以下几种密码策略: MySQL官网密码策略详细说明:http://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html#sysvar_validate_password_policy 修改密码策略在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:
重新启动mysql服务使配置生效:
6、添加远程登录用户默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:
7、配置默认编码为utf8修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:
重新启动mysql服务,查看数据库默认编码如下所示: 默认配置文件路径: |
策略 | 检查规则 |
0 or LOW | Length |
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file |
二、无网络安装。
平时工作中会经常遇到没有外网的情况下安装mysql等软件的情况,由网络的话安装 MySQL 一直都是使用 yum 命令一键搞定的,手动安装的话还是有些麻烦的。搞了一天在这里我将我在安装过程中的步骤和遇到的一些问题记录下来。
以下是我安装的环境说明。
项目 | 版本 | 说明 |
操作系统 | CentOS 7.3.1611 | 最小化安装 |
MySQL | Community 5.7.18-1.el7.x86_64 | rpm包 |
注:可以使用 cat /etc/redhat-release 命令,来确定自己安装的CentOS的具体版本。
准备工作
- 下载 MySQL 的安装包,这里推荐使用搜狐的镜像站下载,因为从MySQL官网下载的速度实在感人,镜像地址 选择对应的版本号下载即可。我在此使用的rpm包有以下4个:
- mysql-community-client-5.7.18-1.el7.x86_64.rpm
- mysql-community-common-5.7.18-1.el7.x86_64.rpm
- mysql-community-libs-5.7.18-1.el7.x86_64.rpm
- mysql-community-server-5.7.18-1.el7.x86_64.rpm
以上四个rpm包是必须的,如果还需要其他的功能,可以自行进行下载。以当前版本为例,包含全部的rpm包的文件为mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar,注意操作系统位数(64位)。
- 下载 numactl 软件包:
- numactl-2.0.9-6.el7_2.x86_64.rpm
- numactl-devel-2.0.9-6.el7_2.x86_64.rpm
- numactl-libs-2.0.9-6.el7_2.x86_64.rpm
- 下载其他相关支持:
- perl-Data-Dumper-2.145-3.el7.x86_64.rpm
- libaio-0.3.109-13.el7.x86_64.rpm
以上软件包是待会儿要用到的,请提前准备好。可以把相关依赖包下载下来,我在这里利用光盘镜像建立了一个yum本地仓库,iso镜像里都有这几个包。
使用yum本地仓安装完依赖之后就可以安装mysql了
若此时直接安装mysql,我们会得到一个异常: mariadb-libs被覆盖
经过一番搜寻,才发现是因为在CentOS 7上已经有一个mariadb 而这个会与 MySQL的mariadb发生冲突。所以此时我们需要将系统自带的mariadb卸载掉,然后使用mysql自带的mariadb。
我们先来查看系统安装的版本rpm -qa | grep mariadb,随后进行卸载,卸载的过程中会提示不能卸载,因为有其他软件依赖此包,我们要加上 --nodeps 参数强制卸载
- rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
注意我上述写的 mariadb-libs-5.5.37-1.el7_0.x86_64 是我刚刚用rpm -qa | grep mariadb查询出的结果。不同版本可能会有所不同。
解决好这个问题后,就可以安装mysql了,rpm -ivh mysql-community-* 即可。
使用 service mysqld start 命令启动mysql实例,为了验证,我们使用systemctl status mysqld验证一下。输出结果为running状态,表示mysql已经安装成功。
登录
我们使用 mysql -u root时会提示我们要输入密码,这个密码存储在 /var/log/mysqld.log 文件内,是系统自动生成的。我们可以使用 cat /var/log/mysqld.log | grep password 命令将密码找出来,然后填入,进行登录,登录之后进行修改密码等操作。
不知道为什么我输入密码之后,一直提示我ERROR(1045)(28000):Access denied for user root@localhost
只好修改MySQL授权登录方式---(跳过授权验证方式启动MySQL)
先停止数据库 systemctl stop mysqld
跳过授权表启动数据库 mysqld --user=mysql --skip-grant-tables --skip-networking
该命令不会输出信息,看起来一直没有反应的样子,其实,后台已经在启动数据库了
现在再打开一个新的命令行窗口,可以免密码登录mysql了
修改root密码:
描述user表
mysql> descuser;
| authentication_string |text | YES | | NULL| |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime |smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
查询| user | host | authentication_string | password_expired|
| root | localhost |*9AA01F6E2A80A823ACB72CC07337E2911404B5B8 | Y |
| mysql.sys | localhost |*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE| N |
一下相关的密码信息:mysql>selectuser,host,authentication_string,password_expiredfromuser;
到这里不难发现root账户的密码已过期,还比5.6多出了一个mysql.sys用户,之前不能登陆可能是因为时间比较长,临时生成的密码过期了
修改密码mysql>updateuserset authentication_string=password('123abc')whereuser='root';
Query OK, 1 row affected (0.00 sec)Rows matched:1 Changed: 1 Warnings: 0mysql> flushprivileges;Query OK,0 rows affected (0.00 sec)
mysql>exit
重新用修改过的密码登陆,成功登陆