百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

【筑基篇】部署二进制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,所以开始使用...

取消回复欢迎 发表评论: