跳转至

系统和内核版本

#查看操作系统版本
cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core) 

#查看系统内核版本
uname -r
3.10.0-862.el7.x86_64

下载安装文件

下载地址https://dev.mysql.com/downloads/mysql/

方式一:完整包下载地址

#url: https://downloads.mysql.com/archives/community/
MySQL Community Server (Archived Versions)---->MySQL Product Archives

Product Version:5.7.37
Operating System:Red Hat Enterprise Linux / Oracle Linux
OS Version:Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit)

#选择 mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar 

RPM Bundle  Dec 16, 2021    520.6M  Download
(mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar)  MD5: 22f3f87d6045434d4608c586158c1305 | Signature

wget  https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar

#整体包mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar中文件
-rw-r--r--  1 7155 31415  28991900 3月  23 01:26 mysql-community-client-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415    318868 3月  23 01:26 mysql-community-common-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415   4363096 3月  23 01:26 mysql-community-devel-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415  47993516 3月  23 01:26 mysql-community-embedded-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415  23315792 3月  23 01:26 mysql-community-embedded-compat-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415 132675656 3月  23 01:26 mysql-community-embedded-devel-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415   2704332 3月  23 01:26 mysql-community-libs-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415   1264876 3月  23 01:26 mysql-community-libs-compat-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415 186231736 3月  23 01:27 mysql-community-server-5.7.38-1.el7.x86_64.rpm
-rw-r--r--  1 7155 31415 126641600 3月  23 01:27 mysql-community-test-5.7.38-1.el7.x86_64.rpm

方式二:单独下载依赖包

下载须要的mysql组件,有4个:分别是 server、client、common、libs

卸载旧版本的MySql

查看旧版本MySql

#将会列出旧版本MySql的组件列表,如:
rpm -qa | grep mysql
mysql-libs-5.1.71-1.el6.x86_64

rpm -qa |grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64

逐个删除掉旧的组件

使用命令rpm -e --nodeps {-file-name}进行移除操作,移除的时候可能会有依赖,要注意一定的顺序。

rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

安装mysql

使用 rpm 命令安装MySql组件

使用命令rpm -ivh {-file-name}进行安装操作。

按照依赖关系依次安装rpm包 依赖关系依次为common→libs→client→server

rpm -ivh mysql-community-common-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm

注:ivh中, i-install安装;v-verbose进度条;h-hash哈希校验

在安装 mysql-community-libs-5.7.22-1.el7.x86_64.rpm 时有可能会报错:mysql依赖错误

rpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpm

warning: mysql-community-libs-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
        mysql-community-common(x86-64) >= 5.7.9 is needed by mysql-community-libs-5.7.22-1.el7.x86_64
        mariadb-libs is obsoleted by mysql-community-libs-5.7.22-1.el7.x86_64
#解决:清除yum里所有mysql或mariadb依赖包
rpm -qa|grep mysql
yum remove mysql-libs

rpm -qa|grep mariadb
yum remove mariadb-libs

注意:有的系统可能不太一样,没有mysql-libs,而是mariadb-libs,此时要移除的则是mariadb-libs

清除完yum里所有mysql的依赖包后,再次安装mysql组件就不会报错了:

[root@test3 ~]# rpm -ivh mysql-community-common-5.7.38-1.el7.x86_64.rpm
警告:mysql-community-common-5.7.38-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-common-5.7.38-1.e################################# [100%]
[root@test3 ~]# rpm -ivh mysql-community-libs-5.7.38-1.el7.x86_64.rpm
警告:mysql-community-libs-5.7.38-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-libs-5.7.38-1.el7################################# [100%]
[root@test3 ~]# rpm -ivh mysql-community-client-5.7.38-1.el7.x86_64.rpm
警告:mysql-community-client-5.7.38-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-client-5.7.38-1.e################################# [100%]
[root@test3 ~]# rpm -ivh mysql-community-server-5.7.38-1.el7.x86_64.rpm
警告:mysql-community-server-5.7.38-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-server-5.7.38-1.e################################# [100%]

注意细节:

  • 执行 yum remove mysql-libs 命令后,会自动删除掉 /etc/ 下的 my.cnf 文件

  • 对于安装mysql组件,只有安装了 mysql-community-server-5.7.22-1.el7.x86_64.rpm 组件,才会:

1 在 /etc/下生成 my.cnf 文件 和 my.cnf.d 文件夹

-rw-r--r-- 1 root root 960 3月 22 02:00 /etc/my.cnf

drwxr-xr-x 2 root root 6 3月 22 02:00 /etc/my.cnf.d/

2 在/var/lib/下生产以下三个文件夹

