MySQL数据库服务器安装标准

(1).BIOS优化,阵列配置

1.1:关闭CPU节能,因为服务器品牌众多,BIOS设置不相同,主要是关闭CPU节能,如C1,DELLR730,已经智能设置,直接有个performance选项,帮你关闭了CPU节能,numa特性

1.2:果服务器是8块硬盘,建议两块做RAID1装系统,剩余6块做RAID10做数据分区,RAID1阵列缓存设置成 WriteThrough ,RAID10设置成writeback,将有限阵列卡缓存给RAID10阵列用,如果是8块以上的盘,组建两组RAID10,两组缓存策略都是writeback,一组装系统以及存放顺序IO类型的数据,比如redolog,归档日志,mysql的binlog,一组做数据分区

1.3:使用XFS文件系统,数据分区用XFS文件系统,挂载参数用defaults,noatime,nodiratime,nobarrier,记住根分区是不能用这个挂载参数,不然你根分区下的目录文件都没有访问时间,修改时间,只能用于数据库文件分区

1.4:修改IO调度策略以及关闭numa:vim /etc/grub.conf 在kernel那行最末尾加上elevtor=deadline numa=off

kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=af13b3dc-c142-42b7-8ed6-cb7c60608af2 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet elevator=deadline numa=off

要当前生效可以这样设置

cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler

(2)操作系统基础优化

2.1:关闭selinux,修改资源配置

vim /etc/security/limits.conf

添加以下这段
 *               soft nofile          65535
 *               soft nproc           65535
 *                hard nofile         65535
 *                hard nproc          65535

sed -ri 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

当前设置selinux 和资源限制, setenforce 0 然后在getenforce 查看是否已经禁用了selinux,设置资源限制,直接ulimit -n 65535,也可以下面这种方式,建议使用下面的方式。

就不用去编辑/etc/security/limits.conf这个文件了

[root@localhost ~]# cd /etc/security/limits.d/
[root@localhost limits.d]# pwd
/etc/security/limits.d
[root@CRM-mysql limits.d]# ll
-rw-r--r-- 1 root root 227 8月 24 11:39 90-nproc.conf
[root@localhost limits.d]# cp -rpf 90-nproc.conf 90-nofile.conf
这是已经编辑好的文件
[root@localhost limits.d]# cat 90-nofile.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

* soft nofile 65535
* hard nofile 65535
root soft nofile unlimited
[root@localhost limits.d]# cat 90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

* soft nproc 65535
* hard nproc 65535
root soft nproc unlimited

#########su -   一下
[root@localhost limits.d]# su -

