本文参考
一 查看linux操作系统版本和系统内核版本
1 [root@nfs_client ~]# cat /etc/redhat-release 查看操作系统版本
2 CentOS Linux release 7.5.1804 (Core)
3 [root@nfs_client ~]# uname -r 查看系统内核版本
43.10.0-862.el7.x86_64
5
二 下载对应版本的MySQL安装文件
2、选择对应的Linux版本和x86/x64进行下载
可以选择 RPM Bundle,下载完记得解压 tar -xvf xxx.tar
三 卸载旧版本的MySql (没有的话,则跳过此步骤)
1、查看旧版本MySql
rpm -qa | grep mysql
rpm -e --nodeps {-file-name}
有的系统可能不太一样,没有mysql-libs,而是mariadb-libs,此时要移除的则是mariadb-libs
rpm -qa|grep mariadb
yum remove mariadb-libs
四 安装MySql
解压之后的文件
使用命令rpm -ivh {-file-name}进行安装操作。
按照依赖关系依次安装rpm包 依赖关系依次为common→libs→client→server
注:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验
在安装 时有可能会报错:mysql依赖错误
解决:清除yum里所有mysql依赖包
[root@nfs_client tools]# rpm -qa|grep mysql
[root@nfs_client tools]# yum remove mysql-libs
注意:
有的系统可能不太一样,没有mysql-libs,而是mariadb-libs,此时要移除的则是mariadb-libs
[root@nfs_client tools]# rpm -qa|grep mariadb
[root@nfs_client tools]# yum remove mariadb-libs
注意细节:
1> 执行 yum remove mysql-libs 命令后,会自动删除掉 /etc/ 下的 文件
2> 对于安装mysql组件,只有安装了 组件,才会:
a). 在 /etc/下生成 文件 和 .d 文件夹
b). 在/var/lib/下生产以下三个文件夹
c). 在/var/log/ 下生成 文件
d). 在/var/run/ 下生成 mysqld 目录
个别情况:
个别情况1:
在阿里云ECS云服务器上安装,当安装 时报错,报错如下:
[root@i3467544tdsxfrZ ~]# rpm -ivh
warning: : Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
()(64bit) is needed by
()(64bit) is needed by
()(64bit) is needed by
真正原因:
真正的原因是 MySQL依赖libaio,所以先要安装libaio,我们通过 rpm -qa|grep libaio 命令查看一下,如图:
经过对比发现,无法正常安装的服务器的确没有安装libaio
所以,解决法案就是:
安装libaio
[root@iZbp1845cet96se1qmb5ekZ ~]
安装libaio后,再重新安装一次,此时就能正常安装了
个别情况2:
比如解决了“个别情况1”,但在启动mysql的时候,启动不起来,或启动后,去查找临时密码,使用命令没反应。查看日志(可在/etc/中查找到的配置位置),报如下错误,此时怎么解决?
[ERROR] Fatal error: Can't open and lock privilege tables: Table '' doesn't exist
此时,1>先通过rpm -e --nodeps xxx 卸载掉server,卸载后删除datadir目录,2>卸载后查看 /etc/ 中,datadir的配置情况,将datedir目录删除,3>最后通过命令rpm -ivh xxx 重新安装server,此时就能正常使用mysql了
命令代码如下:
[root@izbp1845cet96se1qmb5ekz ~]# rpm -e --nodeps
[root@izbp1845cet96se1qmb5ekz ~]# cat /etc/
xxxxxxxxxxxxx
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sockxxxxxxxxxxxxxxx
[root@izbp1845cet96se1qmb5ekz ~]# cd /var/lib
[root@izbp1845cet96se1qmb5ekz lib]# rm -rf mysql
[root@izbp1845cet96se1qmb5ekz ~]# rpm -ivh
[root@izbp1845cet96se1qmb5ekz ~]# systemctl start mysqld.service
[root@izbp1845cet96se1qmb5ekz ~]# ps -ef|grep mysql
root 3306 1068 0 14:34 pts/0 00:00:00 mysql -uroot -p
mysql 27009 1 1 15:26 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root 27038 26239 0 15:27 pts/6 00:00:00 grep --color=auto mysql
五 登录并创建MySql密码
1 启动MySql
安装完后,使用命令 service mysqld start 或 systemctl start mysqld.service 启动MySQL服务。(如果mysql服务无法启动,就重启一下系统)
systemctl start mysqld.service 启动mysql
systemctl status mysqld.service 查看mysql状态
systemctl stop mysqld.service 关闭mysql
查看mysql进程 ps -ef|grep mysql
查看3306端口 netstat -anop|grep 3306
2 登陆mysql修改root密码
由于之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码。
怎么找到这个临时密码呢?
使用:
grep 'temporary password' /var/log/
即可查询到类似于如下的一条日志记录:
#o(YH0ff;i30即为登录密码。使用这个随机密码登录进去,然后修改密码,使用命令:
输入密码
执行下面的命令修改MySql root密码
在后,mysql内置密码增强机制,低强度密码会报错:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
可能出现密码不符合策略或过于简单等提示,建议先使用如下密码,稍后更改策略再换
step1:更改策略和修改密码长度
setglobal validate_password.policy=0;
setglobal validate_password.length=1;
不管设置 validate_password_length=1,还是2,3,4 ,‘有效密码长度’这个参数的实际值都是4。超过4后设置是多少实际就是多少。
step2:从新设置密码
alter user root@localhost identified by '123456';
step3: 授予root用户远程访问权限:
此时,虽然防火墙我时关着的,但root用户只能用于本机访问,不能用于远程访问,否则会报以下错误。因此,接下来要做的是授予root用户远程访问权限。
查看当前授予过的权限:
use mysql;
select user,host from user;
不推荐直接使用root用户通过外部访问数据库,建议创建用户给予对应所需权限即可
step4.添加一个新用户
create user '新用户名'@'localhost' identified by '密码';
//允许所有ip连接(用通配符%表示)
create user '新用户名'@'%' identified by '密码';授权用户
step5.授权用户
格式:GRANT privileges ON databasename.tablename TO ‘username’@‘host’
例:给admin用户授权study数据库中所有表的所有操作权限
GRANT ALL ON *.* TO 'admin'@'%';
privileges:表示要授予什么权力,例如可以有 select ,insert 等,如果要授予全部权力,则填 ALL
databasename.tablename:表示用户的权限能用在哪个库的哪个表中,如果想要用户的权限很作用于所有
的数据库所有的表,则填 .,*是一个通配符,表示全部。
’username‘@‘host’:表示授权给哪个用户。
step6:开放3306端口
此时外面远程访问还是访问不到,因为我的防火墙没有放开3306端口,
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
我用的DataGrip连接会报错
我看网上很多人都在说加上serverTimezone=UTC,我的加上不行,最后我发现我要加上useSSL=false&allowPublicKeyRetrieval=true就可以了