ITPub博客

首页 > 数据库 > MySQL > LINUX9 MYSQL8.0 安装

LINUX9 MYSQL8.0 安装

MySQL 作者:wwjfeng 时间:2026-01-19 15:15:27 0 删除 编辑

一.OS环境准备

echo "127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4">  /etc/hosts

echo "::1         localhost localhost.localdomain localhost6 localhost6.localdomain6">>  /etc/hosts

echo "192.168.18.80 fgedu80">>  /etc/hosts

cat /etc/hosts


echo "export.UTF8" >> ~/.bash_profile

cat ~/.bash_profile

mkdir -p /mysql/app

mkdir -p /mysql/data

mkdir -p /mysql/log

mkdir /backup


pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde

pvs

vgcreate appvg /dev/sdb

vgcreate datavg /dev/sdc

vgcreate logvg /dev/sdd

vgcreate bakvg /dev/sde

vgdisplay


vgs

lvcreate -n mysqllv -L 50G appvg

lvcreate -n datalv -L 50G datavg

lvcreate -n loglv -L 50G logvg

lvcreate -n baklv -L 50G bakvg

lvdisplay

lvs

mkfs.xfs /dev/appvg/mysqllv 

mkfs.xfs /dev/datavg/datalv 

mkfs.xfs /dev/logvg/loglv

mkfs.xfs /dev/bakvg/baklv


mkdir -p /mysql/app

mkdir -p /mysql/data

mkdir -p /mysql/log

mkdir -p /mysql/backup

mkdir -p /soft


echo "/dev/appvg/mysqllv /mysql/app               xfs    defaults,noatime,nodiratime        0 0" >> /etc/fstab

echo "/dev/datavg/datalv /mysql/data               xfs    defaults,noatime,nodiratime        0 0" >> /etc/fstab

echo "/dev/logvg/loglv /mysql/log               xfs    defaults,noatime,nodiratime        0 0" >> /etc/fstab

echo "/dev/bakvg/baklv /mysql/backup             xfs    defaults,noatime,nodiratime        0 0" >> /etc/fstab


cat /etc/fstab


systemctl daemon-reload


mount /mysql/app

mount /mysql/data

mount /mysql/log

mount /mysql/backup


mount /dev/cdrom /mnt

cd /etc/yum.repos.d

mkdir bk

mv *.repo bk/


echo "[EL9-1]" >> /etc/yum.repos.d/fgedu.repo 

echo "name =Linux-9-DVD1" >> /etc/yum.repos.d/fgedu.repo 

echo "baseurl=File:///mnt/AppStream" >> /etc/yum.repos.d/fgedu.repo 

echo "gpgcheck=0" >> /etc/yum.repos.d/fgedu.repo 

echo "enabled=1" >> /etc/yum.repos.d/fgedu.repo 


echo "[EL9-2]" >> /etc/yum.repos.d/fgedu.repo 

echo "name =Linux-9-DVD2" >> /etc/yum.repos.d/fgedu.repo 

echo "baseurl=File:///mnt/BaseOS" >> /etc/yum.repos.d/fgedu.repo 

echo "gpgcheck=0" >> /etc/yum.repos.d/fgedu.repo 

echo "enabled=1" >> /etc/yum.repos.d/fgedu.repo 


mount /dev/cdrom /mnt

dnf install -y gcc gcc-c++ make ncurses-devel.x86_64 lrzsz.x86_64 cmake.x86_64 libaio.x86_64 bison.x86_64 

dnf install -y gcc-c++.x86_64 bind-utils wget curl curl-devel perl openssh-clients sysstat make  -y


systemctl set-default multi-user.target

systemctl get-default


cat >> /etc/security/limits.conf << EOF

* soft    nofile  1024000

* hard    nofile  1024000

* soft    nproc   1024000

* hard    nproc   1024000

* soft      core    unlimited

* hard    core    unlimited

* soft      memlock unlimited

* hard    memlock unlimited

EOF

cat /etc/security/limits.conf


echo "* - nproc 16384" > /etc/security/limits.d/90-nproc.con


内核参数配置

cat >> /etc/sysctl.conf  <<EOF


# file