####
[root@localhost ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256591
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

2.2:关闭不需要的服务,只留下crond,network,rsyslog,sshd ,sysstat,udev-post

2.3:内核参数调整

###########减少swap的使用率#如果设置为0,需要结合vm.overcommit_memory=2,可以尽量避免OOM,一般设置为1
vm.swappiness=1
###########默认值是3797,保证物理内存有足够空闲空间,防止突发性换页
vm.min_free_kbytes=204800
############默认是100,增大这个参数设置了虚拟内存回收directory和i-node缓冲的倾向,这个值越大。越易回收,尽量保留可用内存
vm.vfs_cache_pressure=150
######确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待和设置MySQL中的innodb_max_dirty_pages_pct低一点原理类似

###当文件系统缓存脏页数量达到系统内存百分之多少时(默认10%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入硬盘;

vm.dirty_background_ratio=5

##当文件系统缓存脏页数量达到系统内存百分之多少时(默认20%),系统会停止所有的应用层的IO写操作,等待刷完数据后恢复IO。

vm.dirty_ratio=10
#######################减少TIME_WAIT,提高TCP效率;
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1

(3)安装jemalloc内存管理器

jemalloc内存分配方式与系统默认安装的glic的malloc内存分配方式相比,能提高MySQL的性能,降低了系统CPU和内存资源的利用,关于这方便的压测数据,请参考:http://www.linuxeye.com/Linux/1914.html

http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2

编译安装很简单,tar xvf jemalloc-3.6.0.tar.bz2  ./configure && make && make install

已方便安装好mysql后使用,使用也很简单在[mysqld_safe] 加上malloc-lib= /usr/local/lib/libjemalloc.so

(4)安装异步IO支持

为了提高磁盘操作性能,当前的数据库系统都采用异步IO(Asynchronous IO,AIO)的方式来处理磁盘操作。InnoDB存储引擎亦是如此。
在InnoDB1.1.x之前,AIO的实现通过InnoDB存储引擎中的代码来模拟实现。而从InnoDB 1.1.x开始(InnoDB Plugin不支持),
提供了内核级别AIO的支持,称为Native AIO。因此在编译或者运行该版本MySQL时,需要libaio库的支持,centos最小化安装默认是没有安装的,安装也简单:

yum install libaio-devel

(5)网卡绑定软中断

网卡软中断不平衡,集中在一个CPU核心上(mpstat 查看%soft集中,通常是cpu0),绑定软中断多个核心上,可以用两个脚本来绑定。自己喜欢用哪个都行

vim set_irq_affinity.py。

#!/usr/bin/env python

import re
from os import system,popen
from os import walk as walkdir
from optparse import OptionParser

RPS_CPUS_VALUE = 'ffffffff'
RPS_FLOW_VALUE = '4096'
RPS_RFS_DEFAULT = '0'
interrupts_file = '/proc/interrupts'
rps_cpus_list = []
rps_flow_list = []
#ENTRY_VALUE=32768

def get_device():
return re.findall(r'([a-z]+\d+)\s+Link.*',popen('ifconfig').read())

def get_rfs_rps_file(net_device):
rps_path = '/sys/class/net/' + net_device + '/queues/'
for s in walkdir(rps_path):
if len(s[2]) == 2:
rps_cpus_list.append('/'.join([s[0],s[2][0]]))
rps_flow_list.append('/'.join([s[0],s[2][1]]))

def file_hander(TARGET,VALUE='0'):
try:
f_hander = open(TARGET,'w')
f_hander.write(VALUE)
finally:
f_hander.close()

def set_rfs_rps(net_device):
get_rfs_rps_file(net_device)
def set_rps_cpus_value(PATH):
file_hander(PATH,RPS_CPUS_VALUE)

def set_rps_flow_value(PATH):
file_hander(PATH,RPS_FLOW_VALUE)

map(set_rps_cpus_value,rps_cpus_list)
map(set_rps_flow_value,rps_flow_list)

def unset_rfs_rps(net_device):
get_rfs_rps_file(net_device)
def unset_rps_cpus_value(PATH):
file_hander(PATH,RPS_RFS_DEFAULT)

def unset_rps_flow_value(PATH):
file_hander(PATH,RPS_RFS_DEFAULT)

map(unset_rps_cpus_value,rps_cpus_list)
map(unset_rps_flow_value,rps_flow_list)

def set_irq_balance():
stop_irq_balance = 'service irqbalance stop'
system(stop_irq_balance)
interrupts_ct = open(interrupts_file)
cores_nr = len(interrupts_ct.readline().split()) # 获取CPU核心数
irq_bit = 0
while True:
inter_line = interrupts_ct.readline()
if inter_line == "":
break
js = inter_line.split()
if len(js[-1]) > 5:
if re.match(r'eth.-',js[-1][:5]):
irq_nr = js[0][:-1]
TARGET = '/proc/irq/%s/smp_affinity' %(irq_nr)
VALUE = str(re.sub('0x','',hex(1 << irq_bit))) #1 << irq_bit 相对于2的N次方 ,hex() 二进制转十六进制
file_hander(TARGET,VALUE)
irq_bit += 1
if irq_bit == cores_nr:
irq_bit = 0

def unset_irq_balance():
start_irq_balance = 'service irqbalance start'
system(start_irq_balance)

def usage():
usage = '''''=================================================
Description: irq_balance_set && rfs_rps_set tools
Usage:
<script> -i : set irq smp_affinity
-I : unset irq smp_affinity
-r : set rfs && rps
-R : unset rfs && rps
'''
print usage

if __name__ == '__main__':

parser = OptionParser()
parser.add_option("-i", action="store_true",
dest="irq_true",
default=False)
parser.add_option("-I", action="store_true",
dest="irq_false",
default=False)
parser.add_option("-r", action="store_true",
dest="rps_true",
default=False)
parser.add_option("-R", action="store_true",
dest="rps_false",
default=False)
(options, args) = parser.parse_args()

if options.irq_true == True:
set_irq_balance()
print "irq_balance_set successfully"
elif options.irq_false == True:
unset_irq_balance()
print "unset irq balance successfully"
elif options.rps_true == True:
device_list = get_device()
map(set_rfs_rps,device_list)
print "rfs&&rps configured successfully"
elif options.rps_false == True:
device_list = get_device()
map(unset_rfs_rps,device_list)
print "unconfigured rfs&&rps successfully"
else:
usage()

加入到开机启动中

#!/bin/bash
CORE_SUM="`grep -c '^processor' /proc/cpuinfo`"
IRQ_SUM="`echo "1 2 4 8 10 20 40 80 100 200 400 800 1000 2000 4000 8000 10000 20000 40000 80000 100000 200000 400000 800000"| cut -d " " -f -${CORE_SUM}`"
IRQ_NUM="`echo ${IRQ_SUM}`"
for i in `grep -E '(eth[0-9]+|em[0-9]+)' /proc/interrupts | awk -F ":" '{print $1}' | sed 's/\ //g'`; do
        echo -e "${i}\t:`cat /proc/irq/${i}/smp_affinity`"
 
        y="`echo ${IRQ_NUM} | awk '{print $1}'`"
        echo ${y} > /proc/irq/${i}/smp_affinity
#echo "echo ${y} > /proc/irq/${i}/smp_affinity"
        if [ "${y}" == "`echo ${IRQ_SUM} | awk '{print $NF}'`" ]; then
                IRQ_NUM="`echo ${IRQ_SUM}`"
        else
                IRQ_NUM="`echo ${IRQ_NUM} | sed 's/^\([0-9]\+\)\ \(.*\)/\2/g'`"
        fi
 
        echo -e "----\t `cat /proc/irq/${i}/smp_affinity`"
done
###### Enable RPS (Receive Packet Steering)
rfc=4096
cc=$(grep -c processor /proc/cpuinfo)
rsfe=$(echo $cc*$rfc | bc)
sysctl -w net.core.rps_sock_flow_entries=$rsfe
for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)
do
    echo fff > $fileRps
