MySQL 安装部署

概述

本文主要介绍如何在 Linux 中以 RPM 包的方式安装 MySQL 并进行相关的初始化配置,文中方案均已实践验证。

操作系统 CentOS 7.6
数据库版本 MySQL 8.4.3 LTS

!NOTE\] 说明 本文主要介绍 RPM 包的安装方式,其他安装方法可查阅官网:[MySQL :: MySQL 8.4 Reference Manual :: 2.5 Installing MySQL on Linux](https://dev.mysql.com/doc/refman/8.4/en/linux-installation.html)

环境准备

从官方下载RPM包:MySQL :: Download MySQL Community Server

  • 版本:8.4.3 LTS
  • 系统:RedHat Linux / Oracle Linux
  • 内核:Linux 7 (本文是7-x86-84bit)

各个包之间存在依赖关系,如果需要安装完整版,则下载 RPM bundle tar ,里面包含了所有的RPM包。大多数情况下,标准安装MySQL只需要下载以下RPM包:

  • mysql-community-server
  • mysql-community-client
  • mysql-community-client-plugins
  • mysql-community-libs
  • mysql-community-icu-data-files
  • mysql-community-common
  • mysql-community-libs-compa

如果已安装MySQL,需要先删除旧版本:

bash 复制代码
yum list installed | grep mysql
rpm -qa | grep mysql
yum remove mysql

安装部署

将下载的RPM包上传至服务器目录,并在目录下执行如下命令进行安装:

bash 复制代码
$> su - mysql
$> sudo yum install mysql-community-{client,client-plugins,common,libs}-*

!NOTE\] 注意 有些用户会使用 `rpm -Uvh` ,但是由于潜在的依赖项问题,可能会导致安装失败,因此使用 `yum` 。

安装完成后,会创建如下文件和资源:

Files or Resources Location 说明
Client programs and scripts /usr/bin 客户端程序和脚本
mysqld server /usr/sbin mysqld 服务器
Configuration file /etc/my.cnf 配置文件
Data directory /var/lib/mysql 数据目录
Error log file For RHEL, Oracle Linux, CentOS or Fedora platforms: /var/log/mysqld.log For SLES: /var/log/mysql/mysqld.log 错误日志文件
Value of secure_file_priv /var/lib/mysql-files
System V init script For RHEL, Oracle Linux, CentOS or Fedora platforms: /etc/init.d/mysqld For SLES: /etc/init.d/mysql 初始化脚本
Systemd service For RHEL, Oracle Linux, CentOS or Fedora platforms: mysqld For SLES: mysql 系统服务
Pid file /var/run/mysql/mysqld.pid Pid 文件
Socket /var/lib/mysql/mysql.sock
Keyring directory /var/lib/mysql-keyring 密钥环目录
Unix manual pages /usr/share/man
Include (header) files /usr/include/mysql
Libraries /usr/lib/mysql
Miscellaneous support files (for example, error messages, and character set files) /usr/share/mysql
该安装还会创建一个名为 mysql 的用户及用户组(本文已经提前创建了)。