fs.aio-max-nr = 2097152

fs.file-max = 76724600

fs.nr_open= 20480000


# vm

vm.swappiness=10

vm.min_free_kbytes = 188743

vm.overcommit_memory = 0    

vm.overcommit_ratio = 90     

vm.zone_reclaim_mode = 0     

vm.nr_hugepages = 2458 

vm.hugetlb_shm_group=666    


#kernel

kernel.shmmax = 5153960756   

kernel.shmall = 1258291     

kernel.shmmni = 4096      

kernel.sem = 4096 2048000 200 32768

kernel.numa_balancing = 0

net.ipv4.ip_forward = 1

net.ipv4.ip_nonlocal_bind = 1

net.ipv4.ip_local_port_range = 40000 65535

net.ipv4.tcp_rmem = 8192 65536 16777216

net.ipv4.tcp_wmem = 8192 65536 16777216

net.ipv4.tcp_mem = 8388608 12582912 16777216

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 4194304

net.ipv4.tcp_tw_reuse = 1

EOF

sysctl -p


#file:

fs.aio-max-nr = 1048576   --# 限制并发未完成的异步请求数目,不应小于1M

fs.file-max = 76724600  --# 最大打开XXX个文件             

fs.nr_open=20480000  --#单个进程打开文件句柄数上限

   

#kernel

kernel.shmmax = 3221225472   

--#shmmax是最大的共享内存段的大小,单位是字节

--保守计算:echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE)),

--我一般为:> DB内存mysql实例的内存 < 物理内存(建议不超过内存的80%) 


mysql实例的内存=(innodb_buffer_pool_size+innodb_additional_mem_pool_size+innodb_log_buffer_size+tmp_table_size)

tmp_table_size与max_heap_table_size 取最大值 


kernel.shmall = 786432      

--整个系统的内存segment的总个数

--保守建议设置为:系统可用的内存页总量的一半,可以用getconf _PHYS_PAGES查看系统可用的内存页总量

--echo  $(expr $(getconf _PHYS_PAGES) / 2),

--我一般为:kernel.shmmax/PAGE_SIZE 


kernel.shmmni = 4096         

一共能生成多少共享内存段,.系统范围内共享内存段的最大数量


kernel.sem = 4096 134217728 200 32768

SEMMSL含义:每个信号量set中信号量最大个数 设置:最小250;对于processes参数设置较大的系统建议设置为processes+10

SEMMNS含义:linux系统中信号量最大个数 设置:至少32000;SEMMSL * SEMMNI

SEMOPM含义:semop系统调用允许的信号量最大个数设置:至少100;或者等于SEMMSL

SEMMNI含义:linux系统信号量set最大个数 设置:最少128


kernel.numa_balancing = 0

--是否启用NUMA平衡功能,将任务移动到最近的内存或移动内存到任务执行最近的地方,0表上关闭;


net.ipv4.ip_forward = 1           --# IP转发

net.ipv4.ip_nonlocal_bind = 1       --# 绑定非本机地址

net.netfilter.nf_conntrack_max = 1048576 -- # 最大跟踪连接数

net.ipv4.ip_local_port_range = 10000 65535  --# 端口范围

net.ipv4.tcp_rmem = 8192 65536 16777216   --# tcp读buffer

net.ipv4.tcp_wmem = 8192 65536 16777216  -- # tcp写buffer

net.ipv4.tcp_mem = 131072 262144 16777216  --# tcp 内存使用

net.core.rmem_default = 262144          --# 接受缓冲区默认大小

net.core.rmem_max = 4194304             --# 接受缓冲区最大大小

net.core.wmem_default = 262144        --  # 发送缓冲区默认大小: 256K

net.core.wmem_max = 4194304            -- # 发送缓冲区最大大小: 4M

net.ipv4.tcp_tw_reuse = 1                  -- # 允许将TIME_WAIT socket用于新的TCP连接。默认为0


vm.overcommit_memory = 0     

内存分配策略

0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。它根据某种算法决定是否可以overcommit

2: 表示内核允许分配超过所有物理内存和交换空间总和的内存,禁止超过阈值的overcommit。

