MySQL 服务器上线检查流程

1. 操作系统磁盘分区

挂节点 分区类型 大小 用处
/data xfs 根据实际情况而定 数据文件使用

2. 主机常用软件检测

  • systat 包提供了常用的iostat,mpstat,sar等常用工具包,需提前安装。
  • gdb 提供一些常用的 debug 工具,比如 gstack,当MySQL hang住时,可使用 pstack ( gstack 的软链)收集信息。
#pstack收集命令如下
pstack `pidof mysqld` > /tmp/pstack.out
#安装常用包
yum install –y  sysstat  gdb  strace

3. 禁止iptables

[root@db ~]# /etc/init.d/iptables stop
[root@db ~]# chkconfig --list|grep iptables
[root@db ~]# chkconfig iptables off

4. 禁止selinux

[root@db ~]# getenforce 0
[root@db ~]# vim /etc/sysconfig/selinux
把SELINUX=enforcing 替换为:
SELINUX=disable

5. 关闭numa

  • 服务器关闭 numa 会影响所有进程,关闭 numa 主要是解决MySQL 服务器 swap 严重以及内存泄漏的问题。需要注意的是 MySQL5.7.9 引入了 innodb_numa_interleave 参数,MySQL自己解决了内存分类策略的问题,前提是服务器支持 numa。也就是说如果使用 MySQL5.7.9 之后的版本,可以不用关闭服务器的 numa。

1. 修改 grub.conf

  • RHEL/CentOS 6
    • 在 /boot/grub/grub.conf 文件中修改 kernel 行(添加numa=off
[root@db ~]# vi /boot/grub/grub.conf
kernel /vmlinuz-2.6.39-400.215.10.EL ro root=/dev/VolGroup00/LogVol00 numa=off
  • For RHEL 7
    在/etc/default/grub 文件中修改 kernel 行。
[root@db ~]# vi /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_vm-210/root rd.lvm.lv=rhel_vm-210/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto  vconsole.keymap=us rhgb quiet numa=off

[root@db ~]# grub2-mkconfig -o /etc/grub2.cfg
  • RHEL7/CentOS7 必须要重建 GRUB 配置文件才能生效

2. 重启操作系统

[root@db ~]# reboot

6. 配置swap权重

  • 数据库服务器必须降低 swap 的使用权重
[root@db ~]# vim /etc/sysctl.conf
vm.swappiness = 1

保存后使其生效s
[root@db ~]# sysctl -p

7. 检查时区是否为东八区

# 查看时区,如果不是东八区需要按时区进行校准
[root@db ~]# date -R
Wed, 06 Mar 2019 14:17:16 +0800

# 设置软连接,进行时区校准
[root@db ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 注:修改时间后须手动重启crontab,cron的执行时间才会同步
[root@db ~]# systemctl restart crond

8. 配置ntp服务

  • 根据实际的 ntp 服务器地址修改配置
[root@db ~]# vim /etc/ntp.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# 改为
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 100.65.0.1 iburst
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

##  启动服务:  ##
# 先手工对时一下:
[root@db ~]# ntpdate 100.65.255.1
# redhat6/centos6
[root@db ~]# service ntpd start
[root@db ~]# chkconfig ntpd on

# redhat7/centos7
[root@db ~]# systemctl start ntpd
[root@db ~]# systemctl enable ntpd

# 注:修改时间后须手动重启crontab,cron的执行时间才会同步
[root@db ~]# systemctl restart crond

9. 核对umask

# 查看/ etc / profile并搜索umask关键字,查看以下代码是否被扩展
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
     umask 002
else
    umask 022
fi

# 查看当前系统umask的值,确保与文件中的值一致
[root@db ~]# umask
0022

10. 配置历史命令

[root@db ~]# vi /etc/bashrc  # 在末尾添加: 
export HISTFILESIZE=500000000 
export HISTSIZE=1000000 
export PROMPT_COMMAND="history -a" 
export HISTTIMEFORMAT='%F %T ' 
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S  `whoami`  " 

# 使配置生效: 
[root@db ~]# source /etc/bashrc

11. 关闭透明大页面(THP)

  • 查询系统是否开启了 THP 命令
  • 如果括号中的是 always 表示开启了,never 则表示未开启
[root@db ~]# cat /sys/kernel/mm/transparent_hugepage/enabled 
[always] madvise never 
[root@db ~]# cat /sys/kernel/mm/transparent_hugepage/defrag 
[always] madvise never
  • 实时生效关闭方案
[root@db ~]# echo never >> /sys/kernel/mm/transparent_hugepage/enabled 
[root@db ~]# echo never >> /sys/kernel/mm/transparent_hugepage/defrag
  • 写进配置文件永久生效(需要重启)
# 在/etc/rc.local中增加如下内容
if test -f /sys/kernel/mm/transparent_hugepage/enabled;  
then 
    echo never > /sys/kernel/mm/transparent_hugepage/enabled 
fi 
if test -f /sys/kernel/mm/transparent_hugepage/defrag;  
then 
    echo never > /sys/kernel/mm/transparent_hugepage/defrag 
fi

# 执行以下操作,使rc.local可以在系统引导期间执行
[root@db ~]# chmod +x /etc/rc.d/rc.local

12. 检查系统虚拟内存超配参数

  • 虚拟机环境的宿主机超配,cpu超配。并给客户提出风险告知。
  • 检查系统虚拟内存超配参数
  • 确认vm.overcommit_memory=0, 如果为其他值, 需报备
  • ( 场景, 若vm.overcommit_memory为2, 虚拟内存超配受到vm.overcommit_ratio限制, 可能无法分配足够大的内存 )
[root@db ~]# sysctl -A | grep "vm.overcommit_memory" 
sysctl: reading key "net.ipv6.conf.all.stable_secret" 
sysctl: reading key "net.ipv6.conf.default.stable_secret" 
sysctl: reading key "net.ipv6.conf.eth0.stable_secret" 
sysctl: reading key "net.ipv6.conf.lo.stable_secret" 
vm.overcommit_memory = 0

13. 检查字符集

[root@db ~]# locale | grep en
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"

[root@db ~]# echo $LANG
en_US.UTF-8

14. 检查网络是否与外网打通,ping是否正常

  • 本次测试在内网环境应无法ping通外网
[root@db ~]# ping www.baidu.com    
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.            
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=51 time=8.39 ms 
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=51 time=7.16 ms 
^C 
--- www.a.shifen.com ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1008ms 
rtt min/avg/max/mdev = 7.160/7.776/8.393/0.622 ms

15. 检查网络丢包率是否正常

[root@db ~]# ping 10.186.60.32
PING 10.186.60.32 (10.186.60.32) 56(84) bytes of data. 
64 bytes from 10.186.60.32: icmp_seq=1 ttl=64 time=0.022 ms 
64 bytes from 10.186.60.32: icmp_seq=2 ttl=64 time=0.029 ms 
64 bytes from 10.186.60.32: icmp_seq=3 ttl=64 time=0.034 ms 
64 bytes from 10.186.60.32: icmp_seq=4 ttl=64 time=0.040 ms 
64 bytes from 10.186.60.32: icmp_seq=5 ttl=64 time=0.028 ms 
64 bytes from 10.186.60.32: icmp_seq=6 ttl=64 time=0.031 ms 
64 bytes from 10.186.60.32: icmp_seq=7 ttl=64 time=0.028 ms 
64 bytes from 10.186.60.32: icmp_seq=8 ttl=64 time=0.031 ms 
64 bytes from 10.186.60.32: icmp_seq=9 ttl=64 time=0.032 ms 
64 bytes from 10.186.60.32: icmp_seq=10 ttl=64 time=0.029 ms 
64 bytes from 10.186.60.32: icmp_seq=11 ttl=64 time=0.039 ms 
64 bytes from 10.186.60.32: icmp_seq=12 ttl=64 time=0.032 ms 
64 bytes from 10.186.60.32: icmp_seq=13 ttl=64 time=0.031 ms 
64 bytes from 10.186.60.32: icmp_seq=14 ttl=64 time=0.036 ms 
^C 

--- 10.186.60.32 ping statistics --- 
14 packets transmitted, 14 received, 0% packet loss, time 13043ms 
rtt min/avg/max/mdev = 0.022/0.031/0.040/0.007 ms

16. 检查tcp keepalive是否打开

[root@db ~]# sysctl -a | grep keepalive 
net.ipv4.tcp_keepalive_intvl = 75 
net.ipv4.tcp_keepalive_probes = 9 
net.ipv4.tcp_keepalive_time = 7200 
sysctl: reading key "net.ipv6.conf.all.stable_secret" 
sysctl: reading key "net.ipv6.conf.default.stable_secret" 
sysctl: reading key "net.ipv6.conf.eth0.stable_secret" 
sysctl: reading key "net.ipv6.conf.lo.stable_secret

17. 检查tcp连接以及随机端口参数

# 表示开启重用(通过timestamp 递增性,客户端和服务器能够处理outofbind fin包)。允许将TIME-WAIT sockets重新用于新的TCP连接
[root@db ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse
1

# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 。注意: Linux 从4.12内核版本开始移除了 tcp_tw_recycle 配置
[root@db ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle
0     

# 查看网络随机端口参数的值,如果参数范围包含DMP平台端口5690-5800(会有可能导致产品组件端口被占用)或者MySQL的端口范围,建议修改
[root@db ~]# cat /proc/sys/net/ipv4/ip_local_port_range  
32768 60999        # 默认值

# 指定为已知的第三方应用程序保留的端口。这些端口将不会被自动端口分配使用(例如,使用端口号0调用connect()或bind()时)。
# 防呆参数,如果有ip_local_port_range 可不配置此参数,显式端口分配行为不受此影响。
[root@db ~]# cat /proc/sys/net/ipv4/ip_local_reserved_ports     # 注意:内核版本要大于2.6.18-164,否则不支持该参数。

[root@db ~]# vim /etc/sysctl.conf            # 修改系统配置信息
net.ipv4.tcp_tw_reuse = 1               # 默认为空,表示关闭,建议为1,表示允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 0             # 默认为空,表示关闭,建议关闭
ip_local_port_range  = 32768 60999      # 默认为32768 60999,如ip_local_port_range中为默认值,则本行无需填写
ip_local_reserved_ports  = 5690-5800    # 默认为空,表示无保留端口

[root@db ~]# sysctl -p     # 配置生效

18. MySQL用户ulimit设置

  • 操作系统对mysql用户注意以下参数的设置,该设置为必须的设置
# 如果是Redhat7
[root@db ~]# vi /etc/security/limits.d/20-nproc.conf
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535

#如果是Redhat6
[root@db ~]# vi /etc/security/limits.d/90-nproc.conf
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535

19. 卸载系统自带旧版本MySQL相关RPM包

  • 某些服务系预装了 MySQL,但是版本是5.1,避免客户端版本差异带来的影响,应该卸载这类rpm包.
  • 如系统中存在perl-DBD-MySQL-4.013-3.el6.x86_64mysql-libs-5.1.73-3.el6_5.x86_64可保留不卸载.
[root@db ~]# rpm -qa|grep mysql -i 
[root@db ~]# rpm -e --nodeps mysql-xxx-5.1..x86_64 
[root@db ~]# mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d`
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论