(0.2.1)mysql数据库环境-操作系统配置
【1】mysql数据库运行环境准备-最优配置
【1.1】如何查看官方文档了解环境要求
https://www.mysql.com/support/supportedplatforms/database.html
参考:https://www.modb.pro/db/167688
【1.2】安装虚拟机环境与操作系统
redhat linux as 6/7,oracle linux 6/7,centos 6/7
【2】操作系统最优配置9大步骤
(1)主机名(hosts文件)
【1】hostname new_hostname #直接修改本地主机名
【2】vi /etc/sysconfig/network #修改网络上的主机名
把hostname= 改成如上图我们设置的新名称
【3】vi /etc/hosts #修改hosts文件,达到本机的网络主机名与本机IP地址映射
这一步也可以 echo "192.168.1.121 db1" >> /etc/hosts
(2)配置操作系统英文环境
echo "export LANG=en_US" >> ~/.bash_profile
(3)修改资源限制参数
# 永久生效,需要重启
vi /etc/security/limits.conf nproc:用户创建进程数限制 建议65535 nofile:进程打开文件次数限制 建议65535 stack:存放变量的指针 建议65535 软硬限制(soft/hard,软限制到了阈值会警告,硬限制则就是不能再继续做了),*代表所有用户
* soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 * soft stack 65535 * hard stack 65535
--可以通过以下代码去检验 ulimit -a
#如果要临时 生效,请使用 ulimit -参数 这个参数就是上图后面的缩写,例如修改打开文件限制为65535
ulimit -n 65535
#进程数限制,默认有限制,默认清空
echo "* - nproc 65535" > /etc/security/limits.d/90-nproc.conf
(4)设置系统安全策略(SELINUX|防火墙)
(4.1)SELinux(linux安全认证的一个东西)
vi /etc/selinux/config 把参数设置为 SELINUX=disable
echo "SELINUX=disable" >> /etc/selinux/config cat /etc/selinux/config setenforce 0 #刷新生效
(4.2)关防火墙
#公网,建议要开防火墙iptables,设置比较合理的安全规则,限制外网访问。
service iptables stop #关闭防火墙
chkconfig --level 2345 iptables off #开启启动关闭
(4.3)控制资源分配限制
echo "session required pam_limits.so" >> /etc/pam.d/login
cat /etc/pam.d/login
(5)关闭NUMA功能(避免内存平均分配到CPU,这对数据库DB是不好的)
(5.1)修改内核参数达到目的
numastat #查看
vi /etc/grub.conf 设置 numa=off
查看每个节点的分配情况
【1】numastat 【2】numactl --show
然后重启生效,reboot
(注意,要写在内核后)
CentOS7.x中可以通过下面的方式关闭 numa:
最佳实践一条命令解决:grubby --update-kernel=ALL --args="numa=off"
reboot
#核验
dmesg | grep -i numa
1. 编辑 /etc/default/grub 文件,如下图所示加上:numa=off
2. 重新生成 /etc/grub2.cfg 配置文件:
grub2-mkconfig -o /etc/grub2.cfg
3. 重启操作系统
reboot
4. 重启之后进行确认:
dmesg | grep -i numa
再次确认:cat /proc/cmdline
(6)IO调度算法与IO优化(全是单次生效)
IO调度算法:mysql服务器一定不要使用默认的CFQ调度算法。如果是SSD,那么应该使用NOOP调度算法,如果是磁盘,就应该使用Deadline调度算法。
【1】IO调度算法: /sys/block/sd*/queue/scheduler
【2】IO预读:/sys/block/sd*/queue/read_ahead_kb
【3】IO队列:/sys/block/sd*/queue/nr_requests
一共4种,默认是CFQ(完全随机访问,相对来说这种算法对于mysql来说不是很好,会造成小IO的延时增加,msql官网建议算法换成deadline算法,这种IO比较稳定)。
(6.1)查看默认调度算法:cat /sys/block/sd*/queue/scheduler
--如果是sas/stat使用如下
(6.2)修改默认调度算法:echo 'deadline' > /sys/block/sd*/queue/scheduler
--如果是ssd使用如下
(6.2)修改默认调度算法:echo 'NOOP' > /sys/block/sd*/queue/scheduler
(改好后如下)
减少IO的预读和队列
(6.3)队列与预读:
cat /sys/block/sd*/queue/read_ahead_kb #查看预读
echo '16' > /sys/block/sd*/queue/read_ahead_kb #减少预读 (默认128)
cat /sys/block/sd*/queue/nr_requests #查看队列数
echo '512' > /sys/block/sd*/queue/nr_requests #增大队列 (默认128)
(查看单个磁盘)
(查看全部磁盘)
(6.3)队列数设置重启生效:修改这个文件 vi /etc/rc.local (把上面的队列与预读代码加上来)
echo '512' > /sys/block/sdb/queue/nr_requests echo '512' > /sys/block/sdc/queue/nr_requests
(7)虚拟内存与保留内存
(7.1)配置文件:vi /etc/sysctl.conf
虚拟内存参数:(设置物理内存低于10%的时候,才做页面交换使用虚拟内存)
vm.swappiness = 10
保留内存参数(即保留给操作系统使用):
vm.min_free_kbytes=51200 --给操作系统预留50M,建议测试环境
vm.min_free_kbytes=512000 --给操作系统预留500M,建议给生成环境
(7.2)设置生效: sysctl -p #看,我们刚设置的2行就出来了
(8)内存
深入主机内存配置详解:https://wenku.baidu.com/view/64dd549f1937f111f18583d049649b6648d70986.html
net.nf_conntrack_max = 1048576 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 vm.swappiness = 0 vm.min_free_kbytes = 67584 vm.overcommit_memory = 2 vm.overcommit_ratio = 85 kernel.sysrq = 1 net.nf_conntrack_max = 1048576
【3】操作系统YUM环境配置
(1)挂载光驱
--下次重启还需要重新手工挂载否则用不了,除非使用(如果想重启后快速挂载,修改 /etc/fstab 配置加载文件,详情见挂载与文件系统命令4.4)
mount /dev/cdrom /mnt
(2)构造yum源文件
cd /etc/yum.repos.d #进入yum源目录
mkdir bk #构建备份目录
mv *.repo bk/ #把现有的配置文件移动到刚新建的bk目录下面去
vi itpux.repo
(3)修改文件
[OEL6]
name=linux6.9
baseurl=file:///mnt
gpgcheck=0
enabled=1
分析释义:-------- name:名称 baseurl:yum源路径 gpgcheck:是否验证加密与签名 enabled:是否启用yum源
(4)测试验证yum源
yum list
【4】Mysql所需磁盘与分区最规范的配置
(1)磁盘目录
安装目录:/mysql/app
数据目录:/mysql/data
日志目录:/mysql/log
备份目录:/mysql/backup
(2)文件系统,使用LVM,最好使用 raid10
(LVM操作使用)
然后给root目录、根目录,以及上面几个目录分别给分区
#参考代码 #创建PV pvcreate /dev/sdb /dev/sdc #创建VG vgcreate mysqlvg /dev/sdb vgcreate bakvg /dev/sdc #创建LV lvcreate -n mysqllv -L 10G mysqlvg lvcreate -n datalv -L 20G mysqlvg lvcreate -n loglv -L 20G mysqlvg lvcreate -n baklv -L 50G bakvg #格式化 mkfs.ext4 /dev/mysqlvg/mysqllv mkfs.ext4 /dev/mysqlvg/datalv mkfs.ext4 /dev/mysqlvg/loglv mkfs.ext4 /dev/bakvg/baklv #建立目录 mkdir -p /mysql/app mkdir -p /mysql/data mkdir -p /mysql/log mkdir -p /mysql/backup #挂载 mount /dev/mysqlvg/mysqllv /mysql/app mount /dev/mysqlvg/datalv /mysql/data mount /dev/mysqlvg/loglv /mysql/log mount /dev/bakvg/baklv /mysql/backup #df -h 查看结果 #修改 /etc/fstab 以便可以重启自动挂载 /dev/mysqlvg/mysqllv /mysql/app ext4 defaults 0 0 /dev/mysqlvg/datalv /mysql/data ext4 defaults 0 0 /dev/mysqlvg/loglv /mysql/log ext4 defaults 0 0 /dev/bakvg/backuplv /mysql/backup ext4 defauls 0 0 #reboot 查看效果