本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • 【MySQL运维】MySQL 5.7单实例安装脚本与my.cnf配置说明

【MySQL运维】MySQL 5.7单实例安装脚本与my.cnf配置说明

发布:TangLu2020-2-12 9:36分类: MySQL 标签: mysql 脚本

一、MySQL单实例安装脚本说明

my.cnf配置文件可以根据实际需要进行修改,如果初始化完成后使用临时密码提示密码过期,是因为系统自带的mysql命令行工具与当前安装的MySQL版本不一致,使用绝对路径即可

#!/bin/bash
#脚本说明部分
cat << EOF
1、请事先下载好MySQL二进制安装包并解压于/usr/local下
2、为二进制包做好软连接,如:
	ln -s /usr/local/mysql-5.7.27-linux-glibc2.12-x86_64/ /usr/local/mysql
3、确保上面两步都操作后,运行脚本完成服务安装和初始化,MySQL监听端口为3306,配置文件为/etc/my.cnf
EOF

#变量设置
mysql_dir=/data/mysql
data_dir=/data/mysql/data
log_dir=/data/mysql/log

#初始化数据库(可反复执行,但会清空数据)
read -p "是否进行初始化,初始化将清空已有数据,输入y继续,其它按键退出脚本:" input
if [ $input == "y" ];then
  #创建mysql用户
  id mysql > /dev/null 2>&1
  if [ $? != 0 ];then
    useradd -r -s /sbin/nologin -M mysql && echo "成功创建MySQL用户"
    sleep 1
  else
    echo "MySQL用户已存在,无需创建"
    sleep 1
  fi

  #创建数据和日志目录
  mkdir -p $log_dir
  mkdir -p $data_dir
  chown -R mysql.mysql $mysql_dir

  #创建数据库配置文件
  if [ -e /etc/my.cnf ];then
    echo > /etc/my.cnf
  else
    touch /etc/my.cnf
  fi

#my.cnf配置文件内容
cat > /etc/my.cnf <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = $data_dir
port = 3306
socket = /tmp/mysql.sock 
character-set-server = utf8mb4
default-storage-engine = INNODB
skip-name-resolve
server_id = 10
sql_safe_updates=1

#Log setting
log_error = $log_dir/error.log
slow_query_log = on
slow_query_log_file = $log_dir/slow.log
long_query_time = 3
log_bin = $log_dir/master-bin
log_bin_index = $log_dir/master-bin.index
binlog_format = row
expire_logs_days = 10
max_binlog_size = 1024M
binlog_cache_size = 32768

#双1参数,建议都设置为1提升数据安全
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# Innodb setting
innodb_buffer_pool_size = 512M 
innodb_flush_method=O_DIRECT 
innodb_log_file_size = 200M 
innodb_file_per_table = 1  
innodb_lock_wait_timeout = 10 
# innodb_buffer_pool_dump_at_shutdown = ON  
# innodb_buffer_pool_filename = ib_buffer_pool
# innodb_buffer_pool_load_at_startup = ON 

[client]  #作用于mysql客户端工具如果这里配置了先关选项,使用客户端命令就不需要填写了
socket = /tmp/mysql.sock
prompt= "[\\u@linuxe][\\d]>"  
# tee = "/data/dblog/tee.log"  
no-auto-rehash  
EOF

#检查是否有3306端口占用
mysql_proc=`netstat -ntulp | grep 3306 | wc -l`
if [ $mysql_proc -gt 0 ];then
  echo "当前MySQL正在运行,请输入MySQL管理密码停止进程"
  /usr/local/mysql/bin/mysqladmin -uroot -p -S /tmp/mysql.sock shutdown && echo "MySQL服务已关闭,开始初始化"
    if [ $? -ne 0 ];then
      echo "密码错误,脚本退出" 
      exit 1
    fi
  else
      echo "没有MySQL进程正在运行,开始进行初始化"
      sleep 1
