安装前准备 CRT连接 1 2 3 4 5 6 7 8 9 vim /etc/ssh/sshd_config LoginGraceTime 0 PermitRootLogin yes StrictModes yes UseDNS no MaxSessions 50 systemctl restart sshd.service
主机名、时区 1 2 3 4 5 timedatectl set-timezone "Asia/Shanghai" timedatectl status |grep Local hostnamectl set-hostname rhel9 vim /etc /hostname 10 .16 .2 .58 rhel9
检查系统环境 1 2 3 4 5 6 7 8 9 10 dmidecode |grep Name dmidecode|grep -A5 "Memory Device" |grep Size|grep -v No |grep -v Rangegrep SwapTotal /proc/meminfo | awk '{print $2}' free -m df -hT
关闭防火墙&SElinux 1 2 3 4 5 6 7 8 systemctl stop firewalld.service systemctl disable firewalld.service cp /etc/ selinux/config / etc/selinux/ config_`date +"%Y%m%d_%H%M%S" `&& sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/ selinux/config cat /etc/ selinux/config setenforce 0 getenforce sestatus
关闭透明大页 关闭透明大页(即 Transparent Huge Pages
,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
1 2 3 4 5 6 7 8 9 10 11 12 13 cat /sys/ kernel/mm/ transparent_hugepage/enabled/boot/ vmlinuz-5.14 .0 -70.22 .1 .el9_0.x86_64 grubby --args="transparent_hugepage=never" --update-kernel /boot/ vmlinuz-5.14 .0 -70.22 .1 .el9_0.x86_64 执行 grubby --info 命令查看修改后的默认内核配置。--info 后需要使用实际的默认内核版本。 grubby --info /boot/ vmlinuz-5.14 .0 -70.22 .1 .el9_0.x86_64 echo never > /sys/ kernel/mm/ transparent_hugepage/enabled echo never > /sys/ kernel/mm/ transparent_hugepage/defrag cat /sys/ kernel/mm/ transparent_hugepage/enabled cat /proc/ cmdline
关闭swap DB 运行需要有足够的内存,如果内存充足,不建议使用 swap 作为内存不足的缓冲,因为这会降低性能,建议永久关闭系统 swap。
1 2 3 4 5 6 echo "vm.swappiness = 0" >> /etc/sysctl.conf swapoff -a && swapon -a sysctl -p vim /etc/fstab # 注释加载swap分区的那行记录 #UUID=4f863b5f-20b3 -4a99-a680-ddf84a3602a4 swap swap defaults 0 0
时钟同步 1 2 3 4 5 system ctl status chronyd.service chronyc tracking Leap status : Normal
如果要使 NTP 服务尽快开始同步,执行以下命令。可以将 pool.ntp.org 替换为你的 NTP 服务器:
1 2 3 sudo systemctl stop ntpd.service && \ sudo ntpdate pool.ntp.org && \ sudo systemctl start ntpd.service
如果要在 CentOS 7 系统上手动安装 NTP 服务,可执行以下命令:
1 2 3 sudo yum install ntp ntpdate && \ sudo systemctl start ntpd.service && \ sudo systemctl enable ntpd.service
磁盘、I/O调度设置 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
1 2 # cat /sys/ block/sda/ queue/scheduler [mq-deadline] kyber bfq none
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 1 、查看CentOS6 CentOS7下IO支持的调度算法 #CentOS 6 .x #dmesg | grep -i scheduler io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered (default ) #CentOS 7 .x #dmesg | grep -i scheduler [ 0.739263 ] io scheduler noop registered [ 0.739267 ] io scheduler deadline registered (default ) [ 0.739315 ] io scheduler cfq registered #rhel9 [ 0.069059 ] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies. [ 0.445431 ] io scheduler mq-deadline registered [ 0.446503 ] io scheduler kyber registered [ 0.447362 ] io scheduler bfq registered2 、查看设备当前的 I/O 调度器 #cat /sys/ block 假设磁盘名称是 /dev/ sda #cat /sys/ block/sda/ queue/scheduler noop [deadline] cfq3 、临时生效的方法 #cat /sys/ block/sda/ queue/scheduler noop [deadline] cfq #echo bfq>/sys/ block/sda/ queue/scheduler #cat /sys/ block/sda/ queue/scheduler noop deadline [cfq]4 、永久生效的方法 CentOS 7 .x #grubby --update-kernel=ALL --args="elevator=deadline" #reboot #cat /sys/ block/sda/ queue/scheduler noop [deadline] cfq 或者使用vi编辑器修改配置文件,添加elevator= cfq #vim /etc/ default /grub GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet elevator=noop numa=off" 然后保存文件,重新编译配置文件 BIOS-Based: grub2-mkconfig -o /boot/g rub2/grub.cfg UEFI-Based: grub2-mkconfig -o /boot/ efi/EFI/ centos/grub.cfg
CPU 频率模式设置 为调整 CPU 频率的 cpufreq
模块选用 performance
模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
1 2 3 cpupower frequency-info analyzing CPU 0 : Unable to determine current policy
The governor "powersave"
表示 cpufreq 的节能策略使用 powersave
,需要调整为 performance
策略。如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy
。此为虚拟机不需修改,如物理机
创建 CPU 节能策略配置服务。
1 2 3 4 5 6 7 8 9 cat >> /etc/systemd/system/cpupower.service << EOF [Unit]Description =CPU performance [Service]Type =oneshotExecStart =/usr/bin/cpupower frequency-set --governor performance [Install]WantedBy =multi-user.target EOF
应用 CPU 节能策略配置服务。
1 2 3 system ctl daemon-reloadsystem ctl enable cpupower.servicesystem ctl start cpupower.service
系统参数调整 file-max
中指定了系统范围内所有进程可打开的文件句柄的数量限制,在 MySQL 中很容易收到”Too many open files in system”
这样的错误消息, 就应该增加这个值,这里由于测试环境设置为 100 万足够。net.core.somaxconn
是 Linux 中的一个 kernel
参数,表示 socket
监听 (listen) 的 backlog
上限。什么是 backlog
呢?backlog
就是 socket
的监听队列,当一个请求 (request) 尚未被处理或建立时,他会进入 backlog
。而 socket server
可以一次性处理 backlog
中的所有请求,处理后的请求不再位于监听队列中。当 server 处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。net.ipv4.tcp_tw_recycle
表示关闭启用 TIME-WAIT
状态 sockets
的快速回收,这个选项不推荐启用。在 NAT(Network Address Translation)
网络下,会导致大量的 TCP 连接建立错误。此值默认为 0,也是关闭状态,在 MySQL 的配置中有人也会开启此配置,这里在强调下。net.ipv4.tcp_syncookies
表示关闭 SYN Cookies
。默认为 0,表示关闭;如果开启时,当出现 SYN 等待队列溢出时,启用cookies 来处理,可防范少量 SYN 攻击,和 tcp_tw_recycle 一样,在 NAT 网卡模式下不建议开启此参数。vm.overcommit_memory
文件指定了内核针对内存分配的策略,其值可以是 0、1、2。 0:(默认)表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。0 即是启发式的 overcommitting handle
,会尽量减少 swap
的使用,root 可以分配比一般用户略多的内存。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何,允许超过 CommitLimit
,直至内存用完为止。 2:表示不允许超过 CommitLimit
值。limit.conf
用于限制用户可以使用的最大文件数、最大线程、最大内存使用量,soft
是一个告警值,hard
则是一定意义上的阈值,一旦超过 hard
,系统就会报错
1 2 3 4 5 6 7 echo "fs.file-max = 1000000" >> /etc/ sysctl.conf echo "net.core.somaxconn = 32768" >> /etc/ sysctl.conf echo "net.ipv4.tcp_tw_recycle = 0" >> /etc/ sysctl.conf echo "net.ipv4.tcp_syncookies = 0" >> /etc/ sysctl.conf echo "vm.overcommit_memory = 1" >> /etc/ sysctl.conf sysctl -p
1 2 3 4 5 6 cat << EOF >> /etc/security /limits.conf db soft nofile 1000000 db hard nofile 1000000 db soft stack 32768 db hard stack 32768 EOF
安装前卸载 1 2 3 4 rpm -qa | grep -i mariadbc yum remove mariadb-libs
#删除用户/用户组
1 2 3 4 5 6 more /etc/ passwd | grep mysql more /etc/ shadow | grep mysql more /etc/g roup | grep mysql groupdel mysql userdel mysql
列出安装包明细 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 mysql -commercial-backup-8 .0 .30 -1 .1 .el9.x86_64.rpm 备份mysql -commercial-backup-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-client-8 .0 .30 -1 .1 .el9.x86_64.rpm 客户端mysql -commercial-client-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-client-plugins-8 .0 .30 -1 .1 .el9.x86_64.rpm 插件mysql -commercial-client-plugins-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-common-8 .0 .30 -1 .1 .el9.x86_64.rpm 公共文件mysql -commercial-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-devel-8 .0 .30 -1 .1 .el9.x86_64.rpm 开发库mysql -commercial-icu-data-files-8 .0 .30 -1 .1 .el9.x86_64.rpm ICUmysql -commercial-libs-8 .0 .30 -1 .1 .el9.x86_64.rpm 共享库mysql -commercial-libs-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-server-8 .0 .30 -1 .1 .el9.x86_64.rpm 服务端mysql -commercial-server-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-server-debug-8 .0 .30 -1 .1 .el9.x86_64.rpm 服务端调试组件mysql -commercial-server-debug-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -commercial-test-8 .0 .30 -1 .1 .el9.x86_64.rpm 测试组件mysql -commercial-test-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件mysql -router-commercial-8 .0 .30 -1 .1 .el9.x86_64.rpm MySQL路由mysql -router-commercial-debuginfo-8 .0 .30 -1 .1 .el9.x86_64.rpm 调试组件README .txt 更新说明
安装依赖包 1 2 dnf install net-tools -y dnf install perl-Module-Build.noarch
安装rpm包(必要安装包) 1 2 3 4 5 6 rpm -ivh mysql-commercial-client-8 .0 .30 -1 .1 .el9.x86_64.rpm \mysql -commercial-client-plugins-8 .0 .30 -1 .1 .el9.x86_64.rpm \mysql -commercial-common-8 .0 .30 -1 .1 .el9.x86_64.rpm \mysql -commercial-icu-data-files-8 .0 .30 -1 .1 .el9.x86_64.rpm \mysql -commercial-libs-8 .0 .30 -1 .1 .el9.x86_64.rpm \mysql -commercial-server-8 .0 .30 -1 .1 .el9.x86_64.rpm
验证MySQL是否安装成功 1 2 3 4 5 6 mysqladmin --version cat /etc/ passwd|grep mysql cat /etc/g roup|grep mysql usermod mysql -m -g mysql -s /bin/ bash -d /home/my sql rpm -qa | grep -i mysql
服务状态 1 2 3 4 5 6 7 8 9 system ctl status mysqldsystem ctl start mysqldsystem ctl stop mysqldsystem ctl restart mysqld 设置开机自启动:system ctl enable mysqld chkconfig --list | grep mysqlsystem ctl list-unit-files
初始化 因MySQL 8.0在Linux下库表名默认区分大小写,且只能在初始化时指定不能修改,现直接修改初始化配置文件避免重新初始化 mysqld –initialize –user=mysql –lower-case-table-names=1 –datadir=/opt/mysql/data/
#查看初始密码 cat /var/log/mysqld.log | grep password #报错 ##文件打不开 cp /usr/share/mysql-8.0/english/errmsg.sys /usr/share/mysql-8.0/errmsg.sys ##socket文件打不开 mkdir -p /var/lib/mysql chown -R mysql:mysql /var/lib/mysql
创建用户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ALTER USER 'root' @'localhost' IDENTIFIED BY '你的密码' ; show databases; use mysql; show variables like 'validate_password%' ;set global validate_password.policy =LOW;set global validate_password.length =6; flush privileges; select host, user, authentication_string, plugin from user; update user set host ='%' where user ='root' ; GRANT ALL ON *.* TO 'root' @'%' ; ALTER USER 'root' @'%' IDENTIFIED WITH mysql_native_password BY '你的密码' ; flush privileges;