适用于 CentOS 系统下,标准安装 MySQL 5.7 & 8.0 可以自适应部分数据库参数,安全、快捷、稳定。
一、前言
- 太久没有更新 CSDN 博客了,今天介绍的是我自己写的一个 MySQL 二进制部署脚本,可以快速部署 MySQL 5.7 & 8.0 版本的数据库。
- 需求分析:比如自己需要搭建一个测试环境,可以使用脚本快速实现。该脚本使用
规范
的方法安装数据库,并且会根据服务器的配置自适应部分对数据库性能特别影响的参数
。如果你是 DBA 那么可以使用此脚本快速搭建可用的数据库环境,安装成功后,你只需要根据业务需求调整你需要的参数即可,如果你是对 MySQL 数据库不太了解,那么可以使用此脚本,它会为你定制部分数据库参数,至少可以达到 60 分的标准,并且也很高效。
二、环境说明
- 系统要求:CentOS
- MySQL 版本:
仅支持 5.7 & 8.0
- 脚本默认安装路径:/usr/local/mysql
- 脚本默认数据路径 /data/mysql*(脚本会根据版本确定安装名 5.7 就是 mysql_57)
- 参数相关:
脚本会根据系统配置自适应部分重要参数
连接数默认 1000 - 日志和复制:默认双一、GTID、Slowlog、binlog 保存 10 天
- 环境依赖:CentOS 默认会有 Python 2.7 不需要第三方模块
三、安装实战
-
第一步需要从官方文档下载标准 MySQL GA 版本安装包 MySQL 官方安装包存档
-
服务器上创建一个 /myinstall 临时文件夹;
-
将安装包和 mysql_install.py 上传到服务器:
-
执行脚本即可:
python mysql_install.py -p=mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
-
此时脚本已经执行完成,登陆数据库的命令已经打印出来,回车退出程序,使用命令登陆数据库:
-
进入数据库后,必须要先修改 root 用户的密码,可以使用下方 SQL 修改:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YouPassword';
-
将 MySQL 添加到环境变量中:
8. 将 MySQL 添加到 .bash_profile 中: vi /root/.bash_profile -- 添加到文件中 PATH=$PATH:$HOME/bin:/usr/local/mysql/bin -- 保存后 source source /root/.bash_profile
-
脚本有默认的
安装路径
及数据路径
和端口(3306)
当然也是可以自己指定的,只需要给脚本传入正确的参数即可,详细可以 --help 瞅瞅:
-
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
了 😄
四、脚本介绍
-
脚本 GitHub 地址:https://github.com/DooBeDooBa/mysql_lib/blob/main/mysql_install.py
git clone https://github.com/DooBeDooBa/mysql_lib.git
-
MySQL 参数介绍:
- server_id:主机 ip 地址后三位 + MySQL 开放端口;
- innodb_buffer_pool_size:该参数是 MySQL innodb 引擎最重要的缓冲区,直接影响 innodb 引擎的性能,官方建议为物理内存的 50%~70% 下方是脚本计算逻辑:
- log_bin:MySQL 二进制日志,主要用来做主从复制和基于时间点恢复,脚本会默认开启;
- binlog_format:binlog 的记录格式,脚本默认为 row 最安全、最严谨的记录格式;
- expire_logs_days:binlog 的自动清理时间,如果实例频繁 DML 操作会产生大量的 binlog 日志,脚本默认会将二进制日志保存 10 天,该参数在 8.0 会删除,8.0 使用的是 binlog_expire_logs_seconds 脚本会根据安装包的名字确认用户安装的是 5.7 还是 8.0 会修改此参数,
所以不要自己修改 MySQL 官网下载的安装包名,不然脚本可能就无法解析到版本信息
;
五、8.0 自适应参数
- 现在介绍的是 8.0 的新特性
innodb_dedicated_server
当开启这个参数后,MySQL 会根据服务器的配置自适应 4 个参数,因为我们脚本也有自适应的逻辑,我们也一起探索官方是怎么做的~ - 使用 MySQL_install 脚本快速部署一台 MySQL 8.0 实例:
- 然后我们修改配置文件,开启该参数,重启数据库:
- 此时为们使用的系统配置是 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 起):重做日志的组数;
- MySQL 8.0 参数自适应策略:
- innodb_buffer_pool_size 自适应策略:
- innodb_log_file_size 自适应策略:在 8.0.14 之前根据服务器物理内存设定,之后会根据 buffer pool 适应,当然如果要使用 8.0 那肯定是要用最新的 GA 版本喽~
- innodb_flush_method 自适应策略:
会被默认设置为 O_DIRECT_NO_FSYNC 模式,如果 O_DIRECT_NO_FSYNC 模式不可用则会使用默认值。 - 注意事项:
- 该参数不支持在线修改,需要重启数据库;
- 如果配置中已经显式指定对应的参数,则会已配置文件为准,不会自适应,也就是说如果想自适应那几个参数,开启 innodb_dedicated_server 即可,不需要再设定;
- 单机多实例不建议使用;
- 只适用于 innodb 引擎,如果业务使用其它存储引擎则该参数也无意义;
- 对云厂商很优化,扩展配置后不需要考虑这些重要参数。
- innodb_buffer_pool_size 自适应策略:
六、后记
- MySQL_install 脚本的初衷:主要受众人群是对 MySQL 参数及安装方法不了解的,可以使用脚本快速完成标准安装,脚本参数设置都是以
安全第一
为中心思想,如果你也是 DBA 也可以使用该脚本快速搭建出一个可用环境,再根据业务需求调整参数即可。 - 关于参数自适应:该脚本的参数自适应逻辑,或者是 MySQL 8.0 的
innodb_dedicated_server
参数,都是可以完成一个 60 分的 MySQL 配置,肯定是可用的,但是如果需要 100 分,那就交给 DBA 吧~ 后面我也会根据自己的工作经验不断去优化这部分功能。 - 关于 5.6 的自动化部署:与 5.7 & 8.0 有一些差异,所以该脚本对于 5.6 版本的 MySQL 是不支持的,毕竟现在官方已经不维护了,没有特殊需求还是建议使用新版 GA 如果你也需要 5.6 脚本可以评论区留言。
本篇文章主要介绍 MySQL 自动化脚本如果使用,及一些参数逻辑和 MySQL 8.0 的自适应新特性,希望对大家有用。作者我也是菜鸟一枚如果有什么经验或者意见欢迎评论区分享交流!希望我们共同进步!