系统和内核版本
#查看操作系统版本
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/mysql3 在/var/log/ 下生成 mysqld.log 文件
-rw-r----- 1 mysql mysql 4795 7月 18 13:39 /var/log/mysqld.log4 在/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