vm.overcommit_ratio = 90     值为0到100,表示允许内核分配的内存超过实际物理内存的百分比。

当overcommit_memory = 2 时,用于参与计算允许指派的内存大小。


vm.zone_reclaim_mode = 0     --# 禁用 numa, 或者在vmlinux中禁止

vm.hugetlb_shm_group=666    # 大内存页使用的group id

vm.swappiness=10             #内存剩余10%的时候开始使用swap

vm.min_free_kbytes = 188743    #设置为内存的3%    

vm.nr_hugepages = 2458      #大内存页数量 * 2m   


mysql实例的内存=(innodb_buffer_pool_size+innodb_additional_mem_pool_size+innodb_log_buffer_size+tmp_table_size)

tmp_table_size与max_heap_table_size 取最大值 

https://dev.mysql.com/doc/refman/8.4/en/large-page-support.html


关闭防火墙

echo "SELINUX=disable" >/etc/selinux/config

echo "#SELINUXTYPE=trageted" >> /etc/selinux/config

cat /etc/selinux/config

setenforce 0

systemctl stop firewalld.service

systemctl disable firewalld.service 


关闭NUMA和透明大页

cp /etc/default/grub /etc/default/grub_bak

line_num=`cat -n /etc/default/grub | grep 'GRUB_CMDLINE_LINUX' |awk '{print $1}'|head -n 1`

sed -i --follow-symlinks 's/numa=off//g' /etc/default/grub

sed -i --follow-symlinks 's/transparent_hugepage=never elevator=deadline//g' /etc/default/grub

sed -i --follow-symlinks ""${line_num}" s/\"$/ numa=off\"/g" /etc/default/grub

sed -i --follow-symlinks ""${line_num}" s/\"$/ transparent_hugepage=never elevator=deadline\"/g" /etc/default/grub

#IO调度参数说明

  • cfq:适合桌面系统和多任务环境

  • deadline:适合数据库、Web服务器等对延迟敏感的应用

  • noop:适合虚拟化环境、SSD、高速存储设备

cat /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg


关闭avahi

systemctl stop avahi-daemon.socket avahi-daemon.service

systemctl disable avahi-daemon.socket avahi-daemon.service


配置rc local

chmod +x /etc/rc.d/rc.local

cat >> /usr/lib/systemd/system/rc-local.service << EOF

[Install]

WantedBy=multi-user.target

EOF

systemctl enable rc-local


修改系统时区

timedatectl set-timezone Asia/Shanghai

timedatectl

timedatectl list-timezones


echo "RemoveIPC=no" >> /etc/systemd/logind.conf


二.数据库安装

1.确认OS glibc版本

[root@fgedu80 backup]# ldd --version

ldd (GNU libc) 2.34

Copyright (C) 2021 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Roland McGrath and Ulrich Drepper.


2.检查早期版本的MYSQL

rpm -qa |grep -i mysql

rpm -qa |grep -i maria*

rm -f /etc/my.cnf

rm -rf /etc/my.cnf.d


3.创建用户和组

groupadd -g 666 mysql

useradd -u 666 -r -g mysql -s /bin/false mysql


4.解压缩

cd /mysql/app

tar -Jxf /soft/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz

ln -s mysql-8.0.35-linux-glibc2.28-x86_64 mysql

echo "export PATH=\$PATH:\$HOME/bin:/mysql/app/mysql/bin">>~/.bash_profile

source ~/.bash_profile


5.创建目录

mkdir -p /mysql/data/3306/data

mkdir -p /mysql/log/3306/binlog

mkdir -p /mysql/log/3306/relaylog

mkdir -p /mysql/backup/backup-db

mkdir -p /mysql/backup/backup-tmp

mkdir -p /mysql/backup/backup-binlog

