一、环境准备:创建MySQL系统用户

创建专属mysql运行用户,禁止root直接运行数据库,保障服务安全

# 切换至home目录
cd /home
# 创建mysql系统用户
useradd mysql

二、下载MySQL8.0安装包

进入mysql用户目录,下载官方Linux离线安装包

# 进入/home/mysql目录
cd /home/mysql
# 下载MySQL8.0.30 glibc版本安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz

三、MySQL解压与目录初始化

解压安装包、重命名目录,创建数据、日志、binlog专属目录,并授权mysql用户

# 解压xz格式安装包
tar -Jxvf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
# 重命名解压目录,简化后续路径操作
mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql8
# 进入mysql8根目录
cd /home/mysql/mysql8
# 创建数据、binlog日志、错误日志目录
mkdir data binlog log
# 递归授权目录归属mysql用户,解决权限报错
chown -R mysql:mysql /home/mysql/mysql8

四、核心配置:修改/etc/my.cnf

编辑MySQL主配置文件,统一端口、路径、字符集、日志、连接规则等核心参数,已修复DATETIME报错的sql_mode配置

# 编辑全局配置文件
vim /etc/my.cnf

粘贴以下完整配置(路径适配/home安装目录,可根据服务器路径微调):

[mysqld]
# 数据库端口
port=3306
# MySQL安装根目录
basedir=/home/mysql/mysql8
# 数据文件存储目录
datadir=/home/mysql/mysql8/data
# 开启binlog日志,指定日志存储路径及前缀
log_bin=/home/mysql/mysql8/binlog/mysql-bin
# 最大并发连接数
max_connections=10000
# 最大连接失败次数,防止IP恶意攻击拦截
max_connect_errors=10
# 全局字符集,支持emoji表情
character-set-server=utf8mb4
# 关闭binlog自动过期(手动可控清理)
binlog_expire_logs_seconds = 0
# 默认存储引擎
default-storage-engine=INNODB
# 适配MySQL8.0密码认证插件,兼容客户端连接
default_authentication_plugin=mysql_native_password
# 忽略大小写,适配Windows迁移数据
lower_case_table_names=1
# 修复DATETIME非法值报错(如2024-02-31 23:59:59)
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

[mysql]
# 客户端默认字符集
default-character-set=utf8mb4

[client]
# 客户端默认连接端口
port=3306
default-character-set=utf8mb4
user=mysql

[mysqld_safe]
# 错误日志存储路径
log-error=/home/mysql/mysql8/log/error.log
# 进程PID文件路径
pid-file=/home/mysql/mysql8/mysql.pid

五、MySQL初始化安装

切换mysql用户执行初始化,生成初始临时密码(务必记录密码)

# 切换mysql运行用户
su mysql
# 执行数据库初始化
./bin/mysqld --initialize

初始化完成后,日志会输出临时初始密码(示例:5PIH6%jSZlIg),保存备用。

六、启动MySQL服务

# 进入服务脚本目录
cd /home/mysql/mysql8/support-files
# 启动MySQL服务
./mysql.server start
# 通用启动命令(任意目录可执行)
/home/mysql/mysql8/support-files/mysql.server start

七、登录数据库并修改初始密码

# 本地登录MySQL,输入初始化生成的临时密码
/home/mysql/mysql8/bin/mysql -h 127.0.0.1 -u root -p

# 登录成功后,重置root本地密码(自定义密码)
alter user 'root'@'localhost' identified by 'root123';

八、环境优化:全局命令与系统服务配置

8.1 配置mysql全局快捷命令

root用户执行,创建软链接,任意目录可直接使用mysql命令

# 切换root用户
exit
# 创建绝对路径软链接(禁止相对路径)
ln -s /home/mysql/mysql8/bin/mysql /usr/bin

8.2 配置service系统服务管理

修改服务脚本路径,注册为系统服务,支持标准启停命令

# 编辑服务脚本
vim /home/mysql/mysql8/support-files/mysql.server

修改脚本内3个核心路径参数:

basedir=/home/mysql/mysql8
datadir=/home/mysql/mysql8/data
mysqld_pid_file_path=/home/mysql/mysql8/mysql.pid

复制脚本到系统服务目录,注册服务:

cp -rf /home/mysql/mysql8/support-files/mysql.server /etc/init.d/mysql

后续可直接使用系统命令管理服务:

service mysql status   # 查看运行状态
service mysql start    # 启动服务
service mysql stop     # 停止服务
service mysql restart  # 重启服务

九、远程访问授权配置

开启root账号远程连接权限,支持外网/跨服务器访问

