MySQL 5.7.44 部署

MySQL 5.7.44 部署

一、下载

下载地址:https://downloads.mysql.com/archives/community/

二、部署

2.1 卸载mariadb

MariaDB 和 MySQL 默认都使用 3306 端口,如果同时运行会报错等原因。

bash 复制代码
# 卸载
yum remove -y mariadb mariadb-server mariadb-libs
# 检查是否还有未删除的包
rpm -qa | grep mariadb
# 清理 yum 的缓存
yum clean all

2.2 安装依赖包

bash 复制代码
yum install -y libaio libaio-devel numactl numactl-libs libncurses* openssl openssl-libs

2.3 解压

bash 复制代码
cd /opt/mysql
# 解压
tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local
# 改名
mv /usr/local/mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql

2.4 创建用户和组

bash 复制代码
# 创建用户组
sudo groupadd mysql

# 创建系统用户:创建禁止登录系统的专用 mysql 用户,并归属到 mysql 用户组
# -r:创建系统用户;-g:指定归属用户组;-s /bin/nologin:禁止登录,保证安全
sudo useradd -r -g mysql -s /bin/nologin mysql

# 创建 MySQL 数据存储目录
sudo mkdir -p /usr/local/mysql/data

# 创建 MySQL 日志目录
sudo mkdir -p /usr/local/mysql/logs

# 创建 MySQL 运行时目录
sudo mkdir -p /usr/local/mysql/run

# 授权
sudo chown -R mysql:mysql /usr/local/mysql

2.5 配置环境变量

bash 复制代码
echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee -a /etc/profile
source /etc/profile

# 验证:输出版本信息即配置成功
mysql --version

2.6 创建配置文件

bash 复制代码
vi /etc/my.cnf
[mysqld]
# ==================== 基础路径配置 ====================
# MySQL程序根目录
basedir=/usr/local/mysql
# 数据库数据文件存储目录
datadir=/usr/local/mysql/data
# 本地连接套接字文件,仅本机客户端使用
socket=/usr/local/mysql/run/mysqld.sock
# 进程PID文件,记录mysqld进程号,用于服务启停、进程校验
pid-file=/usr/local/mysql/run/mysqld.pid
# 错误日志文件路径
log-error=/usr/local/mysql/logs/error.log
# 服务监听端口
port=3306
# MySQL 运行用户
user=mysql
# 服务端字符集 utf8mb4 支持emoji、完整中文,替代老旧utf8
character-set-server=utf8mb4
# 默认排序规则
collation-server=utf8mb4_unicode_ci

# ==================== 网络连接相关 ====================
# 监听地址 0.0.0.0 表示监听所有网卡,允许远程连接,如果只允许本机访问,可改为 127.0.0.1
bind-address=0.0.0.0
# 数据库最大并发连接数,生产根据业务调整
max_connections=1024
# 非交互式连接超时时间,单位秒
wait_timeout=86400
# 交互式连接超时时间,单位秒
interactive_timeout=86400
# 最大数据包大小,适配大字段、批量数据导入
max_allowed_packet=128M

# ==================== InnoDB性能核心配置 ====================
# 默认存储引擎,InnoDB支持事务、行锁、崩溃恢复
default-storage-engine=InnoDB
# InnoDB Buffer Pool 大小,最重要的内存参数之一,建议占物理内存的 50%~70%
# 示例:
# 4G 内存机器 -> 1G~2G
# 8G 内存机器 -> 4G~5G
# 16G 内存机器 -> 10G~12G
# 32G 内存机器 -> 20G~24G
# 64G 内存机器 -> 40G~48G
innodb_buffer_pool_size=20G
# Buffer Pool 分片数
# 示例:
# innodb_buffer_pool_size < 1G -> 1
# 1G <= innodb_buffer_pool_size < 4G -> 2
# 4G <= innodb_buffer_pool_size < 8G -> 4
# 8G <= innodb_buffer_pool_size < 16G -> 8
# 16G <= innodb_buffer_pool_size -> 8~16
innodb_buffer_pool_instances=10
# redo log 文件大小,越大写性能通常越好,但崩溃恢复会更慢,测试环境建议48M,生产建议1G
innodb_log_file_size=1G
# redo log 文件组数
innodb_log_files_in_group=2
# redo log buffer 大小,测试环境建议16M,生产建议256M
innodb_log_buffer_size=256M
# 是否每表单独建表空间,生产环境推荐开启,便于单表管理和回收空间
innodb_file_per_table=1
# 事务提交时 redo log 刷盘策略
# 1:最安全,每次提交都刷盘
# 2:每秒刷盘一次,性能更好,但可能丢 1 秒数据
innodb_flush_log_at_trx_commit=1
# binlog 刷盘策略,1:每次提交都刷盘,最安全
sync_binlog=1
# 刷盘方式,O_DIRECT 可减少双缓存
innodb_flush_method=O_DIRECT
# 事务隔离级别:读提交(线上主流)
transaction_isolation=READ-COMMITTED
# InnoDB读IO线程数,高并发调大
innodb_read_io_threads=16
# InnoDB写IO线程数,高并发调大
innodb_write_io_threads=16