chown -R mysql:mysql /mysql/*

chmod -R 755 /mysql/*


6.建立参数文件

cd /mysql/data/3306

vi my.cnf

mycnf.txt

[client]
port=3306
socket = /mysql/data/3306/mysql.sock
default-character-set=utf8mb4
[mysql]
no-beep
prompt="\u@mysqldb \R:\m:\s [\d]> "
#no-auto-rehash
auto-rehash
skip-binary-as-hex
default-character-set=utf8mb4
[mysqld]
########basic settings########
server-id=3306
port=3306
user = mysql
bind_address= 192.168.1.80 
basedir=/mysql/app/mysql
datadir=/mysql/data/3306/data
socket = /mysql/data/3306/mysql.sock
pid-file = /mysql/data/3306/mysql.pid
character-set-server=utf8mb4
autocommit = 1
lower-case-table-names=1
#skip_name_resolve = 1
max_connections = 1000
max_connect_errors = 5000
default-storage-engine=INNODB
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
sort_buffer_size = 32M
join_buffer_size = 128M
tmp_table_size = 72M
max_allowed_packet = 16M
#sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
interactive_timeout = 600
wait_timeout = 600
read_buffer_size = 16M
read_rnd_buffer_size = 32M
large-pages=ON
back_log=1024
table_open_cache=2000
thread_cache_size=768
open_files_limit=65536
table_definition_cache=1400
#lock_wait_timeout = 3600
#query_cache_type = 1
#query_cache_size=1M
#flush_time=0
#binlog_row_event_max_size=8K
#sync_master_info=10000
#sync_relay_log=10000
#sync_relay_log_info=10000
##myisam settings
myisam_max_sort_file_size=10G
myisam_sort_buffer_size=135M
key_buffer_size=32M
default_time_zone = "+8:00"
admin_address = '127.0.0.1'
admin_port = 33066
########log settings########
log-output=FILE
general_log = 0 
general_log_file=/mysql/log/3306/fgedudb-general.err
slow_query_log = ON
slow_query_log_file=/mysql/log/3306/fgedudb-query.err
long_query_time=10
log-error=/mysql/log/3306/fgedudb-error.err
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_replica_statements = 1
log_throttle_queries_not_using_indexes = 10
binlog_expire_logs_seconds=604800
min_examined_row_limit = 100
log_bin=/mysql/log/3306/binlog/fgedudb-binlog
binlog_rows_query_log_events=on
binlog_gtid_simple_recovery=1
log_timestamps=system
#deprecated:log_slow_slave_statements = 1
#deprecated:expire_logs_days = 90
#deprecated:binlog_format='ROW'
########replication settings########
#master_info_repository = TABLE
#relay_log_info_repository = TABLE
#log_bin = bin.log
#sync_binlog = 1
#gtid_mode = on
#enforce_gtid_consistency = 1
#log_slave_updates
#binlog_format = row 
#relay_log = relay.log
#relay_log_recovery = 1
#binlog_gtid_simple_recovery = 1
#slave_skip_errors = ddl_exist_errors
#slave_parallel_type = LOGICAL_CLOCK
#slave_parallel_workers = 32 
#binlog_transaction_dependency_tracking = WRITESET
#slave_preserve_commit_order = 1
#slave_checkpoint_period = 2
#replication_optimize_for_static_plugin_config = ON
#replication_sender_observe_commit_only = ON
########mgr settings########
#loose-plugin_load_add = 'mysql_clone.so'
#loose-plugin_load_add = 'group_replication.so'
#loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
#loose-group_replication_local_address = "192.168.1.51:33061"
#loose-group_replication_group_seeds = "192.168.1.51:33061,192.168.1.52:33061,192.168.1.53:33061"
#loose-group_replication_start_on_boot = OFF
#loose-group_replication_bootstrap_group = OFF
#loose-group_replication_exit_state_action = READ_ONLY
#loose-group_replication_flow_control_mode = "DISABLED"
#loose-group_replication_single_primary_mode = ON
#loose-group_replication_autorejoin_tries = 288
#loose-group_replication_member_expel_timeout = 5
#loose-group_replication_unreachable_majority_timeout = 30
#loose-group_replication_communication_max_message_size = 10M
########innodb settings########
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_buffer_pool_size = 500M
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 4000
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_flush_method = O_DIRECT
innodb_log_buffer_size = 32M
innodb_redo_log_capacity = 3G
innodb_max_undo_log_size = 4G
innodb_online_alter_log_max_size = 4G
innodb_print_ddl_logs = 1
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 1
innodb_stats_persistent_sample_pages = 500
innodb_adaptive_hash_index = 0
sql_generate_invisible_primary_key = ON
innodb_flush_neighbors = 1
innodb_purge_threads = 4
#innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_strict_mode = 1
innodb_sort_buffer_size = 64M
innodb_flush_log_at_trx_commit=1
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=65536
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
innodb_data_file_path=ibdata1:200M;ibdata2:200M;ibdata3:200M:autoextend:max:5G
innodb_temp_data_file_path = ibtmp1:200M:autoextend:max:20G
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_purge_rseg_truncate_frequency = 128
#transaction_write_set_extraction=MURMUR32
#default_authentication_plugin=mysql_native_password
#default_authentication_plugin=caching_sha2_password
#innodb monitor settings
innodb_monitor_enable = "module_innodb"
innodb_monitor_enable = "module_server"
innodb_monitor_enable = "module_dml"
innodb_monitor_enable = "module_ddl"
innodb_monitor_enable = "module_trx"
innodb_monitor_enable = "module_os"
innodb_monitor_enable = "module_purge"
innodb_monitor_enable = "module_log"
innodb_monitor_enable = "module_lock"
innodb_monitor_enable = "module_buffer"
innodb_monitor_enable = "module_index"
innodb_monitor_enable = "module_ibuf_system"
innodb_monitor_enable = "module_buffer_page"
#innodb_monitor_enable = "module_adaptive_hash"
#pfs settings
performance_schema = 1
#performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
[mysqldump]
quick


7.初始化&启动

/mysql/app/mysql/bin/mysqld  --defaults-file=/mysql/data/3306/my.cnf   --user=mysql --basedir=/mysql/app/mysql --datadir=/mysql/data/3306/data --initialize

/mysql/app/mysql/bin/mysqld_safe --defaults-file=/mysql/data/3306/my.cnf  &

tail -f fgedudb-error.err  #获取密码

ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock

mysql> alter user 'root'@'localhost' identified by 'rootroot';


8.配置mysql启停脚本

cd /mysql/app/mysql/support-files/

cp mysql.server mysql.server.bak

cp /tmp/mysql.server /mysql/app/mysql/support-files/

chown mysql:mysql /mysql/app/mysql/support-files/mysql.server

chmod +x /mysql/app/mysql/support-files/mysql.server

/mysql/app/mysql/support-files/mysql.server stop

/mysql/app/mysql/support-files/mysql.server start

/mysql/app/mysql/support-files/mysql.server status

#加入系统启动

cp /mysql/app/mysql/support-files/mysql.server /usr/lib/systemd/system/

cat > /usr/lib/systemd/system/mysqld.service << EOF

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target


[Install]

WantedBy=multi-user.target


[Service]

User=mysql

Group=mysql

Type=forking

PIDFile=/mysql/data/3306/mysql.pid

TimeoutSec=0


# Execute pre and post scripts as root

PermissionsStartOnly=true


# Start main service

ExecStart=/mysql/app/mysql/support-files/mysql.server start


# Use this to switch malloc implementation

EnvironmentFile=-/etc/sysconfig/mysql


# Sets open_files_limit

LimitNOFILE = 65536

LimitNPROC = 65536 

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

EOF

systemctl daemon-reload

systemctl stop mysqld 

systemctl start mysqld


三.测试与远程连接

1.创建远程连接的root用户

create USER 'root'@'%' IDENTIFIED BY 'rootroot';

grant all privileges on *.* to 'root'@'%' with grant option;


2.创建数据库

create database fgedudb default character set utf8mb4 collate utf8mb4_unicode_ci;

CREATE USER 'fgedu'@'%' IDENTIFIED BY 'fgedu';

GRANT ALL PRIVILEGES ON fgedudb.* TO 'fgedu'@'%';

GRANT ALL PRIVILEGES ON fgedudb.* TO 'fgedu'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;  



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15412087/viewspace-3108229/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: CDB PDB 日常维护
下一篇: LINUX MYSQL8.0 升级
请登录后发表评论 登录
全部评论

注册时间:2010-03-27

  • 博文量
    57
  • 访问量
    199178