当前位置: 首页 > news >正文

mysql-8.0.37-linux-glibc2.12-x86_64安装

解压文件

# tar -xvf mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz 
mysql-8.0.37-linux-glibc2.12-x86_64/bin/
mysql-8.0.37-linux-glibc2.12-x86_64/bin/myisam_ftdump
mysql-8.0.37-linux-glibc2.12-x86_64/bin/myisamchk
mysql-8.0.37-linux-glibc2.12-x86_64/bin/myisamlog
mysql-8.0.37-linux-glibc2.12-x86_64/bin/myisampack
。。。。。

创建目录

mkdir data logs

初始化

创建并设置正确的目录权限

# 创建 data 目录(如果不存在)
mkdir -p /data/msyql/apps/mysql8/data# 创建 log 目录(我们自定义日志路径)
mkdir -p /data/msyql/apps/mysql8/log# 设置目录归属为 msyql用户
sudo chown -R msyql:msyql/data/msyql/apps/mysql8# 设置权限
chmod 750 /data/msyql/apps/mysql8/data
chmod 750 /data/msyql/apps/mysql8/log

指定自定义日志文件路径

不要让 MySQL 使用 /var/log/mysqld.log,而是指定一个 msyql用户有权限的路径。

修改你的初始化命令,加入 --log-error 参数:

./bin/mysqld \--user=msyql\--basedir=/data/msyql/apps/mysql8 \--datadir=/data/msyql/apps/mysql8/data \--log-error=/data/msyql/apps/mysql8/log/mysqld.log \--initialize

最终初始化命令

# ./bin/mysqld \
>   --user=msyql\
>   --basedir=/data/msyql/apps/mysql8 \
>   --datadir=/data/msyql/apps/mysql8/data \
>   --log-error=/data/msyql/apps/mysql8/logs/mysqld.log \
>   --initialize

查看日志中的临时root密码

# tail -200f logs/mysqld.log 
2025-08-20T03:28:50.381333Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2025-08-20T03:28:50.381520Z 0 [System] [MY-013169] [Server] /data/msyql/apps/mysql8/bin/mysqld (mysqld 8.0.37) initializing of server in progress as process 3464
2025-08-20T03:28:51.028676Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-08-20T03:28:53.692719Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-08-20T03:28:59.732361Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: gYhDF!7a=Vdh

修改my.cnf

[mysqld]
# 基础路径
basedir=/data/msyql/apps/mysql8
datadir=/data/msyql/apps/mysql8/data
socket=/data/msyql/apps/mysql8/mysql.sock
pid-file=/data/msyql/apps/mysql8/mysql.pid
tmpdir=/data/msyql/apps/mysql8/tmp# 日志
log_error=/data/msyql/apps/mysql8/logs/mysql-error.log
slow_query_log = 1
slow_query_log_file = /data/msyql/apps/mysql8/logs/slow.log
long_query_time = 2# 二进制日志
log_bin=/data/msyql/apps/mysql8/mysql-bin
binlog_format=row
sync_binlog = 1
expire_logs_days = 7# GTID 复制(为未来扩展准备)
gtid-mode=on
enforce-gtid-consistency=true
server_id=172# 连接
max_connections = 1500
max_connect_errors = 100000
max_user_connections = 100
wait_timeout = 300
interactive_timeout = 300
skip-name-resolve# 事务与隔离
transaction-isolation = READ-COMMITTED
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_AUTO_CREATE_USER# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci# InnoDB 核心
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 2G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:20G# 安全
default_password_lifetime = 0
bind-address = 10.10.10.10# 性能
performance_schema = ON

初始化时指定my.cnf配置文件

./bin/mysqld \--defaults-file=/data/apps/mysql8/my.cnf \--initialize \--basedir=/data/apps/mysql8 \--datadir=/data/apps/mysql8/data \--user=msyql

启动mysql

 bin/mysqld_safe --defaults-file=/data/apps/mysql8/my.cnf &

查看日志

