热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:4步搞定MySQL安装部署(附MySQL一键式部署脚本)

本文由编程笔记#小编为大家整理,主要介绍了4步搞定MySQL安装部署(附MySQL一键式部署脚本)相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了4步搞定MySQL安装部署(附MySQL一键式部署脚本)相关的知识,希望对你有一定的参考价值。







墨墨导读:良好的开端是成功的一半,从mysql安装开始。





学习数据库技术,实际动手的第一步是安装自己的MySQL。MySQL方面也提供多样式的安装方式rpm ,tar ,源码包。当安装完投入使用之后,随着业务量,数据量的增加,往往会碰到很多意向不到的问题。如性能,安全,配置不合理等。对于最佳实践,都应该注意哪些。


1. MySQL 安装部署流程



1. 操作系统





  • Selinux:建议关闭SELinux功能,通过MySQL本身进行安全控制



  • Firewalld Iptable:防火墙肯定要设置 或则 关闭



  • 时区:对于系统的来说 时间是非常重要指标



  • 网络配置:高配置机器,网卡MTU提高,建议将私网网卡的MTU值增加到9000,同时启用私网交换机的Jumbo Frame属性。



  • 磁盘格式:在平均文件较小,并发较小的IO场景,ext4和xfs表现差不多,前者略微胜出。当文件较大,并发较大时,xfs比ext4性能更好,同时更稳定。实际使用上来说,一般数据库的文件系统推荐用xfs。xfs的恢复比较麻烦,,这方面ext4的fschk修复成功率较高,而且ext4的社区支持比较完备。



  • 盘调度算法:默认是使用的CFQ算法,对于数据库专用服务器,如果为机械磁盘,建议将磁盘调度算法调整为deadline模式,如果为固态硬盘,调整为noop模式,以提升I/O吞吐量和降低I/O响应时间。



  • 虚拟内存使用策略:vm.swappiness,以提高mysql对内存的使用效率



  • 资源限制:limits.conf的 nproc  nofile



  • 内核参数:net.ipv4.tcp 相关的



  • 信号量:对应InnoDB: a long semaphore wait

2. MYSQL软件安装





  • 下载版本:一定是官方下载,应用测试过兼容的版本



  • 安装依赖:mysql执行依赖包



  • 安装部署:建议tar.gz包

3. MYSQL软件安装





  • 用户:安全考虑



  • 数据目录:便于管理 提升io性能



  • 权限赋予:赋予特定用户权限 执行权限



  • my.cnf配置:按照硬件配置,合理的配置

4. MYSQL初始化





  • 初始化:初始化系统数据



  • 密码:密码修改,不安全账号删除



  • 第三方工具:pt-toolkit,xtrabackup 等常用运维工具




2. MySQL 一键式部署脚本


基于5.7.32编写的自动安装部署脚本。操作系统方面只加了资源添加部分。

Vim MySQL_AutoSetup .sh
































































































































































































































































































































































