# ==================== 慢查询日志配置 ====================
# 开启慢查询日志,排查低效SQL
slow_query_log=1
# 慢查询阈值,执行超过3秒判定为慢SQL
long_query_time=3
# 慢查询日志存储路径
slow_query_log_file=/usr/local/mysql/logs/slow.log
# 记录未使用索引的查询
log_queries_not_using_indexes=1

# ==================== 二进制日志 binlog ====================
# 开启二进制日志binlog,用于主从复制、数据误删恢复(生产强制开启)
log-bin=/usr/local/mysql/logs/mysql-bin
# binlog 格式,ROW 模式最适合生产环境和复制
binlog_format=ROW
# 日志过期自动清理天数,避免磁盘占满
expire_logs_days=7
# server-id 必须唯一,主库和每个从库都要不同
server-id=1

# ==================== SQL语法模式 ====================
# 严格 SQL 模式,生产环境建议开启严格模式,避免脏数据
# 各模式说明:
# STRICT_TRANS_TABLES:对事务表(InnoDB)进行严格数据校验
# NO_ZERO_DATE:禁止零日期(如 0000-00-00)
# NO_ZERO_IN_DATE:禁止零月零日(如 2025-00-01、2025-08-00)
# ERROR_FOR_DIVISION_BY_ZERO:除零报错
# NO_ENGINE_SUBSTITUTION:指定的存储引擎不存在时直接报错,不自动替换为其他存储引擎
# ONLY_FULL_GROUP_BY:要求 GROUP BY 必须包含所有非聚合列,否则报错
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY

# 表名大小写规则,1:表名/库名统一小写存储、查询不区分大小写(推荐),0:严格区分大小写;注意:只能在初始化前设置,运行后修改会启动失败
lower_case_table_names=1

[mysql]
# 本机客户端套接字文件匹配
socket=/usr/local/mysql/run/mysqld.sock

[client]
# 客户端连接端口
port=3306
# 客户端套接字文件
socket=/usr/local/mysql/run/mysqld.sock
# 客户端统一字符集
default-character-set=utf8mb4

2.7 初始化数据库

bash 复制代码
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

2.8 创建 systemd 服务并启动

bash 复制代码
sudo tee /etc/systemd/system/mysqld.service > /dev/null <<EOF
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/bin/kill -s TERM $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
LimitNPROC=65535
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target
EOF


# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable mysqld
sudo systemctl start mysqld

2.9 查看临时密码

bash 复制代码
sudo grep 'temporary password' /usr/local/mysql/logs/error.log

2.10 修改密码

bash 复制代码
# 修改密码
mysql -uroot -p'临时密码' --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';"

# 如果密码不对跳过认证修改
# 停掉 mysql
systemctl stop mysqld

# 跳过权限启动
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --skip-grant-tables --user=mysql &

# 等几秒后登录
mysql -uroot

# 重置密码
# 刷新权限(必须先执行,否则改密码报错)
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
exit;

# 杀掉进程,正常启动
kill $(pgrep mysqld)
systemctl start mysqld

# 用新密码登录
mysql -uroot -p

2.11 开启远程访问

bash 复制代码
# 登录mysql
mysql -uroot -p

# 切换到mysql系统库
use mysql;
# 查看root账户信息
# user:账号名(root)
# host:允许哪个IP连接:localhost仅本地、%任意远程 IP、192.168.1.%网段
# plugin:密码加密方式:mysql_native_password → Navicat/DBeaver 正常连接、caching_sha2_password → MySQL8.0 默认,旧客户端连不上
select user,host,plugin from user where user='root';

# 创建远程root,%代表任意IP
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码';
# 刷新权限立即生效
FLUSH PRIVILEGES;
相关推荐
IpdataCloud2 小时前
跨境支付如何识别高风险IP?用IP风险画像服务选型与集成指南
服务器·网络·数据库·tcp/ip·安全
agilearchitect2 小时前
asyncpg:专为 asyncio 打造的 PostgreSQL 驱动
数据库·其他·postgresql
Adorable老犀牛2 小时前
MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南
mysql·prometheus·mariadb
凡人叶枫2 小时前
Effective C++ 条款08:别让异常逃离析构函数
java·linux·数据库·c++·嵌入式开发
herinspace2 小时前
管家婆财工贸软件中关于价格常见问题小结
服务器·网络·数据库·电脑·管家婆软件
北风toto2 小时前
本体和智能体协同核心5步骤(生成sql语句)
数据库·sql
IvorySQL2 小时前
PostgreSQL 技术日报 (6月10日)|多工具版本更新,PG19 图语法落地
数据库·postgresql
lsyeei2 小时前
数据库分库分表
数据库
这个DBA有点耶3 小时前
Vibe Coding 是什么?当“感觉编程”遇上数据库
数据库·人工智能·架构·学习方法·ai编程·程序员创富·改行学it