在centos7.8下安装 mysql 8.0.21
前言
在部署linux数据库的,往往因为客户有指定版本的要求,或者有软件安装的审计的需要制定对应的版本号,
我也遇到客户必须制定的mysql的版本的要求,mysql 版本号为v8.0.21。
mysql安装
环境检查
检查是否安装了mysql
rpm -qa| grep -i mysql
如有,类似
mysql-libs-5.1.52-1.el6\_0.1.x86\_64\
卸载之
如果已经安装了mysql,先关闭mysql服务
killall mysqld
rpm -e --nodeps mysql-libs-5.1.52.x86_64
检查否存在 `mariadb` 数据库,如有,卸载之,卸载同上
rpm -qa | grep mariadb
彻底卸载mysql
如果已经安装了mysql
killall mysqld
使用 `find / -name mysql` 查找出所有的mysql删除对应的文件夹
查找结果如下:
\[root@SZDC04291 soft\]# find / -name mysql
/run/lock/subsys/mysql
/etc/linux/targeted/active/modules/100/mysql
/usr/lib64/mysql
/usr/local/mysql
/home/app/soft/mysql-5.7.25-linux-glibc2.12-x86_64/bin/mysql
/home/app/soft/mysql-5.7.25-linux-glibc2.12-x86_64/include/mysql
/mysql
/mysql/bin/mysql
/mysql/include/mysql
/data/mysqldata/mysql
删除对应的mysql目录
\[root@SZDC04291 soft\]# rm -rf /run/lock/subsys/mysql*
\[root@SZDC04291 soft\]# rm -rf /etc/lib/linux/targeted/active/modules/100/mysql*
\[root@SZDC04291 soft\]# rm -rf /usr/lib64/mysql*
\[root@SZDC04291 soft\]# rm -rf /usr/local/mysql/*
\[root@SZDC04291 soft\]# rm -rf /mysql/*
\[root@SZDC04291 soft\]# rm -rf /mysql/bin/mysql/*
\[root@SZDC04291 soft\]# rm -rf /mysql/include/mysql/*
\[root@SZDC04291 soft\]# rm -rf /data/mysqldata/mysql/*
注意:卸载后/etc/my.cnf
不会删除,需要进行手工删除
再次查找机器是否安装mysql
rpm -qa|grep -i mysql
无结果,说明已经卸载彻底,接下来直接安装mysql即可.
检查操作系统
如何查看linux版本是centos还是redhat
使用
cat /etc/redhat-release
则会出现具体系统
Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
Kernel /r on an /m
或
CentOS release 7.8 (Final)
查看linux系统是64位还是32位
getconf LONG_BIT
64
下载安装
接下来我们在 Centos7 系统下使用 yum 命令安装 MySQL,需要注意的是 CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除,所以在安装前我们需要先去官网下载 Yum 资源包,下载地址:https://dev.mysql.com/downloads/repo/yum/
先下载 Yum 资源包
cd /home/soft
切换到 /home/soft 把 mysql80-community-release-el7-3.noarch.rpm 下载在该目录
[root@ebs-72921 soft]# wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
--2020-07-24 10:16:32-- https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
正在解析主机 repo.mysql.com (repo.mysql.com)... 23.36.193.224
正在连接 repo.mysql.com (repo.mysql.com)|23.36.193.224|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:26024 (25K) [application/x-redhat-package-manager]
正在保存至: “mysql80-community-release-el7-3.noarch.rpm”
100%[======================================>] 26,024 --.-K/s 用时 0s
2020-07-24 10:16:34 (101 MB/s) - 已保存 “mysql80-community-release-el7-3.noarch.rpm” [26024/26024])
mysql 安装
[root@ebs-72921 soft]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
警告:mysql80-community-release-el7-3.noarch.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql80-community-release-el7-3 ################################# [100%]
[root@ebs-72921 soft]# yum install mysql-server
安装过程中会需要提示下载依赖,按 y
确认下载即可:
如下图所示,
mysql 安装完成。
初始化MySQL
mysqld --initialize
启动/停止/重启 mysql服务
#### 启动mysql
service mysqld start
#### 停止mysql
service mysqld stop
#### 重启mysql
service mysqld restart
查看运行状态
service mysqld status
#### 查看mysql进程
ps -ef | grep mysql
##### 结束mysql进程
kill -9
进程号 或 killall mysqld
安装问题
- Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details. 错误
解决方案:
根据提示,分别使用service mysqld status和journalctl -xe查看服务启动失败的原因,发现是目录权限不足造成的,通过查看mysql目录发现目录下有的文件归属还是root,改成mysql即可。
ll /var/lib/mysql |grep mysql
chown -R mysql:mysql /var/lib/mysql
- ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO) 错误
需要停止mysql服务,修改密码下面单独介绍,请继续,如果知道怎么处理的童鞋跳过。
初始化mysql密码
添加密码
mysql 安装好了,但是没有设置root密码,如果此时访问mysql会报错,
忘记MySQL
密码或者本地lcoalhost
,root
用户无法登录时。可用以下方法无密码登录
关闭mysqld服务
service mysqld stop 关闭mysqld服务 (可以直接killall mysqld)
进入安全模式
在执行命令之前必须先关闭mysqld服务,请注意!
修改配置文件无密码登录:
vi /etc/my.cnf
在最尾部加上:添加一行 skip-grant-tables
保存,启动mysql
service mysqld start
使用 mysql -u root -p
空密码进入shell
模式
mysql -u root -p
首先更新root密码为空字符串,
` mysql> update user set authentication_string='' where user='root';
//刷新权限
mysql> flush privileges;
//退出
mysql> quit;
`
quit;
退出, 然后重启 mysql
然后 vi /etc/my.cnf
删除一行 skip-grant-tables
然后 重启mysql
service mysqld restart
然后再登陆Mysql:
mysql -uroot
使用ALTER修改root用户密码,方法为 ALTER user ‘root’@’localhost’ IDENTIFIED BY ‘新密码’。如下:
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '你的密码';
//刷新权限
mysql> flush privileges;
//退出
mysql> quit;
再次使用 mysql -uroot -p
登陆 mysql就需要使用密码了,密码就是刚刚修改的密码了。
设置远程访问
允许root用户在任何地方进行远程登录,并具有所有库任何操作权限。
如果出现 提示”Access denied for user ‘root’@’localhost’ (using password: YES)”
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| epass | % |
| epass | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
mysql>
发现root只有本地权限,
那么,
我们需要给root 加上 127.0.0.1,% 还有指定服务器ip访问的权限,
// 设置127.0.0.1访问的root权限
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("127.0.0.1","root",PASSWORD("123456"));
// 设置%所有ip访问的root权限,注意这个版本有点奇怪,按照道理设置所有%就可以访问了,但一定要设置 127.0.0.1 和 localhost 也要加权限。具体原因还没有查明
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("%","root",PASSWORD("123456"));
// 我们还可以指定对应的服务器的访问权限
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("10.6.9.96","root",PASSWORD("123456"));
//刷新权限
mysql> flush privileges;
//退出
mysql> quit;
如果出现 `Field 'ssl_cipher' doesn't have a default value`错误怎么解决?
使用 `grant all on root.* to 'root'@'localhost'; ` 和 `grant all on root.* to 'root'@'127.0.0.1'; `命令
此时,使用 `select user,host from user;` 查看是否权限都有了
如果有,重新`mysql`,让设置生效即可访问了。
或者 可以简单一点一些,
使用 `grant all privileges on . to root@"%" identified by "Qa~!@#4^" ; ` //给mysql用户分配远程访问权限
需要使用 `flush privileges;` 刷新权限。
service mysqld restart
测试本地是否可以访问
使用 `mysql -uroot -h127.0.0.1 -p` 登录并授权`localhost`本地`root`登录
也可以使用 `mysql -uroot -p ` 登录一下测试是否可以登录
其他的问题
怎样保护“/tmp/mysql.sock ”不被删除
怎样保护“/tmp/mysql.sock ”
不被删除
如果你有这个问题,事实上任何人可以删除MySQL通讯套接字“/tmp/mysql.sock”
,在`Unix`的大多数版本上,你能通过为其设置sticky(t)位来保护你的“/tmp”
文件系统。作为`root`登录并且做下列事情:
在shell模式下:
shell> chmod +t /tmp
这将保护你的“/tmp”
文件系统使得文件仅能由他们的所有者或超级用户(root)
删除。
你能执行`ls -ld /tmp` 检查`sticky`位是否被设置,如果最后一位许可位是t,该位被设置了。
mysql -h localhost和mysql -h 127.0.0.1的区别
mysql -h localhost和mysql -h 127.0.0.1的区别,
通过localhost连接到mysql是使用UNIX socket,而通过127.0.0.1连接到mysql是使用TCP/IP。
看看状态:mysql -h localhost
* **mysql -h localhost > status**
Connection id: 639
Current database: mysql
**Current user: root@localhost**
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Protocol version: 10
**Connection: Localhost via UNIX socket**
看看状态:mysql -h 127.0.0.1
* **mysql -h 127.0.0.1 > status**
Connection id: 640
Current database: mysql
**Current user: root@localhost**
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Protocol version: 10
**Connection: 127.0.0.1 via TCP/IP**
# 安装时的一些错误
* -bash: ./scripts/mysql_install_db: 类似错误
出现
-bash: ./scripts/mysql\_install\_db: /usr/bin/perl: bad interpreter:
没有那个文件或目录
解决办法:
yum -y install perl perl-devel ```
* 出现 **libaio.so.1: cannot open shared object** 类似错误
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决办法:
> yum -y install libaio-devel
* ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘
登录时有可能报这样的错:
ERROR 2002 (HY000): Can‘t connect to local MySQL server through >socket ‘/var/lib/mysql/mysql.sock‘ (2),原因 是/var/lib/mysql>的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:
sudo chown -R root:root /var/lib/mysql
service mysqld restart
```
来源:oschina
链接:https://my.oschina.net/kinglyphp/blog/4428426