MySQL

MySQL 账号安装加固

Linux · 12月3日 · 2020年

MySQL安装之前硬件处

件级别注意问题

  • cpu,内存默认节能模式进入bios开启高性能模式
  • numa
  • raid
wb.wt的两个区别
wb.直接写到raid cache里就是返回
wt 写到磁盘
wb force 
raid 1, raid 0 raid 5 raid 10的区别

raid10的做法

MySQL配置raid10配置方法
先1然后0

系统级别

关闭numa内核参需要添加numa=off只需要在kernel位置添加

[root@mysql-51 ~]# cat /boot/grub/grub.conf 
kernel /vmlinuz-2.6.32-696.16.1.el6.x86_64 ro root=UUID=0a482411-1144-4d9f-84ed-3c775eb478d1 rd_NO_LUKS rd_NO_LVM LANG=zh_CN.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet  numa=off

注意:请根据你的Linux版本内核参数执行uname -a查看,在处理。

说明:

numa源于cpu最新技术:节能模式。操作系统和cpu硬件配合,系统不繁忙的时候,为了节约能和降低温度,它会将cpu降频。

对于MySQL来说,是一个灾难,为了保证MySQL能充分利用CPU的资源,建议设置CPU为最大性能模式,这个设置可以在BIOS和操作系统中设置,当然BIOS中置该项更好,更彻底关闭numa系统设置方式以上即可。

 

提示:低5.7版加固处

MySQL>deletet from mysql.user where user!='root' or host!='localhost';
mysql> truecate mysql.db;
mysql> drop databases test;

更彻底的解决方案

原帖也只解决了解决方案的一部分:使用交错分配。一个完整而可靠的解决方案实际上需要三件事情,正如我们在Twitter上实施生产系统的这一变化时所发现的:

  1. numactl –interleave = all强制交错分配。这与之前描述的完全一样,并且工作良好。
  2. 使用sysctl -q -w vm.drop_caches = 3mysqld启动之前刷新Linux的缓冲区缓存。这有助于确保分配公平性,即使在操作系统缓冲区高速缓存中存在大量数据的情况下重新启动守护进程也是如此。
  3. 强制操作系统在启动时立即分配InnoDB的缓冲池,在支持的地方使用MAP_POPULATE(Linux 2.6.23 +),否则返回memset。这迫使NUMA节点分配决定立即进行,而缓冲区缓存仍然是干净的,从上面的刷新。

这些更改在Twitter MySQL 5.5中分别实现为mysqld_safe选项numa-interleaveflush-caches,以及mysqld选项innodb_buffer_pool_populate

对于numa更详细

https://blog.jcole.us/2012/04/16/a-brief-update-on-numa-and-mysql/

https://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

Ulimit限制优化

[root@mysql-51 ~]# 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) 3811
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) 3811  
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

新版本7MySQL建议打开core文件。

echo ‘*               -       nofile         65535’  >> /etc/security/limits.conf

Openfiles最大连接建议更改为65535

详细情况推荐请看该

优化更改max user processes(查看用户最大连接数,针对多实例瓶颈优化)

http://www.cnblogs.com/pangguoping/p/5792075.html(推荐博客)
http://wubx.net/php-connect-mysql-hy000-2003/

IO调度磁盘

SAS:deadline
Ssd:noop
/data xfs

Innodb IO优化

对于数据库来讲大多瓶颈都出现在IO问题上,所以现在SSD类的设备也才能大行其道。那数据库的IO这块有什么可以优化的吗? 我这里大致谈一下我的看法,希望能达到一个抛砖引玉的效果。
这里谈一下数据库本身的配置方面
具体如下:
配置方面对于IO优化的原则:尽可能能缓存,减少读对数据库的随机IO的请求;同时减少写的随机IO的随时发生,利用各种buffer去缓存。下面来看一下这块的参数:
innodb_buffer_pool_size : 这是Innodb最重要的一个配置参数,这个参数控制Innodb本身的缓大小,也影响到,多少数据能在缓存中。建议该参数的配置在物理内存的70%-80%之间。
innodb_flush_method: 这个控制Innodb的IO形为,什么:fsync, O_DSYNC之类的,这里不做过多介绍, 建议使用: O_DIRECT, 这样减少操作系统级别VFS的缓存使用内存过多和Innodb本身的buffer的缓存冲突,同时也算是给操作系统减少点压力。
innodb_io_capacity: 这个参数据控制Innodb checkpoint时的IO能力,一般可以按一块SAS 15000转的磁盘200个计算,6块盘的SAS做的Raid10这个值可以配到600即可。如果是普通的SATA一块盘只能按100算。(innodb-plugin, Percona有这个参数)
innodb_max_dirty_pages_pct : 这个参数据控制脏页的比例如果是innodb_plugin或是MySQL5.5以上的版本,建议这个参数可以设制到75%-90%都行。如果是大量写入,而且写入的数据不是太活跃,可以考虑把这个值设的低一点。 如果写入或是更新的数据也就是热数据就可以考虑把这个值设为:95%
innodb_log_file_size : 这个可以配置256M以上,建议有两个以前的日志文件(innodb_log_files_in_group). 如果对系统非常大写的情况下,也可以考虑用这个参数提高一下性能,把文件设的大一点,减少checkpiont的发生。 最大可以设制成:innodb_log_files_in_group * innodb_log_file_size < 512G(percona, MySQL 5.6) 建议设制成: 256M -> innodb_buffer_pool_size/innodb_log_file_in_group 即可。
innodb_log_buffer_size : 如果没在大事务,控制在8M-16M即可。
其它对IO有影响的参数(以5.6为准)
innodb_adaptive_flushing 默认即可
innodb_change_buffer_max_size 如果是日值类服务,可以考虑把这个增值调到 50
innodb_change_buffering 默认即可
innodb_flush_neighors 默认是开的, 这个一定要开着,充分利用顺序IO去写数据。
innodb_lru_scan_depth: 默认即可 这个参数比较专业。
innodb_max_purge_lag 默认没启用,如果写入和读取量大,可以保证读取优先,可以考虑使用这个功能。
innodb_random_read_ahead 默认没开启,属于一个比较活跃的参数,如果要用一定要多测试一下。 对用passport类应用可以考虑使用
innodb_read_ahead_threshold 默认开启:56 预读机制可以根据业务处理,如果是passprot可以考虑关闭。如果使用innodb_random_read_ahead,建议关闭这个功能
innodb_read_io_threads 默认为:4 可以考虑8
innodb_write_io_threads 默认为:4 可以考虑8
sync_binlog 默认即可: 0
innodb_rollback_segments 默认即可: 128

 

0 条回应