fi

rm -rf $data_dir/*  && echo "已清空数据目录"
rm -rf $log_dir/*  && echo "已清空日志目录"

#初始化数据库
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf  --initialize --user=mysql
if [ $? -ne 0 ];then
  echo "初始化失败,脚本退出" 
  exit 1
else
  mysql_password=`grep "temporary password" $log_dir/error.log | awk '{print $NF}'`
  echo "初始化成功,当前MySQL临时管理密码:$mysql_password"
fi

#启动服务
  /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf 2>&1 > /dev/null &
  echo "请运行/usr/local/mysql/bin/mysql_secure_installation 进行安全初始化"
else
  echo "脚本已退出"
fi


二、my.cnf配置文件选项说明

[mysqld]
basedir = /usr/local/mysql
datadir = $data_dir
port = 3306
socket = /tmp/mysql.sock 
character-set-server = utf8mb4
default-storage-engine = INNODB
skip-name-resolve
server_id = 10
sql_safe_updates=1
log_error = $log_dir/error.log
slow_query_log = on
slow_query_log_file = $log_dir/slow.log
long_query_time = 3
log_bin = $log_dir/master-bin
log_bin_index = $log_dir/master-bin.index
binlog_format = row
expire_logs_days = 10
max_binlog_size = 1024M
binlog_cache_size = 32768
sync_binlog = 1  #每次有事务提交都刷新日志到磁盘中
innodb_flush_log_at_trx_commit = 1 #0是每秒刷新一次redo buffer到磁盘,当服务崩溃可能丢失1秒数据;1是每次事务提交时都立即刷新到磁盘;2是每次事务提交都立即刷新到os cache中,随后刷新到磁盘,机器断电才会丢失1秒数据
innodb_buffer_pool_size = 512M  #默认128M,是MySQL最大的内存区域,也是最重要的性能参数。用于设置数据和索引缓存大小,没有在缓存中找到数据则会读取硬盘,降低效率。建议建议设置为系统最大内存的80%。该选项通过在线修改的话只能设置为字节格式,通过配置文件修改则可以加M、G等单位
innodb_flush_method=O_DIRECT  #默认为fsync,代表刷数据到磁盘的时候会先申请OS CACHE。但是在MySQL中除了innodb_buffer_pool_size会占用内存,每个会话还会单独申请内存空间,再加上fsync申请的内存,容易导致OOM。改为O_DIRECT会垮过系统缓存直接写到磁盘。
innodb_log_file_size = 200M  #redo log日志大小,配置越大写操作效率越高,但出现崩溃等意外时恢复时间就更长,小业务200M就够用,中型业务2G左右
innodb_file_per_table = 1  #每个表有独立的表空间,分散IO,提升性能。否则会全部存放在ibdata1文件中,后面不好维护
innodb_lock_wait_timeout = 10 #行锁等待超时时间,默认50,建议5-20秒
# innodb_buffer_pool_dump_at_shutdown = ON  #每次停机会dump出buffer pool中的数据
# innodb_buffer_pool_filename = ib_buffer_pool  #dump出的数据文件
# innodb_buffer_pool_load_at_startup = ON  #启动服务时加载dump文件提升效率
[client]  #作用于mysql客户端工具如果这里配置了先关选项,使用客户端命令就不需要填写了
socket = /tmp/mysql.sock
prompt= "[\\u@linuxe][\\d]>"  #修改提示符,可以看到当前所在的库
# tee = "/data/dblog/tee.log"  #可以将操作记录写到日志中作为审计
no-auto-rehash  #禁止自动读取元数据,这样虽然没有命令自动补齐功能,但会减轻负载。如果使用mysql连接服务后卡住了,就是因为元数据被锁了,可以mysql -A来登陆


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《【MySQL运维】MySQL 5.7单实例安装脚本与my.cnf配置说明
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-559.html  [生成短网址]

已有 0/734 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~