MySQL安装优化

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL安装优化

hello,大家好,我是小鱼

本文主要通过针对 MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议。主要 涉及 MySQL 的安装以及相关参数设置的优化,但不包括 mysqld 之外的比如存储引擎相关的参数优化哈。

选择合适的发行版本

1.二进制发行版

包括 RPM 等包装好的特定二进制版本

由于 MySQL 开源的特性,不仅仅 MySQL AB 提供了多个平台上面的多种二进制发行版本可以供大家选 择,还有不少第三方公司(或者个人)也给我们提供了不少选择。

使用 MySQL AB 提供的二进制发行版本我们可以得到哪些好处?

  • 通过非常简单的安装方式快速完成 MySQL 的部署;
  • 安装版本是经过比较完善的功能和性能测试的编译版本;
  • 所使用的编译参数更具通用性的,且比较稳定;
  • 如果购买了 MySQL 的服务,将能最大程度的得到 MySQL 的技术支持

第三方提供的 MySQL 发行版本大多是在 MySQL AB 官方提供的源代码方面做了或多或少的针对性改 动,然后再编译而成。这些改动有些是在某些功能上面的改进,也有些是在某写操作的性能方面的改 进。还有些由各OS 厂商所提供的发行版本,则可能是在有些代码方面针对自己的OS 做了一些相应的底层 调用的调整,以使 MySQL 与自己的 OS 能够更完美的结合。当然,也有一些第三方发行版本并没有动过 MySQL 一行代码,仅仅只是在编译参数方面做了一些相关的调整,而让MySQL 在某些特定场景下表现更优秀。

这样一说,听起来好像第三方发行的 MySQL 二进制版本要比 MySQL AB 官方提供的二进制发行版有更 大的吸引力,那么我们是否就应该选用第三方提供的二进制发行版呢?先别着急,我们还需要进一步分 析一下第三方发行版本可能存在哪些问题。

首先,由于第三方发行版本对 MySQL 所做的改动,很多都是为了应对发行者自己所处的特定场景而 做出来的。所以,第三方发行版本并不一定适合其他所有使用者所处的环境。

其次,由于第三方发行版本的发行者并一定都是一个足够让人信任的公司(或者个人),在其生成 自己的发行版本之前,是否有做过足够全面的功能和性能测试我们不得而知,在我们使用的时候是否会 出现 MySQL AB 官方的发行版本中并不存在的 bug?

最后,如果我们购买了 MySQL 的相关服务,而又使用了第三方的发行版本,当我们的系统出现问题 的时候,恐怕 MySQL 的支持工程师的支持工作会大打折扣,甚至可能会拒绝提供支持。

如果大家可以完全抛开以上这些可能存在隐患的顾虑,完全可以尝试使用非 MySQL AB 官方提供的二 进制版本,而选用可能具有更多特性或者更高性能的发行版本了。

之前我也对网络上各种第三方二进制分发版本做过一些测试和比较,也发现了一些比较不错的版 本,如 Percona 在整合了一些比较优秀的 Patch 之后的发行版本整体质量都还不错,使用者也比较多。 当然,Percona 不仅仅分发二进制版本,同时也分发整合了一些优秀 Patch 的源码包。对于希望使 Percona 提供的一些 Patch 的朋友,同时又希望能够自行编译以进一步优化和定制 MySQL 的朋友,也可以 下载 Percona 提供的源码包。

对于二进制分发版本的安装,对于安装本身来说,我们基本上没有太多可以优化的地方,唯一可以 做的就是当我们决定了选择第三方分发版本之后,可以根据自身环境和应用特点来选择适合我们环境的优化发行版本来安装。

2.源码安装

与二进制发行版本相比,如果我们选择了通过源代码进行安装,那么在安装过程中我们能够对 MySQL 所做的调整将会更多更灵活一些。因为通过源代码编译我们可以:

  • 针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码;
  • 根据不同的软件平台环境调整相关的编译参数;
  • 针对我们特定应用场景选择需要什么组件不需要什么组件;
  • 根据我们的所需要存储的数据内容选择只安装我们需要的字符集;
  • 同一台主机上面可以安装多个 MySQL;
  • 等等其他一些可以根据特定应用场景所作的各种调整。

在源码安装给我们带来更大灵活性的同时,同样也给我们带来了可能引入的隐患

  • 对编译参数的不够了解造成编译参数使用不当可能使编译出来的二进制代码不够稳定;
  • 对自己的应用环境把握失误而使用的优化参数可能反而使系统性能更差;
  • 还有一个并不能称之为隐患的小问题就是源码编译安装将使安装部署过程更为复杂,所花费的 时间更长;

通过源码安装的最大特点就是可以让我们自行调整编译参数,最大程度的定制安装结果。下面我将 自己在通过源码编译安装中的一些优化心得做一个简单的介绍,希望能够对大家有所帮助。

在通过源码安装的时候,最关键的一步就是配置编译参数,也就是执行通过 configure 命令所设定 的各种编译选项。我们可以在 MySQL 源码所在的文件夹下面通过执行执行./configure —help得到 可以设置的所有编译参数选项,如下:

`configure' configures this package to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
... ...
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
... ...
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
... ...
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
... ...
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
... ...
Optional Packages:
--with-charset=CHARSET
... ...
--without-innodb Do not include the InnoDB table handler
... ...
Some influential environment variables:
CC C compiler command
... ...
CCASFLAGS assembler compiler flags (defaults to CFLAGS)
... ...

上面的输出内容中很多都已经省略了,大家完全可以通过自行测试得到更为丰富的内容输出。下面 针对几个比较重要的编译参数做一个简单的介绍:

参数 说明
—prefix 设定安装路径,默认为“/usr/local”
—datadir 设定 MySQL 数据文件存放路径
—with-charset 设定系统的默认字符集
—with-collation 系统默认的校验规则
—with-extra-charsets 出了默认字符集之外需要编译安装的字符集
—with-unix-socket-path 设定 socket 文件地址
—with-tcp-port 指定特定监听端口,默认为 3306
—with-mysqld-user 指定运行 mysqld 的 os 用户,默认为 mysql
—without-query-cache 禁用 Query Cache 功能
—without-innodb 禁用 Innodb 存储引擎
--with-partition 在 5.1 版本中开启 partition 支持特性
--enable-thread-safe-client 以线程方式编译客户端
—with-pthread 强制使用 pthread 线程库编译
—with-named-thread-libs 指定使用某个特定的线程库编译
—without-debug 使用非 debug 模式
—with-mysqld-ldflags mysqld 的额外 link 参数
—with-client-ldflags client 的额外 link 参数

以上这些参数是在源码安装中比较常用的一些编译参数,其中前面几个编译参数主要是为了方便我 们在安装的时候可以定制自己的系统,让系统更适合我们自己应用环境的相关规范,做到环境统一,并 按照实际需求生成相应的二进制代码。而后面的一些参数主要是用来优化编译结果的。

我想大家应该都能理解一般来说,一个系统功能越复杂,其性能一般都会越差。所以,在我们安装 编译 MySQL 的时候应该尽量只选用我们需要的组件,仅安装我们需要的存储引擎,仅编译我们需要的字 符集,让我们的系统能够尽可能的简单,因为这样的 MySQL 也会给我们带来尽可能高的性能。

此外,对于一些特定的软件环境上,可能会有多种线程库的选择的,如果你对各个线程库较为了 解,完全可以通过编译参数设定让MySQL使用最合适的线程库,让MySQL 在我们特定的环境中发挥他最优 化的一面。

源码包的编译参数中默认会以 Debug 模式生成二进制代码,而 Debug 模式给 MySQL 带来的性能损失是 比较大的,所以当我们编译准备安装的产品代码的时候,一定不要忘记使用—without-debug参数禁 用 Debug 模式。

—with-mysqld-ldflags—with-client-ldflags两个编译参数如果设置为-all-static的话,可以告诉编译器以静态方式编译来使编译结果代码得到最高的性能。使用静态编译和动 态方式编译的代码相比,性能差距可能会达到 5%到 10%之多。

就我个人来说最常使用的编译配置参数如下,各位可以以参照自行增删相关内容:

./configure --prefix=/usr/local/mysql \
--without-debug \
--without-bench \
--enable-thread-safe-client \
--enable-assembler \
--enable-profiling \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static \
--with-charset=latin1 \
--with-extra-charset=utf8,gbk \
--with-innodb \
--with-csv-storage-engine \
--with-federated-storage-engine \
--with-mysqld-user=mysql \
--without-embedded-server \
--with-server-suffix=-community \
--with-unix-socket-path=/usr/local/mysql/sock/mysql.sock


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
13天前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
217 16
|
4月前
|
SQL 缓存 关系型数据库
MySQL 慢查询是怎样优化的
本文深入解析了MySQL查询速度变慢的原因及优化策略,涵盖查询缓存、执行流程、SQL优化、执行计划分析(如EXPLAIN)、查询状态查看等内容,帮助开发者快速定位并解决慢查询问题。
162 0
|
18天前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
207 7
|
2月前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 22.04.1上安装MySQL 8.0及设置root密码的注意事项
这些是在Ubuntu 22.04.1 系统上安装MySQL 8.0 及设置root密码过程中必须考虑的关键点。正确的遵循这些步骤可确保MySQL的安装过程既顺利又安全。
509 20
|
3月前
|
关系型数据库 MySQL Linux
安装MySQL 5.7到红帽系RHEL8+系列上
本文介绍了在RHEL 8及以上系统中安装MySQL 5.7的两种方法:解压安装与RPM包安装。涵盖环境准备、目录配置、数据盘挂载、初始化及服务启动等关键步骤,适用于红帽系(8+)部署MySQL 5.7。
|
2月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
157 10
|
2月前
|
缓存 关系型数据库 MySQL
降低MySQL高CPU使用率的优化策略。
通过上述方法不断地迭代改进,在实际操作中需要根据具体场景做出相对合理判断。每一步改进都需谨慎评估其变动可能导致其他方面问题,在做任何变动前建议先在测试环境验证其效果后再部署到生产环境中去。
96 6
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
|
3月前
|
存储 SQL 关系型数据库
MySQL 动态分区管理:自动化与优化实践
本文介绍了如何利用 MySQL 的存储过程与事件调度器实现动态分区管理,自动化应对数据增长,提升查询性能与数据管理效率,并详细解析了分区创建、冲突避免及实际应用中的关键注意事项。
130 0

推荐镜像

更多