# bin/mysqld_safe --defaults-file=/data/msyql/apps/mysql8/my.cnf &
[1] 37774
[msyql@k8s-master mysql8]$ 2025-08-20T07:28:54.101377Z mysqld_safe Logging to '/data/imsyqlsee/apps/mysql8/logs/mysql-error.log'.
2025-08-20T07:28:54.154202Z mysqld_safe Starting mysqld daemon with databases from /data/apps/mysql8/data# tail -400f logs/mysql-error.log 
2025-08-20T07:27:34.174584Z 0 [System] [MY-013169] [Server] /data/apps/mysql8/bin/mysqld (mysqld 8.0.37) initializing of server in progress as process 34320
2025-08-20T07:27:34.209763Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-08-20T07:27:42.484971Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-08-20T07:27:50.874439Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: .IoReKOkP9xl
2025-08-20T07:28:54.101377Z mysqld_safe Logging to '/data/apps/mysql8/logs/mysql-error.log'.
2025-08-20T07:28:54.154202Z mysqld_safe Starting mysqld daemon with databases from /data/apps/mysql8/data
2025-08-20T07:28:54.514568Z 0 [System] [MY-010116] [Server] /data/msyql/apps/mysql8/bin/mysqld (mysqld 8.0.37) starting as process 38391
2025-08-20T07:28:54.527022Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-08-20T07:28:56.114424Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-08-20T07:29:08.607250Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2025-08-20T07:29:08.607339Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2025-08-20T07:29:08.653995Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/data' in the path is accessible to all OS users. Consider choosing a different directory.
2025-08-20T07:29:08.740731Z 0 [System] [MY-010931] [Server] /data/apps/mysql8/bin/mysqld: ready for connections. Version: '8.0.37'  socket: '/data/apps/mysql8/mysql.sock'  port: 33306  MySQL Community Server - GPL.
2025-08-20T07:29:08.740233Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock

登陆mysql

# bin/mysql -uroot -p -S mysql.sock
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.37Copyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'character_Set_server';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

修改密码

情形一

# ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';
ERROR 4031 (HY000): The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.
No connection. Trying to reconnect...
Connection id:    11
Current database: *** NONE ***ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

你遇到的情况是一个 典型的“循环困境”

  • 你想执行 ALTER USER 来重置密码(因为提示 ERROR 1820),
  • 但执行时连接因超时被断开(ERROR 4031: client disconnected due to inactivity),
  • 重新连接后,又回到 ERROR 1820,必须改密码才能操作……

这通常发生在:

  • 网络延迟较高
  • 客户端响应慢
  • wait_timeout / interactive_timeout 设置过短
  • 首次登录后长时间未操作

✅ 解决方案:在登录时立即执行命令,避免超时
✅ 方法一:使用命令行直接执行(推荐)

不要先进入 MySQL 交互式终端,而是直接在 shell 中执行 ALTER USER 命令,避免手动输入延迟。

mysql -u root -p -e "ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';"

💡 解释:

  • -e 表示执行单条命令,立刻执行,立刻完成,不会等待超时。
  • 这样可以绕过交互式超时断开的问题。

输入密码后,命令执行完就退出,不会卡在交互界面。


✅ 方法二:登录后立刻执行(手速要快)

如果你坚持用交互式方式:

mysql -u root -p

登录成功后,立刻、马上、不要停顿地输入以下命令并回车:

ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';

⚠️ 不要按回车空行、不要查看帮助、不要停顿超过几秒,否则连接可能被断开。


✅ 方法三:临时延长超时时间(需先登录)

如果连接能短暂保持,可以先设置长超时:

-- 登录后立刻执行
SET SESSION wait_timeout = 3600;
SET SESSION interactive_timeout = 3600;-- 然后立即改密码
ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';

这样可以防止在操作过程中被断开。


✅ 方法四:使用本地 localhost 用户绕行(推荐备用)

如果 'root'@'10.10.10.10' 连接不稳定,可以尝试用本地 localhost 登录(通常更稳定):

mysql -u root -p

登录后,修改本地 root 用户密码(通常也需要先改它):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'F0o_tt919';

然后再修改远程用户(可选):

ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';

📌 提示:MySQL 要求至少一个 root 用户先完成密码重置,才能进行其他操作。


🔧 根本原因分析
错误原因
ERROR 1820首次登录未改密码,必须先 ALTER USER
ERROR 4031执行命令前或执行中连接超时(wait_timeout 默认 8小时,但某些环境可能设得很短)

✅ 最佳实践建议
  1. 首次登录后立即改密码,不要做其他事。
  2. 使用 -e 直接执行命令,避免交互式延迟。
  3. 确保 wait_timeout 和 interactive_timeout 设置合理(如 3600 秒):
    SHOW VARIABLES LIKE 'wait_timeout';
    SHOW VARIABLES LIKE 'interactive_timeout';
  4. 如果是脚本操作,建议在配置文件中设置:
    [mysql]
    interactive-timeout = 3600
    wait-timeout = 3600

✅ 总结

📌 最快解决方式

mysql -u root -p -e "ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';"

输入密码后,命令立即执行,避免超时断开,完美解决 ERROR 1820ERROR 4031 的循环问题。

