MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)

适用于 CentOS 系统下,标准安装 MySQL 5.7 & 8.0 可以自适应部分数据库参数,安全、快捷、稳定。

一、前言

  • 太久没有更新 CSDN 博客了,今天介绍的是我自己写的一个 MySQL 二进制部署脚本,可以快速部署 MySQL 5.7 & 8.0 版本的数据库。
  • 需求分析:比如自己需要搭建一个测试环境,可以使用脚本快速实现。该脚本使用规范的方法安装数据库,并且会根据服务器的配置自适应部分对数据库性能特别影响的参数。如果你是 DBA 那么可以使用此脚本快速搭建可用的数据库环境,安装成功后,你只需要根据业务需求调整你需要的参数即可,如果你是对 MySQL 数据库不太了解,那么可以使用此脚本,它会为你定制部分数据库参数,至少可以达到 60 分的标准,并且也很高效。

二、环境说明

  1. 系统要求:CentOS
  2. MySQL 版本:仅支持 5.7 & 8.0
  3. 脚本默认安装路径:/usr/local/mysql
  4. 脚本默认数据路径 /data/mysql*(脚本会根据版本确定安装名 5.7 就是 mysql_57)
  5. 参数相关:脚本会根据系统配置自适应部分重要参数 连接数默认 1000
  6. 日志和复制:默认双一、GTID、Slowlog、binlog 保存 10 天
  7. 环境依赖:CentOS 默认会有 Python 2.7 不需要第三方模块

三、安装实战

  1. 第一步需要从官方文档下载标准 MySQL GA 版本安装包 MySQL 官方安装包存档

  2. 服务器上创建一个 /myinstall 临时文件夹;

  3. 将安装包和 mysql_install.py 上传到服务器:
    在这里插入图片描述

  4. 执行脚本即可:

     python mysql_install.py -p=mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
    

    MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第1张图片

  5. 此时脚本已经执行完成,登陆数据库的命令已经打印出来,回车退出程序,使用命令登陆数据库:
    MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第2张图片

  6. 进入数据库后,必须要先修改 root 用户的密码,可以使用下方 SQL 修改:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YouPassword';
    
  7. 将 MySQL 添加到环境变量中:

    8. 将 MySQL 添加到 .bash_profile 中:
    vi /root/.bash_profile
    -- 添加到文件中
    PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
    -- 保存后 source
    source /root/.bash_profile
    
  8. 脚本有默认的 安装路径数据路径端口(3306) 当然也是可以自己指定的,只需要给脚本传入正确的参数即可,详细可以 --help 瞅瞅:
    MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第3张图片

  9. MySQL 启停配置:

    cp -ar /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    

    MySQL 有自带启动脚本,在 mysql/support-files 下的 mysql.server 我们只需要将它拷贝到 /etc/init.d 就可以使用 service 命令启停 MySQL
    MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第4张图片

四、脚本介绍

  1. 脚本 GitHub 地址:https://github.com/DooBeDooBa/mysql_lib/blob/main/mysql_install.py

    git clone https://github.com/DooBeDooBa/mysql_lib.git
    
  2. MySQL 参数介绍:

    1. server_id:主机 ip 地址后三位 + MySQL 开放端口;
    2. innodb_buffer_pool_size:该参数是 MySQL innodb 引擎最重要的缓冲区,直接影响 innodb 引擎的性能,官方建议为物理内存的 50%~70% 下方是脚本计算逻辑:
      MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第5张图片
    3. log_bin:MySQL 二进制日志,主要用来做主从复制和基于时间点恢复,脚本会默认开启;
    4. binlog_format:binlog 的记录格式,脚本默认为 row 最安全、最严谨的记录格式;
    5. expire_logs_days:binlog 的自动清理时间,如果实例频繁 DML 操作会产生大量的 binlog 日志,脚本默认会将二进制日志保存 10 天,该参数在 8.0 会删除,8.0 使用的是 binlog_expire_logs_seconds 脚本会根据安装包的名字确认用户安装的是 5.7 还是 8.0 会修改此参数,所以不要自己修改 MySQL 官网下载的安装包名,不然脚本可能就无法解析到版本信息

五、8.0 自适应参数

  1. 现在介绍的是 8.0 的新特性 innodb_dedicated_server 当开启这个参数后,MySQL 会根据服务器的配置自适应 4 个参数,因为我们脚本也有自适应的逻辑,我们也一起探索官方是怎么做的~
  2. 使用 MySQL_install 脚本快速部署一台 MySQL 8.0 实例:
    MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第6张图片
  3. 然后我们修改配置文件,开启该参数,重启数据库:
    MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第7张图片
  4. 此时为们使用的系统配置是 2C4G 发现 MySQL 为我们自适应四个参数分别是:
    • innodb_buffer_pool_size:innodb 引擎中最大的缓冲池;
    • innodb_log_file_size:Redo 重做日志的使用空间;
    • innodb_flush_method:控制数据文件及重做日志打开及刷写的模式 该参数可以参考 MySQL 官方文档
    • innodb_log_files_in_group (MySQL 8.0.14 起):重做日志的组数;
  5. MySQL 8.0 参数自适应策略:
    1. innodb_buffer_pool_size 自适应策略:
      MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第8张图片
    2. innodb_log_file_size 自适应策略:在 8.0.14 之前根据服务器物理内存设定,之后会根据 buffer pool 适应,当然如果要使用 8.0 那肯定是要用最新的 GA 版本喽~
      MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)_第9张图片
    3. innodb_flush_method 自适应策略:
      会被默认设置为 O_DIRECT_NO_FSYNC 模式,如果 O_DIRECT_NO_FSYNC 模式不可用则会使用默认值。
    4. 注意事项
      1. 该参数不支持在线修改,需要重启数据库;
      2. 如果配置中已经显式指定对应的参数,则会已配置文件为准,不会自适应,也就是说如果想自适应那几个参数,开启 innodb_dedicated_server 即可,不需要再设定;
      3. 单机多实例不建议使用;
      4. 只适用于 innodb 引擎,如果业务使用其它存储引擎则该参数也无意义;
      5. 对云厂商很优化,扩展配置后不需要考虑这些重要参数。

六、后记

  1. MySQL_install 脚本的初衷:主要受众人群是对 MySQL 参数及安装方法不了解的,可以使用脚本快速完成标准安装,脚本参数设置都是以 安全第一 为中心思想,如果你也是 DBA 也可以使用该脚本快速搭建出一个可用环境,再根据业务需求调整参数即可。
  2. 关于参数自适应:该脚本的参数自适应逻辑,或者是 MySQL 8.0 的 innodb_dedicated_server 参数,都是可以完成一个 60 分的 MySQL 配置,肯定是可用的,但是如果需要 100 分,那就交给 DBA 吧~ 后面我也会根据自己的工作经验不断去优化这部分功能。
  3. 关于 5.6 的自动化部署:与 5.7 & 8.0 有一些差异,所以该脚本对于 5.6 版本的 MySQL 是不支持的,毕竟现在官方已经不维护了,没有特殊需求还是建议使用新版 GA 如果你也需要 5.6 脚本可以评论区留言。

本篇文章主要介绍 MySQL 自动化脚本如果使用,及一些参数逻辑和 MySQL 8.0 的自适应新特性,希望对大家有用。作者我也是菜鸟一枚如果有什么经验或者意见欢迎评论区分享交流!希望我们共同进步!— 文若不是菜鸡

你可能感兴趣的:(MySQL,mysql)