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

参考文章

相关推荐
zhougl9966 分钟前
html处理Base文件流
linux·前端·html
泥土编程1 小时前
kubekey -实现懒人一键部署K8S集群
linux·运维
·薯条大王1 小时前
MySQL联合查询
数据库·mysql
morris1313 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch4 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
wirepuller_king4 小时前
创建Linux虚拟环境并远程连接,finalshell自定义壁纸
linux·运维·服务器
这个懒人4 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
Yan-英杰4 小时前
【百日精通JAVA | SQL篇 | 第二篇】数据库操作
服务器·数据库·sql
在野靡生.5 小时前
Ansible(1)—— Ansible 概述
linux·运维·ansible
风123456789~5 小时前
【Linux运维】查询指定日期的上月
linux·运维·服务器