如何为 MySQL 服务器设置自定义每进程属性

有时我们可能需要设置自定义的每个进程限制或者属性。
可以修补 mysqld_safe,但使用包装脚本更容易实现。
在早期版本中,我们可以使用 mysqld_safe 的 mysqld= 选项来指定包装脚本的路径,但从 5.5.52. 5.6.33 和 5.7.15 开始,此功能已被删除。

目前最简单的解决方案是重命名现有的 mysqld(例如重命名为 mysqld.bin),并将名为 mysqld 的脚本放在同一目录中。

  • 将现有的“mysqld”二进制文件重命名为“mysqld.bin”
  • 在其位置创建一个名为“mysqld”的脚本,该脚本设置我们需要的任何每个进程的限制或者属性,然后调用“mysqld.bin”
  • 设置“mysqld”脚本的所有权和权限

以下是一些示例包装脚本:

  1. 要增加允许的线程数,请使用“ulimit -u”:
#!/bin/sh
DIR=$(dirname "
#!/bin/sh
DIR=$(dirname "
#!/bin/sh
DIR=$(dirname "
#!/bin/sh
DIR=$(dirname "
#!/bin/sh
DIR=$(dirname "
#!/bin/sh
DIR=$(dirname "
#!/bin/sh
DIR=$(DIRNAME "##代码##")
LIB=/path/to/your/tcmalloc.so
export LD_LIBRARY_PATH=$(dirname "$LIB"):$LD_LIBRARY_PATH
export LD_PRELOAD="$LIB"
exec "$DIR/mysqld.bin" "$@"
") export AUTHENTICATION_PAM_LOG=1 exec "$DIR/mysqld.bin" "$@"
") exec /bin/taskset -c 0-7,8-11 "$DIR/mysqld.bin" "$@"
") exec /usr/bin/numactl --interleave all "$DIR/mysqld.bin" "$@"
") echo "-1000" > /proc/self/oom_score_adj exec "$DIR/mysqld.bin" "$@"
") ulimit -c unlimited exec "$DIR/mysqld.bin" "$@"
") ulimit -u 10000 exec "$DIR/mysqld.bin" "$@"
  1. 要设置核心文件大小限制,请使用“ulimit -c”:
##代码##

3.为了防止OOM-killer中止mysqld,设置oom_score_adj:

##代码##
  1. 要启用 NUMA 交错内存分配,请使用 numactl :
##代码##
  1. 要设置 CPU 亲和性,请使用任务集:
##代码##
  1. 在错误日志中记录PAM认证调试信息:
##代码##
  1. 加载替代 malloc 库,例如 tcmalloc :
##代码##
日期:2020-09-17 00:11:50 来源:oir作者:oir