done
 
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
do
    echo $rfc > $fileRfc
done
 
tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

MySQL数据库服务器安装标准的更多相关文章

  1. 启用CentOS6.5 64位安装时自带的MySQL数据库服务器

    本人在虚拟机上又安装了一台linux机器,作为MySQL数据库服务器用,在安装时选择了系统自带的MySQL服务器端,以下是启用步骤. 首先开启mysqld服务 #service mysqld star ...

  2. MySQL数据库服务器的架设

    导读 MySQL数据库是Linux操作系统上用得最多的数据库系统,它可以非常方便的与其它服务器集成在一起,如Apache.Vsftpd.Postfix等.下面介绍RHEL 6平台MySQL数据库服务器 ...

  3. Geronimo应用服务器和MySQL数据库服务器

    就是Web 2.0的全部,尽管该术语出现才几乎一年的时间,但现在好像只有烹饪杂志还没有加入到讨论Web 2.0未来出路的行列中.自从出现了里程碑式的文章"What Is Web 2.0:De ...

  4. MySQL数据库服务器整体规划(思路与步骤)

    MySQL数据库服务器整体规划(思路与步骤) 参考资料: http://blog.51cto.com/zhilight/1630611 我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免 ...

  5. MySQL数据库服务器(YUM)安装

    1. 概述2. 部署过程2.1 虚拟机console的NFS服务端配置2.2 虚拟机node15的NFS客户端配置2.3 虚拟机安装MySQL环境2.4 配置MySQL3. 错误及解决3.1 启动失败 ...

  6. MySQL数据库服务器整体规划(go)

    我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免以后的很多问题的产生,大大节省我们的时间和精力,在一定幅度上降低成本.当然,这会涉及很多方面.比如机器的选型.业务评估和系统规划等. 所 ...

  7. Cacti监控mysql数据库服务器实现过程

    Cacti监控mysql数据库服务器实现过程 2014-05-29      0个评论    来源:Cacti监控mysql数据库服务器实现过程   收藏    我要投稿 1 先在cacti服务器端安 ...

  8. FAQ | 是什么导致MySQL数据库服务器磁盘I/O高(本文章来自知数堂)

    FAQ | 是什么导致MySQL数据库服务器磁盘I/O高 2016-12-26 叶金荣 老叶茶馆 0.导读 有个MySQL服务器的磁盘I/O总有过高报警,怎么回事? 本文约1500字,阅读时间约10分 ...

  9. MySQL数据库服务器 主从配置

    A B 为两台 MySQL 服务器,均开启二进制日志,数据库版本 MySQL 5.5 一.服务器参数   [A 服务器 192.168.1.100] server-id = 1 binlog-do-d ...