drwxr-x--- 2 mysql mysql    6 3月  22 02:00 /var/lib/mysql-keyring
drwxr-x--- 2 mysql mysql    6 7月  18 13:36 /var/lib/mysql-files
drwxr-x--x 5 mysql mysql 4096 7月  18 13:36 /var/lib/mysql

3 在/var/log/ 下生成 mysqld.log 文件

-rw-r----- 1 mysql mysql 4795 7月 18 13:39 /var/log/mysqld.log

4 在/var/run/ 下生成 mysqld 目录

-rw-r----- 1 mysql mysql 5 7月 18 13:36 /var/run/mysqld/mysqld.pid

安装遇到问题

问题1:未安装libaio导致mysql-community-server无法安装

#安装 mysql-community-server-5.7.22-1.el7.x86_64.rpm 时报错
rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm

warning: mysql-community-server-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
        libaio.so.1()(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
        libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
        libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
#真正原因: MySQL依赖libaio,系统未安装libaio,
#安装libaio
yum -y install libaio
#查看libaio
rpm -qa|grep libaio
libaio-0.3.109-13.el7.x86_64

问题2:无法启动或启动后命令无反应

#查看日志mysqld.log(可在/etc/my.cnf中查找到mysqld.log的配置位置),报如下错误,

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

解决办法

1. 先通过rpm -e --nodeps xxx  卸载掉server,卸载后删除datadir目录
2. 卸载后查看 /etc/my.cnf 中,datadir的配置情况,将datedir目录删除
3. 最后通过命令rpm -ivh xxx 重新安装server,此时就能正常使用mysql了
#卸载mysql
rpm -e --nodeps mysql-community-server-5.7.22-1.el7.x86_64
#查看配置
cat /etc/my.cnf
xxxxxxxxxxxxx
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
xxxxxxxxxxxxxxx

#删除文件
rm -rf /var/lib/mysql
#重新安装
rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
#启动mysql
systemctl start mysqld.service
#查看进程
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密码

启动MySql

systemctl start mysqld.service   # 启动mysql
systemctl status mysqld.service  #查看mysql状态
systemctl stop mysqld.service    #关闭mysql

#查看mysql进程
ps -ef|grep mysql

mysql      4102      1  0 14:29 ?        00:00:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root       4806   1464  0 14:43 pts/0    00:00:00 grep --color=auto mysql

#查看3306端口 netstat -anop|grep 3306
ps -ef|grep mysqld

mysql      4102      1  0 14:29 ?        00:00:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root       4829   1464  0 14:43 pts/0    00:00:00 grep --color=auto mysqld

#查看防火墙是否放行
firewall-cmd --state
not running #防火墙关闭

修改root密码报错

由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码。

#获取临时密码,可查询到类似于如下的一条日志记录
grep 'temporary password' /var/log/mysqld.log    
# 在/var/log/mysqld.log文件中搜索字段‘temporary password’

2018-07-18T06:02:23.579753Z 1 [Note] A temporary password is generated for root@localhost: n(jPp4l-C33
#n(jPp4l-C33即为登录密码

修改MySQL的root密码报错

#5.6,mysql内置密码增强机制,低强度密码会报错:

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

mysql> alter user root@localhost identified by 'sdbrk';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
             
mysql> set password for root@localhost=password('sdbrk');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

#更改策略,设置 validate_password_policy=0;

mysql> set global validate_password_policy=0;   
# 此时,新密码长度大于等于8位才有效,否则报错
#修改有效密码长度:

mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
#不管设置  validate_password_length=1,还是2,3,4 ,‘有效密码长度’这个参数的实际值都是4。超过4后设置是多少实际就是多少。

#重设密码:
mysql> set password for root@localhost=password('9527');
Query OK, 0 rows affected, 1 warning (0.00 sec)
#此时,虽然防火墙我时关着的,但root用户只能用于本机访问,不能用于远程访问,否则会报以下错误。因此,接下来要做的是授予root用户远程访问权限

授权用户远程登陆

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      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)


# 授予root用户远程访问权限

mysql> grant all privileges on *.* to root@'%' identified by '9527';
Query OK, 0 rows affected, 1 warning (0.05 sec)

#刷新权限,使设置生效, OK
mysql> flush privileges;
Query OK, 0 rows affected (0.36 sec)

#在远程机器上测试远程连接:  mysql -h192.168.0.241 -uroot -p
#授权语法
mysql中可以给一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为: 
grant 权限 on 数据库对象 to 用户 

#grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。 
grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%' 
grant update on testdb.* to common_user@'%' 
grant delete on testdb.* to common_user@'%' 
#或者,用一条 MySQL 命令来替代: 
grant select, insert, update, delete on testdb.* to common_user@'%'

原文链接:https://blog.csdn.net/wudinaniya/article/details/81094578