# 登录MySQL后执行
# 创建远程root用户并设置密码
CREATE USER 'root'@'%' IDENTIFIED BY 'root123';
# 授予所有数据库、所有表的全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
# 刷新权限生效
FLUSH PRIVILEGES;

# 批量修改远程root用户密码(备用)
use mysql;
update user set authentication_string = password('自定义密码') where user='root' and host='%';
flush privileges;

参数说明:*.* 代表 所有数据库.所有数据表;% 代表允许所有IP访问,可替换为指定IP(如192.168.1.100)限制访问范围。

十、数据库备份与Binlog日志运维

10.1 单表数据备份

# 备份指定库指定数据表
/home/mysql/mysql8/bin/mysqldump -hlocalhost -uroot -p123456 --single-transaction open_mall es_fund_detail  > /home/es_fund_detail.sql

10.2 全库备份(带sock适配)

/home/mysql/mysql8/bin/mysqldump -hlocalhost --socket=/home/mysql/mysql8/mysql.sock -uroot -p --single-transaction dsypos > dsypos_20230411.sql

10.3 Binlog日志清理与自动清理配置

Binlog日志记录数据变更,用于数据恢复,长期堆积会占用磁盘空间,需规范清理

1、安全手动清理(生产推荐)

清理前务必备份数据,禁止删除当前正在使用的binlog日志

# 方式1:删除指定日志文件之前的所有binlog(不包含指定文件)
PURGE BINARY LOGS TO 'mysql-bin.000317';

# 方式2:删除指定时间之前的所有binlog
PURGE BINARY LOGS BEFORE '2025-01-01 00:00:00';

2、配置自动清理(永久生效)

修改my.cnf,设置日志过期天数,自动清理过期binlog,避免磁盘爆满

# 在my.cnf的[mysqld]模块添加
expire_logs_days = 7  # 保留7天日志,自动清理过期日志

注意事项:主从复制环境中,过期时间需大于从库复制延迟时长,避免日志未同步完成被误删,导致主从数据不一致。

3、临时动态生效(无需重启)

set global expire_logs_days = 7;

生效触发条件:binlog文件达到1G默认上限 或 执行flush logs刷新日志。

十一、常见异常报错解决方案

11.1 共享库缺失报错:libcrypto.so.1.1

报错信息:./bin/mysqld: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

解决方案:创建系统软链接补全依赖

ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

11.2 日期格式报错:1525 - Incorrect DATETIME value

报错信息:1525 - Incorrect DATETIME value: ‘2024-02-31 23:59:59’

解决方案:修改my.cnf的sql_mode,屏蔽严格日期校验,本文配置已默认修复,无需重复修改

sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

11.3 Socket连接失败:cannot connect to local MySQL Server through socket ‘/tmp/mysql.sock’

解决方案:登录时指定my.cnf配置文件路径,绕过默认sock路径

/home/mysql/mysql8/bin/mysql --defaults-file=/etc/my.cnf -uroot -p

11.4 IP被拦截:Host XXX is blocked because of many connection errors

报错原因:同一IP短时间内多次连接失败,达到max_connect_errors阈值(默认10),MySQL自动拦截该IP,防止暴力攻击。

解决方案1:临时解除拦截(立即生效)

# 方式1:MySQL终端内执行
flush hosts;

# 方式2:系统命令行执行
mysqladmin flush-hosts -h 服务器IP -P3306 -uroot -p密码

解决方案2:永久调高阈值(治本)

# 查看当前阈值
show variables like 'max_connect_errors';
# 临时修改为1000
set global max_connect_errors = 1000;

重要说明:连接成功后会自动清空错误计数,仅连续失败才会累计拦截;主从集群需主从库同步修改配置。

11.5 终端密码修改快捷命令

快速修改当前登录用户密码,无需查表

alter user user() identified by '自定义新密码';

十二、关键操作禁忌与注意事项

  • 禁止手动删除binlog物理文件,必须使用PURGE命令清理,否则会导致mysql-bin.index索引错乱,数据库异常

  • 严禁清理当前正在使用的binlog日志,清理前可通过show master status查看当前在用日志文件

  • reset master/reset slave命令慎用,仅适用于首次搭建主从环境,会清空所有日志和主从配置

  • 自动清理binlog的过期天数,必须适配主从复制延迟,避免日志提前删除导致数据同步失败

  • 所有目录权限必须归属mysql用户,root权限运行MySQL会引发启动、读写、日志报错

  • 创建mysql全局命令软链接必须使用绝对路径,相对路径无法生效

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