#!/bin/bash#####MySQL5.7.32数据库自动安装脚本# Version: 1.0# Author: kevinCUI# Date: 2020-12-31######mysql 安装包的绝对路径,去掉.tar.gztarGzPath=/opt/idc/tarGzFile=mysql-5.7.32-linux-glibc2.12-x86_64#mysql 安装路径installPath=/home/mysql/
#my.cnf配置文件mysqlcnf=/home/mysql/my.cnf
#mysql serverid需要设置唯一的id,比如 ip+3位数字mysqlServerid=1010101
#mysql 密码(不可擅自修改)defaultPwd=123456
#mysql 端口mysqlPort=3306
#mysql数据目录data_default=${installPath}${mysqlPort}data_datadir=${data_default}/datadata_binlog=${data_default}/binlogdata_dbdata=${data_default}/dbdatadata_logs=${data_default}/logsdata_tmp=${data_default}/tmpdata_undo=${data_default}/undo# 校验是否为ROOT用户CheckRoot(){if [ $(id -u) != "0" ]; then echo "Error: You must be root to run this script, please use root to install" exit 1ficlear} #优化文件最大打开数DependFile(){
if [ $( cat /etc/security/limits.conf | grep "mysql" | wc -l ) -lt 1 ] ;thencat >>/etc/security/limits.conf <* soft nproc 65536* hard nproc 65536* soft nofile 65536* hard nofile 65536mysql soft nproc 65536mysql hard nproc 65536mysql soft nofile 65536mysql hard nofile 65536EOF
fi
if [ -e /etc/security/limits.d/20-nproc.conf ];thenif [ $( cat /etc/security/limits.d/20-nproc.conf | grep "mysql" | wc -l ) -lt 1 ] ;thencat >>/etc/security/limits.d/20-nproc.conf<mysql soft nproc unlimitedEOF
fifi
if [ -e /etc/security/limits.d/90-nproc.conf ];thenif [ $( cat /etc/security/limits.d/90-nproc.conf | grep "mysql" | wc -l ) -lt 1 ] ;thencat >>/etc/security/limits.d/90-nproc.conf<mysql soft nproc unlimitedEOF
fifi
if [ -e /etc/sysctl.conf ];thenfs_file=$( cat /proc/sys/fs/file-max)if [ ${fs_file} -lt 65535 ] ;thensed -i "s/${fs_file}/65535/g" /etc/sysctl.conf/usr/sbin/sysctl -p
fifi
echo -e "\e[31m #1.配置基础资源 \e[0m"
}
#拷贝tar.gz包DecompressionTarGz(){if [ ! -e ${tarGzPath}${tarGzFile}.tar.gz ];then echo -e "\e[31m ${tarGzPath}${tarGzFile}.tar.gz 不存在!请检查后重新执行脚本 \e[0m" exit 1fi#解压并重命名到安装目录if [ ! -d ${installPath}${tarGzFile} ] ;then mkdir -p ${installPath} tar -xvf ${tarGzPath}${tarGzFile}.tar.gz -C ${installPath} &> /dev/nullfi
echo -e "\e[31m #2.软件已解压 \e[0m"
}#添加组合角色AddMysqlUser(){if [ ! $(id -u "mysql") ]; then echo "mysql user is not exists for to created" /usr/sbin/groupadd mysql /usr/sbin/useradd -g mysql -r -s /sbin/nologin -M mysqlfi
echo -e "\e[31m #3.mysql启动用户已准备完成 \e[0m"
}
#创建mysql 数据目录createMysqlFolder(){if [ -d ${data_default} ] ;then if [ $(du -s ${data_default} | awk 'NR==1{print $1}') -gt 0 ] ;then mv ${data_default} ${data_default}"`date +%Y%m%d%H%M`" fifi
mkdir -p ${data_datadir}mkdir -p ${data_binlog}mkdir -p ${data_dbdata}mkdir -p ${data_logs}mkdir -p ${data_tmp}mkdir -p ${data_undo}
#赋予权限chown -R mysql:mysql ${data_default}chmod 700 ${data_tmp}
echo -e "\e[31m #4.mysql 数据目录 权限 已准备完成 \e[0m"
}
#创建my.cnfMakeMyCnf(){
if [ -e ${mysqlcnf} ] ;then #mv ${mysqlcnf} ${mysqlcnf}"`date +%Y%m%d%H%M`" rm ${mysqlcnf}fi
cat >${mysqlcnf}<[mysqld_safe]user = mysqlnice = 0
[client] socket = ${data_datadir}/mysql.sockport = ${mysqlPort}
[mysqld]############# GENERAL #############skip_sslskip-name-resolveautocommit = ONcharacter_set_server = utf8mb4collation_server = utf8mb4_unicode_ciexplicit_defaults_for_timestamp = ON lower_case_table_names = 1port = ${mysqlPort}read_Only= OFFtransaction_isolation = READ-COMMITTEDopen_files_limit = 65535max_cOnnections= 2000expire_logs_days = 10default-time_zOne= '+8:00'####### CACHES AND LIMITS #########interactive_timeout = 600 lock_wait_timeout = 300max_connect_errors = 1000000
table_definition_cache = 2000table_open_cache = 2000 table_open_cache_instances = 8
thread_cache_size = 32thread_stack = 256K
tmp_table_size = 32Mmax_heap_table_size = 64M
query_cache_size = 0query_cache_type = 0
sort_buffer_size = 1Mjoin_buffer_size = 1Msort_buffer_size = 1Mread_rnd_buffer_size = 2M
innodb_io_capacity = 1000 innodb_io_capacity_max = 2000
max_allowed_packet = 1024Mslave_max_allowed_packet = 1024Mslave_pending_jobs_size_max = 1024M

############# SAFETY ##############local_infile = OFFskip_name_resolve = ONsql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES
############# LOGGING #############general_log = 0log_queries_not_using_indexes = ONlog_slow_admin_statements = ONlog_warnings = 2long_query_time = 1 #1秒慢日志slow_query_log = ON
############# REPLICATION #############
server_id = ${mysqlServerid} #ip+3位数字binlog_checksum = CRC32binlog_format = ROWbinlog_rows_query_log_events = ON
enforce_gtid_cOnsistency= ONgtid_mode = ONlog_slave_updates = ON
master_info_repository = TABLEmaster_verify_checksum = ON
max_binlog_size = 512Mmax_binlog_cache_size = 1024M #已修改,原值1024binlog_cache_size = 8M
relay_log_info_repository = TABLEskip_slave_start = ONslave_net_timeout = 10slave_sql_verify_checksum = ON
sync_binlog = 1sync_master_info = 1sync_relay_log = 1sync_relay_log_info = 1
############### PATH ##############basedir = ${installPath}${tarGzFile}
datadir = ${data_datadir}tmpdir = ${data_tmp}socket = ${data_datadir}/mysql.sockpid_file = ${data_datadir}/mysql.pidinnodb_data_home_dir = ${data_dbdata}
log_error = ${data_logs}/error.loggeneral_log_file = ${data_logs}/general.logslow_query_log_file = ${data_logs}/slow.log
log_bin = ${data_binlog}/mysql-binlog_bin_index = ${data_binlog}/mysql-bin.indexrelay_log = ${data_binlog}/relay-logrelay_log_index = ${data_binlog}/relay-log.index
# undo settingsinnodb_undo_directory = ${data_undo}innodb_undo_log_truncate = 1 innodb_max_undo_log_size = 16Minnodb_undo_tablespaces = 4