✅ 执行成功后,你就可以正常登录并使用 MySQL 了。

情形二

# bin/mysql -u root -p -S mysql.sock -e "ALTER USER 'root'@'110.10.10.10' IDENTIFIED BY 'F0o_tt919';"
Enter password: 
Please use --connect-expired-password option or invoke mysql in interactive mode.

✅ 正确解决方案

✅ 方法一:使用 --connect-expired-password 选项(推荐)

这是 MySQL 官方为此类场景设计的选项,专门用于 首次登录重置密码 的非交互式操作。

bin/mysql -u root -p -S mysql.sock --connect-expired-password -e "ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';"

✅ 执行流程:

  1. 输入当前密码(临时密码或空密码)
  2. 客户端进入“密码过期”模式
  3. 执行 ALTER USER 修改密码
  4. 完成后退出

📌 这是 最标准、最安全、最推荐 的方式。


✅ 方法二:进入交互模式(手动操作)

如果你不想用 --connect-expired-password,可以进入交互式终端:

bin/mysql -u root -p -S mysql.sock

登录后,立刻输入(避免超时):

ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';

然后就可以正常使用了。


✅ 方法三:先改 localhost 用户(备用)

有时远程用户('root'@'10.10.10.10')不是首次登录的“主用户”,可以先改本地用户:

bin/mysql -u root -p -S mysql.sock --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'F0o_tt919';"

改完 localhost 后,其他用户通常也可以正常操作了。


🔍 为什么需要 --connect-expired-password
MySQL 客户端为了安全,对以下情况做了限制:
  • 密码过期
  • 首次登录(临时密码)
  • ALTER USER 必须立即执行

在这种情况下,不允许在非交互模式下直接执行 ALTER USER,防止脚本中明文密码被滥用。

使用 --connect-expired-password 表示:“我知道密码过期,我要改它”,客户端会进入特殊模式,允许你修改密码。


✅ 验证是否成功

改完密码后,尝试登录并执行命令:

bin/mysql -u root -p -S mysql.sock -e "SELECT 1;"

如果不再报 ERROR 1820 或连接超时,说明问题已解决。


✅ 总结
方法命令
✅ 推荐bin/mysql -u root -p -S mysql.sock --connect-expired-password -e "ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';"
备用先改 localhost 用户
手动进入交互模式快速输入命令

📌 最终建议:使用 --connect-expired-password 选项,这是 MySQL 官方为此类问题设计的标准解决方案。

情形三

# bin/mysql -u root -p -S mysql.sock --connect-expired-password -e "ALTER USER 'root'@'10.10.10.10' IDENTIFIED BY 'F0o_tt919';"
Enter password: 
ERROR 1820 (HY000) at line 1: You must reset your password using ALTER USER statement before executing this statement.

先将具体ip换成localhost操作,即可正常。然后在继续修改

情形四

 # bin/mysql -u root -p -S mysql.sock --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'F0o_tt919';"
Enter password: 

这是正常的操作步骤

查看

# SELECT user, host FROM mysql.user WHERE user = 'root';
+------+-------------+
| user | host        |
+------+-------------+
| root | %           |
| root | 10.10.10.10 |
| root | localhost   |
+------+-------------+
3 rows in set (0.00 sec)

完整的my.cnf单机配置