!NOTE\] 注意 * `mysql` 用户是使用 **useradd** 命令的 `-r` 和 `-s /bin/false` 选项创建的,因此它没有登录服务器主机的权限(有关详细信息,请参阅[创建 mysql 用户和组](https://dev.mysql.com/doc/mysql-secure-deployment-guide/en/secure-deployment-install.html#secure-deployment-mysql-user)。要切换到 `mysql` 用户,请使用 su 命令及选项: ```bash $> su - mysql --shell=/bin/bash ``` * 安装旧版本的MySQL时,软件包可能已经创建了 `/usr/my.cnf` 的配置文件,请检查文件内容并迁移其中的所需配置至新的配置文件 `/etc/my.cnf` ,然后删除 `/usr/my.cnf` 。

至此安装完成,启动服务:

bash 复制代码
$> systemctl start mysqld

可以根据需要设置开机自启动:

bash 复制代码
systemctl enable mysqld
systemctl list-unit-files|grep mysqld 

初始启动后,会创建超级用户root'@'localhost,用如下命令查看临时密码:

bash 复制代码
$> sudo grep 'temporary password' /var/log/mysqld.log

使用临时密码登录后修改密码:

bash 复制代码
$> mysql -uroot -p

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

如果在安装过程中出现问题,可以在错误日志文件 /var/log/mysqld.log 查看相关信息。

如果需要安装多个客户端库版本已保持兼容性,使用--oldpackage,例如:

bash 复制代码
$> rpm --oldpackage -ivh mysql-community-libs-5.5.50-2.el6.x86_64.rpm

!NOTE\] 注意 更多详细信息可参见官网文档:[MySQL :: MySQL 8.4 Reference Manual :: 2.5.4 Installing MySQL on Linux Using RPM Packages from Oracle](https://dev.mysql.com/doc/refman/8.4/en/linux-installation-rpm.html)

初始配置

配置远程连接

  1. 修改 /etc/my.cnf,在mysqld 块加入配置项 bind-address=* (或者 `bind-address=0.0.0.0)。
  2. 修改 /etc/my.cnf,在mysqld 块加入配置项mysql_native_password=ON 以允许本地密码连接,重启服务。
  3. 修改用户的host字段,允许远程主机连接,用通配符 % 表示任意主机:
sql 复制代码
use mysql;

update user set host = '%' where user = 'root';

flush privileges;
  1. 确保服务器的防火墙规则允许MySQL服务端口(默认为3306)上的入站流量。

创建用户授权登录

创建新库

sql 复制代码
CREATE DATABASE mydatabase;

创建用户和密码

sql 复制代码
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';

授权用户

sql 复制代码
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%';

刷新权限

sql 复制代码
FLUSH PRIVILEGES;

验证登录:

bash 复制代码
mysql -h xx.xx.xx.xx -P 3306 -u myuser -p

常见问题

无法使用临时密码登录,登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问。

  1. 设置登录时跳过权限检查:修改 /etc/my.cnf,在mysqld 块加入配置项 skip-grant-tables ,然后重启数据库 systemctl restart mysqld

  2. 登录mysql :mysql --uroot --p

  3. 修改密码:

sql 复制代码
update mysql.user set authentication_string = 'Root@1234' where user = 'root';
flush privileges;

远程客户端(如Navicat、DBeaver等)连接报错:Authentication plugin 'caching_sha2_password' cannot be loaded

由于MySQL 8.4.3 默认使用的是caching_sha2_password验证方式,但客户端不支持,需要服务端开启 mysql_native_password ,即在my.cnf 文件的 [mysqld] 部分中加入mysql_native_password=ON 或者以参数 --mysql-native-password=ON 启动 MySQL 服务。

查看当前配置:

sql 复制代码
mysql> select user, host, plugin from mysql.user;

!NOTE\] 注意 `mysql_native_password` 身份验证 plugin 从 MySQL 8.0.34 开始被弃用,在 MySQL 8.4 中默认处于禁用状态 ,并从 MySQL 9.0.0 中删除。

修改my.cnf配置后MySQL无法启动

由于MySQL 8.4.3 的部分配置参数对比之前版本存在较大差异,而目前网络上大部分文章的配置参数都是早期版本,导致修改后启动服务报错,比如:

旧版本是default-character-set=utf8 ,新版本是 character-set-server = utf8 ;

旧版本是default-authentication-plugin=mysql_native_password ,新版本是 mysql_native_password=ON

各参数配置请以官网为准:
MySQL :: MySQL 8.4 Reference Manual :: 7.1.7 Server Command Options

参考文章

相关推荐
weixin_4196583138 分钟前
MySQL数据库备份与恢复
数据库·mysql
wml000001 小时前
CentOS启动两个MySQL实例
mysql·centos·3406
专注API从业者2 小时前
基于 Flink 的淘宝实时数据管道设计:商品详情流式处理与异构存储
大数据·前端·数据库·数据挖掘·flink
花小璇学linux2 小时前
imx6ull-驱动开发篇24——Linux 中断API函数
linux·驱动开发·嵌入式软件
林开落L3 小时前
库制作与原理(下)
linux·开发语言·centos·库制作与原理
小猿姐3 小时前
KubeBlocks for Milvus 揭秘
数据库·云原生
AI 嗯啦3 小时前
SQL详细语法教程(四)约束和多表查询
数据库·人工智能·sql
wxy3193 小时前
嵌入式LINUX——————TCP并发服务器
java·linux·网络
Castamere3 小时前
配置 Linux 终端 (zsh)
linux
杜子不疼.3 小时前
《Python学习之文件操作:从入门到精通》
数据库·python·学习