【筑基篇】部署二进制MySQL(mysql存储二进制数据)
nanshan 2025-07-01 22:13 2 浏览 0 评论
手动部署二进制MySQL
刚拜入宗门修仙的各位,对于刚拿到的秘籍(官方文档)尚处于晦涩状态,下篇旨在将修炼入门功法的一些注意事项罗列而出,可实际直接照着修炼,少走弯路。
安装准备
关闭防火墙及selinux
数据库服务器通常运行在内部网络,因此可以视情况关闭防火墙及selinux设置。
1.关闭防火墙服务
systemctl stop firewalld
systemctl disable firewalld
2.关闭selinux
setenforce 0
sed -i '/^SELINUX=/c'SELINUX=disabled /etc/selinux/config
设置 swap
建议配置足够的物理内存。如果内存不足,不建议使用 swap 作为缓冲,因为这会降低性能。这边设置了一个低值没有直接禁掉,也可设置直接为 0.
echo "vm.swappiness = 1">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
操作系统优化
1.设置磁盘调度策略
# 查看当前设置,其中 nvme0n1 是磁盘对应的设备文件名称
lsblk -l
cat /sys/block/nvme0n1/queue/scheduler
# 如果不是 noop 或 deadline,则修改,改后立即生效,无需重启:
echo 'noop' > /sys/block/nvme0n1/queue/scheduler
2.确认CPU性能模式
# 检查当前模式
$ cpupower frequency-info --policy
analyzing CPU 0:
Unable to determine current policy
注意:
如果输出内容不是 The governor "performance" 而是 The governor "powersave" 的话,则要注意了。
The governor "powersave" 表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。
如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。
3.关闭透明大页
建议关闭透明大页(Transparent Huge Pages / THP)。OLTP型数据库内存访问模式通常是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟,反而影响性能。
# 查看当前设置
cat /sys/kernel/mm/transparent_hugepage/enabled
# 如果输出结果不是 never 的话,则需要执行下面的命令关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
4.优化内核参数
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 10" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 55000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.core.netdev_max_backlog = 200000" >> /etc/sysctl.conf
# 调整 TCP/UDP 套接字的接收和发送缓冲区大小
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_max = 2097152" >> /etc/sysctl.conf
echo "net.core.wmem_max = 2097152" >> /etc/sysctl.conf
echo "net.ipv4.tcp_synack_retries = 2" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
sysctl -p
5.修改使用资源上限
# 修改 /etc/security/limits.conf 系统文件
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
* soft nproc 65535
* hard nproc 65535
配置时间同步
需要配置好时间同步,时间同步一般采用 ntp 或 chrony,这边以chrony为例
yum install -y chrony
配置同步源,这边以配置阿里源为例,vim /etc/chrony.conf
pool ntp.aliyun.com iburst
pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst
配置完成后启动
systemctl start chronyd
部署安装
1. 下载二进制文件
下载地址:https://dev.mysql.com/downloads/mysql/注意看下系统glibc版本 getconf -a | grep glibc,可以向下兼容,不要选择高于当前版本
或者直接使用wget下载:
wget -c https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz
2.创建对应的存储路径
mkdir -p /data/mysql3306/data
3.创建组与用户
# 创建用户组与用户
groupadd mysql
useradd -g mysql -s /bin/nologin mysql
# 给mysql数据文件路径授权
chown -R mysql:mysql /data/mysql3306
4.解压
tar xvf mysql-8.4.3-linux-glibc2.17-x86_64.tar.xz -C /usr/local/
cd /usr/local
5.创建软链
ln -s mysql-8.4.3-linux-glibc2.28-x86_64/ mysql
ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5
ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
如果so.5软件不创建的话登录时候会报错
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
6.设置环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
7.设置my.cnf
简单设置下配置信息
[client]
port = 3308
socket = /data/mysql3308/data/mysql.sock
[mysql]
prompt = "[\u@\p][\d]> "
no-auto-rehash
[mysqld]
# basic settings #
user = mysql
#主从复制或MGR集群中,server_id记得要不同
server_id = 217
basedir=/usr/local/mysql
datadir=/data/mysql3308/data
socket = /data/mysql3308/data/mysql.sock
pid_file=/data/mysql3308/data/mysqld.pid
default_storage_engine = innodb
#default_authentication_plugin=mysql_native_password
#local_infile=1
mysqlx_port = 33080
mysqlx_socket=/data/mysql3309/data/mysqlx.sock
port = 3308
lower_case_table_names = 1
default_time_zone = "+8:00"
character_set_server=utf8mb4
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
open_files_limit = 65535
back_log = 1024
max_allowed_packet = 64M
event_scheduler = 0
#sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#secure_file_priv = ''
admin_address = '127.0.0.1'
admin_port = 33082
# connection #
interactive_timeout = 1800
wait_timeout = 1800
lock_wait_timeout = 3600
skip_name_resolve = 1
max_connections = 1024
max_connect_errors = 1000000
# table cache performance settings
#table_open_cache = 4096
#table_definition_cache = 4096
#table_open_cache_instances = 16
# session memory settings #
read_buffer_size = 2M
read_rnd_buffer_size = 1M
sort_buffer_size = 2M
join_buffer_size = 2M
bulk_insert_buffer_size = 16M
tmp_table_size = 32M
max_heap_table_size = 32M
thread_cache_size = 768
thread_stack = 512K
# log settings #
# 8.0参数
binlog_expire_logs_seconds = 604800
log_timestamps = SYSTEM
log_error = error.log
log_error_verbosity = 3
general_log_file = general.log
slow_query_log = 1
log_slow_extra = 1
slow_query_log_file = slow.log
long_query_time = 1
# log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
# log_slow_slave_statements = 1
# log_slow_replica_statements = 1
# log_throttle_queries_not_using_indexes = 10
# min_examined_row_limit = 100
log_bin = mysql-bin
binlog_cache_size = 2M
max_binlog_cache_size = 2G
max_binlog_size = 1G
binlog_rows_query_log_events = 1
log_bin_trust_function_creators = 1
# innodb settings #
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_data_file_path = ibdata1:100M:autoextend
#5.7默认16M,8.0默认128M
#innodb_log_buffer_size = 32M
# MySQL 8.0.30或更高版本推荐使用innodb_redo_log_capacity参数,innodb_log_files_in_group* innodb_log_file_size= innodb_redo_log_capacity
# 而 innodb_log_file_size 和 innodb_log_files_in_group 参数后续会被废弃
innodb_redo_log_capacity = 4G
innodb_max_undo_log_size = 4G
innodb_undo_log_truncate = 1
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_lru_scan_depth = 4096
innodb_lock_wait_timeout = 10
innodb_open_files = 65535
innodb_flush_method = O_DIRECT
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_online_alter_log_max_size = 1G
innodb_sort_buffer_size = 64M
innodb_autoinc_lock_mode = 2
innodb_print_ddl_logs = 1
# innodb_flush_neighbors参数,SSD 禁用,非SSD请启用
innodb_flush_neighbors = 0
#禁用AHI
innodb_adaptive_hash_index = 0
gtid_mode = on
enforce_gtid_consistency = 1
log_replica_updates = 1
# 8.0默认为 row ,从MySQL 8.0.34 起已弃用,并且可能会在 MySQL 的未来版本中删除
#binlog_format = ROW
relay_log = relay.log
# perforamnce_schema settings
performance_schema=ON
[mysqldump]
quick
8.初始化
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3306/my.cnf --initialize --user=mysql
9.设置/etc/init.d启动
cp mysql/support-files/mysql.server /etc/init.d/mysqld
10.启动MySQL
注意:如果不配置名称为 pid-file 的参数,则强依赖 hostname,也就是启动后不能更改hostname,否则不能正常关闭。
启动方式1-service
# 启动
service mysqld start
# 关闭
service mysqld stop
# 查看状态
service mysqld status
- 在不更改/etc/init.d/mysqld的情况下,my.cnf 文件必须在 basedir 下或 /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 下,且名称必须为 my.cnf
- 修改 /etc/init.d/mysqld ,把它改为适配的脚本
启动方式2-mysql_safe
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql3306/my.cnf --user=mysql &
或
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3306/my.cnf --user=mysql &
启动方式3-systemd
也可配置使用 systemctl 进行启动 官方文档 systemd
- 多个可以起名为 mysqld3306.service、mysqld3307.service
/usr/lib/systemd/system/mysqld3306.service
[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
# Have mysqld write its state to the systemd notify socket,启动类型 8.0 推荐使用notify
Type=notify
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service,服务启动命令,mysqld必须是绝对路径
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql3306/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation,设置环境变量,可用于更改内存管理库 tcmalloc/jemalloc
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 10000
# 在什么情况下需要重启服务,on-failure 表示只有在服务失败时才会重启
Restart=on-failure
# 指定哪些退出状态码不应该触发重启。这里是 1,表示如果服务以状态码 1 退出,则不会重启。
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
# 指定是否为服务创建一个独立的临时目录。false 表示不创建独立的临时目录。
PrivateTmp=false
11.修改初始密码
# 查看初始密码,在初始化完成后会自动生成一个初始登陆密码,放在错误日志中,假设当前错误日志未指定路径
grep 'temporary password' /data/mysql3306/data/error.log
# 登陆,密码为上面查询出的密码
mysql -uroot -p
# 修改密码为指定密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
my.cnf 配置生产参考:5.7(https://github.com/jdaaaaaavid/mysql_best_configuration/blob/master/my.cnf)8.0(https://imysql.cn/my_cnf_generator)
拓展-修改mysql.server 源码适配启动
1.修改参数变量
basedir=/usr/local/mysql
datadir=/data/mysql3306/data
mycnfdir=/data/mysql3306/my.cnf
basedir、datadir 可以不配置,因为在 my.cnf 中已配置了,能读取到
2.修改$print_defaults传入参数,指定配置文件
parse_server_arguments `$print_defaults --defaults-file="$mycnfdir" mysqld server mysql_server mysql.server`
3.修改parse_server_arguments
修改 parse_server_arguments 中的 --pid-file=,添加 --pid_file=,使得可以获取到配置文件中配置为 pid_file的内容
4.mysql_safe启动时候指定配置文件
$bindir/mysqld_safe --defaults-file="$mycnfdir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
相关推荐
- 手机看视频卡顿的系统化解决方案(手机看视频特别卡是什么原因)
-
手机看视频卡顿是日常使用中常见的问题,通常由网络不稳定、设备性能不足、应用设置不当或系统问题导致。以下方案按优先级排序,兼顾操作难度与解决效果,帮助你快速定位并解决卡顿问题。一、网络优化:解决最核心诱...
- 电子电路硬件测试基础-板级测试工具之示波器(1)
-
示波器介绍示波器,作为一种电子测试仪器,主要用于对电信号的波形进行测量、显示与分析。它的工作原理是将电信号的瞬时值转化为屏幕上的垂直偏移,并以时间为基准在水平轴上展开,进而生成信号的图形化呈现。借助示...
- 宽带安装避坑指南:从选套餐到验收全流程注意事项
-
在网络成为生活必需品的当下,看似简单的宽带安装实则暗藏诸多细节,稍不留意就会踩入隐藏费用、性能虚标等陷阱。掌握以下关键要点,助你轻松避开宽带安装雷区。一、选对运营商与套餐,拒绝隐形消费选择运营商时,不...
- 噪声分析及小信号测试(噪音中的信号是什么含义)
-
示波器在大量开关电源或大功率用电器等复杂环境下进行自环测试,容易出现视频中的噪声问题。示波器在进行小信号测试时,我们要考虑地线带来的干扰,一般设置要求是:一、带宽限制打开;二、尽可能短的地线,一般使用...
- 怀疑房间被装了监控?深度解析检测方法与步骤
-
在现代社会中,隐私保护日益受到重视。当我们租房、住酒店或身处私人住宅时,如果发现房间内有异常的迹象,如电器无故自动开关、网络速度突然变慢、电费异常增加,或者在某些特定区域总感觉“被注视”,这些都可能是...
- 如何快速鉴定网线好坏?怎样测网线电阻?
-
一、快速鉴定网线好坏的3大核心技巧1.外观检测法:5秒看穿网线本质标识验证:正品网线外皮应清晰印有"CAT5e""CAT6"等类别标识,以及米数刻度(如30...
- 网速慢?教你快速检测网卡速率! #网络测速
-
网卡是百兆还是千兆?你知道吗?网速慢可能就是因为网卡不够快,今天就来教你如何快速检查网卡。1.打开CMD:首先找到电脑,按下Win+R键,输入cmd,然后按回车,这就打开了命令提示符...
- 怎么查自己家WiFi多少兆?(苹果手机测wifi网速)
-
怎么查自己家WiFi多少兆?在数字化生活日益普及的今天,家庭WiFi的速度直接影响着我们上网冲浪、在线学习、视频通话等日常活动的流畅度。了解自家WiFi的带宽通常以兆比特每秒Mbps为...
- 家里宽带网速不理想?测一下就知道了
-
家里网络不理想,经常发生卡顿或是网络抖动?可能是家里宽带的影响,这时候不妨实际测试下网速看看,是否符合预期。个人最近经历过两次上网卡顿问题,第一个是上个月回老家,刷剧的时候,发现有加载缓慢的情况,10...
- Linux 必备的20个核心知识点(linux内核知识点)
-
学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...
- 忆享科技戟星安全实验室|内网隧道技术,你知道几个?
-
本文约6000字,阅读约需15分钟。0x00前言在实际环境中,会有各种网络设备、防火墙以及入侵检测系统阻止外网与内网的通信,我们构建内网隐蔽通道来突破安全策略的限制,实现对目标机器的控制。当我们在外...
- Win10怎么连接linux虚拟机?(win10搭建linux虚拟机)
-
这个不难,主要是ping一下ip,检查win10系统是否和Linux虚拟机连通,接着开启ssh服务,如果一切正常的话,就可以连接linux虚拟机,这里简单介绍一下实现过程,实验环境win10+vmwa...
- 如何在CentOS中配置静态IP地址?(centos6.5配置静态ip地址)
-
静态IP地址是在计算机网络中使用的固定IP地址,与动态分配的IP地址相对。在CentOS中,通过配置网络设置,您可以轻松地为您的系统设置静态IP地址。本文将详细介绍在CentOS中配置静态IP地址的步...
- Firewalld的简单使用(firewall direct)
-
从Centos7开始默认防火墙就已经更换为了firewall,替换了之前的iptablesFirewalld服务采用firewall-cmd或firewall-config(图形化工具)来动态管理ke...
- Vmware设置静态IP和主机访问(vmware 设置固定ip)
-
摘要:Vmware设置静态IP和主机访问关键词:Vmware、静态IP、主机访问整体说明最近在做大模型的本地部署,发现之前的Virtualbox,不太能用到本地的英伟达GPU,所以开始使用...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)