# cat my.cnf 
[client]
port            = 33306
socket          = /data/msyql/apps/mysql8/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
[mysql]
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci[mysqld]
# ========================
# 基础路径设置
# ========================
basedir = /data/msyql/apps/mysql8
datadir = /data/msyql/apps/mysql8/data
socket  = /data/msyql/apps/mysql8/mysql.sock
pid-file = /data/msyql/apps/mysql8/mysql.pid
tmpdir  = /data/msyql/apps/mysql8/tmp# ========================
# 字符集与排序规则
# ========================
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
# ========================
# 连接相关设置
# ========================
port = 33306
bind-address = 10.10.10.10                    # 允许远程访问(生产注意防火墙)
max_connections = 1500                    # 最大连接数
max_connect_errors = 100000               # 防止暴力登录
max_user_connections = 1000               # 单用户最大连接
back_log = 300                            # 等待队列长度
thread_cache_size = 10                    # 线程缓存# ========================
# 表名大小写不敏感(重要)
# ========================
# 必须在初始化前设置!初始化后修改会导致启动失败!
lower_case_table_names = 1
# 说明:0=区分大小写,1=不区分(存储小写,比较忽略大小写)# ========================
# 事务与隔离级别
# ========================
transaction-isolation = READ-COMMITTED
# 避免幻读,适合高并发 OLTP# ========================
# 二进制日志(用于备份、主从、恢复)
# ========================
log-bin = /data/msyql/apps/mysql8/mysql-bin
server-id = 1                             # 单机可设为1,为未来主从准备
sync_binlog = 1                           # 保证事务不丢失(性能换安全)# ========================
# GTID(为未来主从复制准备)
# ========================
gtid-mode = ON
enforce-gtid-consistency = TRUE# ========================
# 日志设置
# ========================
# 错误日志
log-error = /data/msyql/apps/mysql8/logs/mysql-error.log# 慢查询日志(性能调优必备)
slow_query_log = 1
slow_query_log_file = /data/msyql/apps/mysql8/logs/slow.log
long_query_time = 2
log_queries_not_using_indexes = 0         # 可选:记录未走索引的SQL# ========================
# InnoDB 核心性能优化
# ========================
# 缓冲池:建议设为物理内存的 50%~70%
# 例如:16G 内存 → 设为 10G~12G
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4          # 拆分实例,减少锁争用# 日志文件大小(越大越好,减少刷新频率)
innodb_redo_log_capacity=4294967296
innodb_flush_log_at_trx_commit = 1        # 1=最安全(每次提交刷盘)
# 如性能优先可设为 2(文件缓存,不刷盘)# IO 优化
innodb_flush_method = O_DIRECT            # 避免双缓冲,提升IO效率
innodb_io_capacity = 2000                 # SSD 推荐 2000~4000
innodb_io_capacity_max = 4000# 表空间
innodb_file_per_table = ON                # 每个表独立表空间(推荐)
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:20G# 清理策略
innodb_purge_threads = 4                  # 清理线程数
innodb_adaptive_hash_index = ON           # 自适应哈希索引(默认ON)# ========================
# 安全与性能模式
# ========================
skip-name-resolve                         # 禁用DNS解析,提升性能
performance_schema = ON                   # 启用性能监控
default_password_lifetime = 0             # 禁用密码过期# ========================
# 其他
# ========================
explicit_defaults_for_timestamp = ON
group_concat_max_len = 10240
wait_timeout = 3600
interactive_timeout = 3600
#sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

http://www.lryc.cn/news/626583.html

相关文章:

  • 可实现三重空间感知:Ai2 开源具身机器人 AI 模型 MolmoAct
  • 从防抖节流到链表树:编程世界中的抽象优化艺术
  • 23种设计模式——模板方法模式(Template Method Pattern)详解
  • 在一台没联网的机器上,用ollama加载qwen3,14b
  • 遥感机器学习入门实战教程|Sklearn 案例④ :多分类器对比(SVM / RF / kNN / Logistic...)
  • 使用 GraalVM Native Image 将 Spring Boot 应用编译为跨平台原生镜像:完整指南
  • Spring Boot 配置
  • nvidia最新论文:小型语言模型是代理人工智能的未来
  • (5)软件包管理器 yum | Vim 编辑器 | Vim 文本批量化操作 | 配置 Vim
  • 5G-A赋能AR眼镜:毫米级虚实融合的未来已来
  • 开源 AR 眼镜怎么选?OpenGlass ,OSSG,cheApR 分析推荐
  • 给你的Unity编辑器添加实现类似 Odin 的 条件显示字段 (ShowIf/HideIf) 功能
  • 用好 Elasticsearch Ruby 传输层elastic-transport
  • 二维码跳转支付宝、微信小程序二码合一(直接关联、中间页识别跳转)方案
  • python-使用鼠标对图片进行涂抹自定义绘图
  • 自己微调的大模型如何用ollama运行
  • Android 开发问题:android:marginTop=“20px“ 属性不生效
  • 数字化图书管理系统设计实践(java)
  • Redis 复制功能是如何工作的
  • Linux I/O 多路复用实战:Select/Poll 编程指南
  • iOS 应用上架常见问题与解决方案,多工具组合的实战经验
  • Redis--day9--黑马点评--分布式锁(二)
  • C++ 数据结构 和 STL
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • wpf之ComboBox
  • 软件测试面试题真题分享
  • 数据挖掘笔记:点到线段的距离计算
  • 百度Q2财报:总营收327亿 AI新业务收入首次超100亿
  • PDF如何在Adobe Acrobat 中用OCR光学识别文档并保存可编辑文档
  • 【鸿蒙心迹】7×24小时极限求生:当Origin_null遇上鸿蒙,我如何用100杯咖啡换一条跨域活路?