############# INNODB #############innodb_file_format = barracudainnodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 1024Minnodb_buffer_pool_instances = 4 innodb_thread_cOncurrency= 0
innodb_log_file_size = 1024Minnodb_log_files_in_group = 2innodb_flush_log_at_trx_commit = 1innodb_support_xa = ONinnodb_strict_mode = ON
innodb_data_file_path = ibdata1:32M;ibdata2:16M:autoextendinnodb_temp_data_file_path = ibtmp1:1G:autoextend:max:30Ginnodb_checksum_algorithm = strict_crc32innodb_lock_wait_timeout = 600
innodb_log_buffer_size = 8Minnodb_open_files = 65535
innodb_page_cleaners = 1innodb_lru_scan_depth = 256innodb_purge_threads = 4innodb_read_io_threads = 4innodb_write_io_threads = 4
innodb_print_all_deadlocks = 1
[mysql]############# CLIENT ############# max_allowed_packet = 16Msocket = ${data_datadir}/mysql.sockno-auto-rehash
[mysqldump] max_allowed_packet                 = 16M
EOF
echo -e "\e[31m #5.mysql cnf配置完成,【需要按照实际情况更改】 \e[0m"}
#初始化数据库InitDataBase(){#cd ${installPath}${tarGzFile}${installPath}${tarGzFile}/bin/mysqld --defaults-file=${mysqlcnf} --basedir=${installPath}${tarGzFile} --datadir=${data_datadir} --user=mysql --initialize
${installPath}${tarGzFile}/bin/mysqld_safe --defaults-file=${mysqlcnf} --user=mysql &
echo -e "\e[31m #6. 初始化数据库完成并启动服务. \e[0m"
}
#重置密码ResetPwd(){sleep 10s#从日志中获取mysql初始密码pwd=`grep "A temporary password is generated for root@localhost: " ${data_logs}/error.log`pwd=${pwd##*root@localhost:}#防止因为初始密码中有特殊字符出错 拼接单引号pwd=${pwd// /}echo ${pwd}${installPath}${tarGzFile}/bin/mysql -uroot -p${pwd} -S ${data_datadir}/mysql.sock --connect-expired-password -e "alter user 'root'@'localhost' identified by '${defaultPwd}';"
echo -e "\e[31m #7. 已重置数据库密码。登录方式如下: \e[0m"echo -e "\e[31m ${installPath}${tarGzFile}/bin/mysql -uroot -p -S ${data_datadir}/mysql.sock \e[0m"
}#ResetPwd
main() { ###1.校验是否为ROOT用户CheckRoot
###2.优化文件最大打开数DependFile
###3.拷贝tar.gz包DecompressionTarGz
###4.添加组合角色AddMysqlUser
###5.创建mysql 数据目录createMysqlFolder
###6.创建my.cnfMakeMyCnf
###7.初始化数据库InitDataBase
###8.重置密码ResetPwd
}
main


3.总结


良好的开端是成功的一半,MySQL是轻量级数据,安装部署也需要学问,粗略的安装往往会导致后期的一些各种大小问题。考虑的越周全,走的越远。


墨天轮原文链接:https://www.modb.pro/db/43180(复制到浏览器中打开或者点击“阅读原文”立即查看)




推荐阅读:


推荐下载:






2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“
数据和云
”公众号回复关键词“
2020DTC
”获得!








视频号,新的分享时代,关注我们,看看有什么新发现?


















数据和云


ID:OraNews


如有收获,请划至底部,点击“在看”,谢谢!




推荐阅读
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了安全性要求高的真正密码随机数生成器的概念和原理。首先解释了统计学意义上的伪随机数和真随机数的区别,以及伪随机数在密码学安全中的应用。然后讨论了真随机数的定义和产生方法,并指出了实际情况下真随机数的不可预测性和复杂性。最后介绍了随机数生成器的概念和方法。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
author-avatar
Coco__GLL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有