系统环境:
CentOS 7
MySQL RPM 包
1. 准备工作
1.1 下载
1.2 检查环境
-
检查是否安装了 mysql 与 mariadb
# 检查是否安装了 MySQL rpm -qa | grep mysql # 若存在 mysql 安装文件,则会显示类似如下的版本信息 mysql-connector-odbc-5.2.5-6.el7.x86_64 # 卸载 mysql,如果有多个,就挨个删除 rpm -e --nodeps mysql-connector # 检查是否安装了 MariaDB rpm -qa | grep mariadb # 卸载 MariaDB,如果有多个,就挨个删除 rpm -e --nodeps mariadb-libs
-
检查是否安装 libaio
rpm -qa | grep libaio # 如果未安装或版本太低,则执行如下命令 yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel
-
检查是否安装 net-tools
rpm -qa | grep net-tools # 如果没有,则执行如下命令 yum -y install net-tools
1.3 上传安装包
将安装包上传至服务器 /usr/local/ 并解压缩
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
安装所需要用到的包有四个,解压后内容如下:
2 安装及修改密码
由于 RPM 存在依赖关系,所以需要按顺序执行;如果不按顺序执行命令,在安装过程中提示缺少依赖,导致无法成功安装。RPM 包执行顺序为:common → libs → client → server
2.1 为 mysql 创建用户和组
# 添加组
groupadd mysql
# 添加用户并指定用户所在组
useradd -r -g mysql mysql
2.2 安装 RPM 包
MySQL5:
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
MySQL8:
mysql-community-common-8.0.28-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
mysql-community-libs-8.0.28-1.el7.x86_64.rpm
mysql-community-client-8.0.28-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
mysql-community-server-8.0.28-1.el7.x86_64.rpm
如果未安装 net-tools,则会报以下错误

安装成功如下
2.3 初始化 MySQL
mysqld --initialize
注:–initialize 选项默认以“安全”模式来初始化,会为 root 用户生成一个root 账户密码并将该密码标记为过期,密码在log文件里,登陆后你需要设置一个新的密码,而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码
查看 root 账号密码,复制密码,后面要用到
cat /var/log/mysqld.log # *87AaAflid,K
2.4 修改 MySQL 权限
# 5.7版本以前是
chmod -R 777 /usr/local/mysql/data/
# 5.7版本以后是
chmod -R 777 /var/lib/mysql
2.5 启动 MySQL
systemctl start mysqld
启动时如果出现以下错误,说明是端口号被占用了
查看进程,并终止相关进程,若无法终止进程,直接重启 mysql 服务即可
如果重启 mysql 服务还是报错,请查看日志文件
通过查看日志文件,可以看到如下错误,这是因为权限不足导致的,执行第4步操作即可
2.6 修改密码( MySQL 5)
mysql -u root -p
mysql5.7及之后的版本用户表结构有变化,需执行以下命令:
根据情况设置密码,如果是自己用可以简单点;如果是服务器,建议使用复杂密码
update user set authentication_string = password("123456") where user = "root";
flush privileges; # 刷新权限(必须步骤)
如果执行语句出现如下错误,则需要重置密码
alter user user() identified by "123456";
至此,mysql 安装完毕,但是此时只能在本地连接 mysql
2.7 修改密码( MySQL 8)
刚安装完 mysql8 登录时报错:
[#1045 - Access denied for user ‘root’@‘localhost’ (using password: NO)]
-
修改配置文件免密码登录 mysql
vim /etc/my.cnf # 在 [mysqld] 节点最后加上如下语句,然后重启 mysql 服务 skip-grant-tables
如果卡启动命令,查看日志文件有出现 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11,可以尝试将虚拟机内存调大一点,我的调整内存之后就好了
-
登录 mysql
mysql # 或者 mysql -u root -p # password 直接回车
如果回车报错:
mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option.
或者
Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
可能是权限问题,按 2.4 方法操作即可
-
重置密码
# 1. 首先查看当前root用户相关信息,在mysql数据库的user表中 use mysql; # host: 允许用户登录的ip‘位置’%表示可以远程; # user:当前数据库的用户名; # authentication_string: 用户密码;在mysql 5.7.9以后废弃了password字段和password()函数; # plugin: 密码加密方式; select host, user, authentication_string, plugin from user; # 2.如果当前 root 用户 authentication_string 字段有内容,先将其设置为空 update user set authentication_string='' where user='root';
-
退出mysql, 删除 /etc/my.cnf 文件中刚刚添加的 skip-grant-tables, 重启 mysql 服务
-
登录 mysql,因为上面设置了 authentication_string 为空,所以可以免密码登录
mysql -u root -p # passwrod: 直接回车 ALTER user 'root'@'localhost' IDENTIFIED BY 'sqlyog2020'; # 如果出现以下错误,检查用户信息 host 字段是否为 'localhost', 注意我的是 '%' # ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
至此修改成功; 使用新密码登录即可
3 . 远程连接
3.1 开启远程连接
将 root 用户设置为允许远程连接的用户(也可以设置其他的用户,原理一样)
update user set user.host='%' where user.user='root';
flush privileges;
3.2 开放端口
(如果还停留在mysql控制台,需要输入 exit 命令退出)
开通 mysql 服务的防火墙端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent #开启3306端口
firewall-cmd --reload #重启防火墙
3.3 测试连接
4 . 常用配置
主要是最大连接数、编码格式、大小写转换、数据接收大小
show variables like “%max_connection%”;查看最大连接数
show variables like “%character%”;查看编码格式
show variables like “%case%”;查看大小写转换
show variables like “%max_allowed_packet%”;查看数据接收大小
配置都可以在etc下的my.cnf文件修改;配置如下:
character-set-server=utf8
init_connect='SET NAMEs utf8'
max_connections=200
max_allowed_packet=400M
[client]
default-character-set=utf8
# mysql8 默认使用 utf8mb4, 字符编码可以不用修改
在红框中的配置中:
配置中有character的皆为修改编码格式的配置;
init_connect也是编码格式配置;
max_connection是最大链接数;
max_allowed_packet是接收数据大小。
修改完成后重启mysql:systemctl restart mysqld