随机推荐

  1. 使用UDP进行数据发送的实例一

    首先如果TCP学过以后,再看UDP进行数据传输也是大同小异的,只是用到的类不同 UDP进行传输需要DataSocket和Datapacket类,Datapacket叫数据报,每一个数据报不能大于64k ...

  2. 1.ssh访问限制

    1.要求:限制my133.t.org(172.168.1.0/24)这个攻击域的主机访. 2.操作:vim /etc/host.deny 忘记可^tab ,在最末尾添加行:sshd:  172.168 ...

  3. c#中的枚举

    1.枚举概念:枚举是用户定义的整型类型,在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值,还可以给值指定易于记忆的名称.如果在代码的某个地方,要试图把一个不可接受范围内的值赋予枚举的一个实 ...

  4. MongoDB的安全性

    上篇文章介绍Mongo启动了,一般数据库启动,下面的操作就是登录数据库了,之前测试数据库是否正常安装的时候也登录过数据库,现在回想一下,好像连用户名和密码都没有输入,找几篇帖子来探究下Mongodb的 ...

  5. php学习日志(3)-echo&print

    在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较. echo与print的区别:   echo print 连续输出字符串 能连续输出多个字符串 只能输出一个字符串 ...

  6. svn团队环境

    1.安装VisualSVN Server VisualSVN-Server-3.3.1-x64.msi 下载,并安装标准版(免费) 2.下载TortoiseSVN TortoiseSVN-1.8.11 ...

  7. 纯CSS实现多选组件

    mark: http://blog.meathill.com/tech/fe/create-multiple-select-component-with-pure-css.html Demo: 小宝3 ...

  8. 简单加密算法在C#中的实现

    加密是指通过某种特殊的方法,更改已有信息的内容,是的未授权的用户即使得到了加密的信息,如果没有正确的解密算法,那么也无法得到信息的内容. 方法一: //须添加对System.Web的引用 using ...

  9. Ubuntu 设置root用户登录

    由于 Ubuntu 是基于 Debian 的 linux 操作系统,在默认的情况下,是没有超级用户(superuser, root)的,但有些系统操作必须有超级用户的权限才能进行,如手动释放内存等.  ...

  10. CPU使用率

    CPU使用率 事故回放 当时的情况是那个样子的: 1,正值饭点,客户电话说系统慢,几乎无法完成订单调度,有时还显示内存不足.当时心里的第一个声音就是,服务器配置太低了,远程一看,2核4G内存,cpu平 ...