首页 > 数据库 > MySQL > LINUX9 MYSQL8.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
[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/ ,如需转载,请注明出处,否则将追究法律责任。