「MySQL运维常见问题及解决方法」

「MySQL运维常见问题及解决方法」

  • 一、查看MySQL数据库安装路径
    • 1.1、方式一 --SHOW VARIABLES LIKE 'basedir';
    • 1.2、方式二 --ps -ef | grep mysql
  • 二、MySQL设置连接数与最大并发数
    • 2.1、永久生效--修改my.cnf文件
    • 2.2、临时生效--通过命令设置的全局变量
  • 三、其他相关参数设置
  • 四、MySQL启动时出现”Cannot allocate memory for the buffer pool”错误
  • 五、MySQL数据库的编码问题
    • 5.1 编码问题解决--临时(设置当前会话的字符集)
    • 5.2 编码问题解决--永久(修改my.cnf)
    • 5.3 utf8 与 utf8mb4区别


💖The Begin💖点点关注,收藏不迷路💖

一、查看MySQL数据库安装路径

在某些情况下,我们可能需要查看MySQL数据库的安装路径,以便进行一些特定的操作或配置。

1.1、方式一 --SHOW VARIABLES LIKE ‘basedir’;

步骤1:登录MySQL数据库

首先,我们需要登录MySQL数据库。可以使用命令行工具或者图形化界面进行登录。在命令行中,可以使用以下命令登录:

mysql -u 用户名 -p

其中,用户名是你的MySQL用户名。然后,系统会提示你输入密码,输入正确的密码后就可以登录到MySQL数据库。

在这里插入图片描述

步骤2:执行系统变量查询命令

登录成功后,可以执行以下命令来查询MySQL数据库的安装路径:

SHOW VARIABLES LIKE 'basedir';

该命令会返回一个结果集,其中包含了MySQL数据库的安装路径。在结果集中,Variable_name列显示的是系统变量名,Value列显示的是对应的值。我们需要找到basedir这个系统变量,它就是MySQL数据库的安装路径。

mysql> SHOW VARIABLES LIKE 'basedir';
+---------------+-------------------+
| Variable_name | Value             |
+---------------+-------------------+
| basedir       | /usr/local/mysql/ |
+---------------+-------------------+
1 row in set (0.00 sec)

mysql>

步骤3:查看MySQL数据库的安装路径

在结果集中,找到basedir这个系统变量,它对应的值就是MySQL数据库的安装路径。

需要注意的是,MySQL数据库的安装路径可能因为操作系统的不同而有所差异。在Windows系统上,默认的安装路径是C:\Program Files\MySQL\MySQL Server X.X,其中X.X是MySQL的版本号。而在Linux系统上,默认的安装路径可能是/usr/local/mysql或者/usr/mysql

1.2、方式二 --ps -ef | grep mysql

ps -ef | grep mysql 是一个常用的命令组合,用于查找正在运行的 MySQL 进程。

ps -ef | grep mysql 

其中包括 MySQL 进程的 PID(进程ID)、PPID(父进程ID)、USER(运行进程的用户)、COMMAND(进程的命令)等详细信息。

在这里插入图片描述

二、MySQL设置连接数与最大并发数

在高并发的应用场景中,MySQL数据库的连接数和最大并发数的设置是非常重要的。如何设置MySQL的连接数和最大并发数,以及如何合理地配置这些参数来提高数据库的性能和稳定性。

MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接。

MySQL无论如何都会保留一个用于管理员(SUPER)登录的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections。因此MySQL的实际最大可连接数为max_connections+1;

这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;

增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;

该参数设置过小的最明显特征是出现”Too many connections”错误;

2.1、永久生效–修改my.cnf文件

MySQL连接数是指同时连接到MySQL数据库的客户端数量。如果连接数超过MySQL的默认设置,可能会导致数据库性能下降,甚至崩溃。

步骤1:查看当前连接数的设置:

在MySQL命令行界面输入以下命令来查看当前连接数的设置:

SHOW VARIABLES LIKE 'max_connections';

默认情况下,MySQL的连接数为150。

在这里插入图片描述

步骤2:修改连接数的设置:

要修改MySQL的连接数,需要编辑MySQL的配置文件my.cnf。在该文件中找到[mysqld]节点下的max_connections参数,并将其修改为所需的值。例如,将连接数修改为500:

[mysqld]
max_connections = 500

在这里插入图片描述

步骤3:修改完成后,重启MySQL服务使配置生效。

[root@zyl-server ~]# systemctl restart mysqld
[root@zyl-server ~]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: active (running) since Tue 2024-01-02 09:11:09 CST; 7s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1753 ExecStop=/etc/rc.d/init.d/mysqld stop (code=exited, status=0/SUCCESS)
  Process: 1785 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
    Tasks: 28
   Memory: 172.6M
   CGroup: /system.slice/mysqld.service
           ├─1796 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/mysql --pid-file=/usr/local/mysql/mysql/zyl-server.pid
           └─2023 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.l...

Jan 02 09:11:08 zyl-server systemd[1]: Starting LSB: start and stop MySQL...
Jan 02 09:11:09 zyl-server mysqld[1785]: Starting MySQL.[  OK  ]
Jan 02 09:11:09 zyl-server systemd[1]: Started LSB: start and stop MySQL.
[root@zyl-server ~]# 

步骤4:再次查看当前连接数的设置:

在MySQL命令行界面输入以下命令来查看当前连接数的设置:

SHOW VARIABLES LIKE 'max_connections';

在这里插入图片描述

2.2、临时生效–通过命令设置的全局变量

SET GLOBAL  max_connections=1024;
SHOW VARIABLES LIKE '%max_connections%';

在这里插入图片描述

当MySQL重启时,会重新加载配置文件,因此这种通过命令设置的全局变量会失效。要使设置持久化,需要在MySQL的配置文件中进行相应的修改。

三、其他相关参数设置

除了连接数和最大并发数,还有一些相关的参数也需要注意设置,以提高数据库的性能和稳定性。

1、wait_timeout参数:

wait_timeout参数指定了一个连接在没有活动的情况下保持多长时间后自动关闭。默认情况下,wait_timeout为28800秒(8小时)。可以根据实际需求将其适当调小,以释放空闲连接资源。

2、max_allowed_packet参数:

max_allowed_packet: 指定了MySQL服务器接收和发送的最大数据包大小。默认情况下,其值为4MB。如果应用程序需要处理大的数据包,可以适当增大该值。

3、innodb_buffer_pool_size参数:

innodb_buffer_pool_size:设置InnoDB存储引擎的缓冲池大小。该参数决定了InnoDB存储引擎可以使用的内存大小。一般来说,将该参数设置为物理内存的70-80%是比较合适的。

4、key_buffer_size参数:

key_buffer_size:设置MyISAM存储引擎的键缓冲区大小。该参数决定了MyISAM存储引擎可以使用的内存大小。一般来说,将该参数设置为物理内存的10%是比较合适的。

5、query_cache_size参数:

query_cache_size:设置查询缓存的大小。查询缓存可以缓存查询结果,提高查询性能。但是在高并发的情况下,查询缓存可能会成为性能瓶颈。一般来说,将该参数设置为0或者较小的值是比较合适的。

6、innodb_flush_log_at_trx_commit参数:

innodb_flush_log_at_trx_commit:设置InnoDB存储引擎的日志刷新策略。该参数决定了事务提交时日志的刷新方式。一般来说,将该参数设置为1是比较合适的,可以保证事务的持久性。

7、innodb_log_file_size参数:

innodb_log_file_size:设置InnoDB存储引擎的日志文件大小。该参数决定了InnoDB存储引擎的日志文件可以使用的磁盘空间大小。一般来说,将该参数设置为1-2GB之间的值是比较合适的。

8、innodb_file_per_table参数:

innodb_file_per_table:设置是否为每个InnoDB表创建单独的表空间文件。该参数决定了InnoDB表的数据和索引是否存储在独立的表空间文件中。一般来说,将该参数设置为ON是比较合适的,可以提高表的维护和管理效率。

这些参数的具体设置需要根据服务器的硬件资源、应用程序的需求以及数据库的负载情况进行调整。可以通过修改MySQL配置文件(my.cnf)来设置这些参数。

四、MySQL启动时出现”Cannot allocate memory for the buffer pool”错误

修改mysql的innodb_buffer_pool_size为60G后,启动报错,截图如下:

当MySQL启动时出现”Cannot allocate memory for the buffer pool”错误提示,意味着MySQL无法为缓冲池分配足够的内存。

mysql错误日志:

2024-01-02T01:36:56.462874Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2024-01-02T01:36:56.462955Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2024-01-02T01:36:56.462980Z 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.7.42) starting as process 2656 ...
2024-01-02T01:36:56.467231Z 0 [Note] InnoDB: PUNCH HOLE support available
2024-01-02T01:36:56.467275Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2024-01-02T01:36:56.467282Z 0 [Note] InnoDB: Uses event mutexes
2024-01-02T01:36:56.467289Z 0 [Note] InnoDB: GCC builtin __sync_synchronize() is used for memory barrier
2024-01-02T01:36:56.467296Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
2024-01-02T01:36:56.467302Z 0 [Note] InnoDB: Using Linux native AIO
2024-01-02T01:36:56.467551Z 0 [Note] InnoDB: Number of pools: 1
2024-01-02T01:36:56.467600Z 0 [Note] InnoDB: Using CPU crc32 instructions
2024-01-02T01:36:56.468311Z 0 [Note] InnoDB: Initializing buffer pool, total size = 60G, instances = 8, chunk size = 128M
2024-01-02T01:36:56.609202Z 0 [ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12
2024-01-02T01:36:56.671297Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2024-01-02T01:36:56.671337Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2024-01-02T01:36:56.671344Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2024-01-02T01:36:56.671347Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2024-01-02T01:36:56.671351Z 0 [ERROR] Failed to initialize builtin plugins.
2024-01-02T01:36:56.671353Z 0 [ERROR] Aborting

2024-01-02T01:36:56.671360Z 0 [Note] Binlog end
2024-01-02T01:36:56.671403Z 0 [Note] Shutting down plugin 'MyISAM'
2024-01-02T01:36:56.675346Z 0 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

解决:

增加系统内存: 如果可行的话,可以尝试增加系统的物理内存。这样MySQL就能够分配更多的内存给缓冲池。

1、查看操作系统的/proc/sys/vm/overcommit_memory,默认值应该是0。

[root@zyl-server ~]# cat /proc/sys/vm/overcommit_memory
2
[root@zyl-server ~]#

参数含义:

overcommit_memory=0,  表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

overcommit_memory=1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

overcommit_memory=2, 表示内核允许分配超过所有物理内存和交换空间总和的内存。

当overcommit_memory=2的时候,它一般是代表的是系统中总的内存的百分比,具体的虚拟内存总和为:

内存总和=SwapTotal + MemTotal * overcommit_ratio,这里的 overcommit_ratio默认为50%

2、修改 /proc/sys/vm/overcommit_memory为0。

[root@zyl-server ~]# cat /proc/sys/vm/overcommit_memory
2
[root@zyl-server ~]# echo  0  > /proc/sys/vm/overcommit_memory
[root@zyl-server ~]# systemctl restart mysqld
[root@zyl-server ~]#

修改完成后,再次启动mysql,此时能够正常启动。

调整MySQL配置: 可以通过修改MySQL配置文件中的innodb_buffer_pool_size参数来调整缓冲池的大小。将其设置为一个较小的值,以适应当前可用的系统内存。

五、MySQL数据库的编码问题

在使用MySQL数据库时,出现了字符集不匹配、乱码等问题。

5.1 编码问题解决–临时(设置当前会话的字符集)

mysql> SET NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)

mysql>

它相当于分别设置客户端字符集、结果字符集和连接字符集为utf8。所有通过该会话发送给数据库的字符数据都会以utf8的编码方式进行处理。

SET character_set_client = utf8; 设置客户端字符集为utf8,即客户端发送给数据库的数据使用utf8编码。

SET character_set_results = utf8; 设置结果字符集为utf8,即数据库返回给客户端的结果使用utf8编码。

SET character_set_connection = utf8; 设置连接字符集为utf8,即客户端和数据库之间的连接使用utf8编码。

需要注意的是,SET NAMES ‘utf8’语句只是设置了当前会话的字符集,并不会修改数据库的默认字符集。如果需要修改数据库的默认字符集,需要通过其他方式来实现,比如在创建数据库时指定字符集。

如下:

1、修改MySQL数据库的默认字符集: 可以通过修改MySQL配置文件(my.cnf)中的default-character-set参数来设置MySQL数据库的默认字符集。或者通过AlTER DATABASE语句。

AlTER DATABASE 数据库名 CHARACTER SET utf8;

2、修改表的字符集: 可以通过ALTER TABLE语句来修改表的字符集。

AlTER TABLE 表名 CHARACTER SET utf8;

**3、修改字段的字符集:**可以通过ALTER TABLE语句来修改字段的字符集。

AlTER TABLE 表名 MODIFY 字段 VARCHAR(255) CHARACTER SET utf8;

VARCHAR(255)可以根据字段的实际类型进行调整。

5.2 编码问题解决–永久(修改my.cnf)

  1. 修改数据库配置文件(vi /etc/my.cnf)
--[mysqld] 标签下加上三行

default-character-set = utf8

character_set_server = utf8

lower_case_table_names = 1 //表名不区分大小写(此与编码无关)

--[mysql] 标签下加上一行

default-character-set = utf8

--[mysql.server]标签下加上一行

default-character-set = utf8

--[mysqld_safe]标签下加上一行

default-character-set = utf8

--[client]标签下加上一行

default-character-set = utf8
  1. 重启数据库服务
systemctl restart mysqld
  1. 查看设置结果
show variables like "%char%";

show variables like "%collation%";

在这里插入图片描述

5.3 utf8 与 utf8mb4区别

MySQL数据库编码utf8与utf8mb4都是用于存储Unicode字符集的编码格式,但是它们之间有一些区别。

1、存储范围: utf8编码最多可以存储3个字节的Unicode字符,而utf8mb4编码可以存储4个字节的Unicode字符。utf8mb4编码可以支持更多的字符,包括一些特殊字符和emoji表情符号。

2、存储空间: 由于utf8mb4编码存储的字符范围更广,所以在存储相同的字符时,utf8mb4编码需要更多的存储空间。例如,存储一个emoji表情符号,utf8mb4编码需要4个字节,而utf8编码则无法存储。

3、索引长度限制: MySQL的索引长度限制是以字节为单位的,utf8编码下,一个字符最多占用3个字节,所以一个索引字段最多可以包含3333个字符;而utf8mb4编码下,一个字符最多占用4个字节,所以一个索引字段最多可以包含250个字符。

4、兼容性: utf8编码在早期版本的MySQL中存在一些问题,例如,无法正确存储某些特殊字符。utf8mb4编码是utf8编码的改进版,可以解决这些问题。

总而言之,如果你的应用需要存储特殊字符或者emoji表情符号,建议使用utf8mb4编码。如果只需要存储普通的字符,utf8编码已经足够。


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/285624.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0-1 knappack(0-1背包问题)

常见的算法有: 枚举贪心动态规划搜索分治和递归 0-1背包是个典型的动态规划算法。 啰嗦一句,动态规划属于运筹学,美国数学家bellman是运筹学的创建者。 0-1背包代码的逻辑如下: v a l ( i , p ) v a l ( i − 1 , p ) , p ≥…

帅爆了!SylixOS 可视化内核监控器即将发布

在翼辉即将发布的 RealEvo 6.0 中,将会加入 SylixOS 可视化内核监控器功能组件。可视化内核监控器实现了线程和进程状态跟踪、中断测量、内存使用率统计、IO 系统分析等功能,可用于复杂场景下应用程序、系统内核、BSP 以及驱动程序的图形化分析&#xff…

本地部署生成式AI,选显卡or笔记本电脑?!新款酷睿Ultra举票

来源 | 算力豹 200亿个大模型参数无压力,新一代酷睿Ultra凭什么? 12月14日报道,在大模型军备竞赛如火如荼的今天,真正让AI铺开惠民,那么移动端、PC将成为首选,AI PC或成标配。英特尔今日奉上AI硬件大招&am…

Polygon zkEVM ROM Spearbit审计报告解读(2023年8月calldata bug修复)

1. 引言 前序博客有: Polygon zkEVM Hexens审计报告解读Polygon zkEVM Spearbit审计报告解读(2022年12月版本)Polygon zkEVM Spearbit审计报告解读(2023年1月版本)Polygon zkEVM Spearbit审计报告解读(20…

一文初识Linux进程(超详细!)

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …

2024年最火爆的前端技术:虚拟DOM让页面性能飞升!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 前言 正文 📘 一、什么是虚拟D…

红队攻防实战之DC2

吾愿效法古圣先贤,使成千上万的巧儿都能在21世纪的中华盛世里,丰衣足食,怡然自得 0x01 信息收集: 1.1 端口探测 使用nmap工具 可以发现开放了80端口,网页服务器但是可以看出做了域名解析,所以需要在本地完成本地域名…

LiveGBS流媒体平台GB/T28181功能-国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选

LiveGBS功能国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选 1、国标级联2、只看已选3、只看未选4、搭建GB28181视频直播平台 1、国标级联 LiveGBS可以作为下级平台,级联到第三方国标平台,详见: LiveGBS国标GB/T28181流…

Java智慧校园源码,SaaS云平台,私有云部署,移动端小程序使用小程序原生语言开发

系统概述: 电子班牌系统又称之为智慧班牌,是当前校园数字化信息化建设、文化建设的主流,是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流的重要应用载体。智慧班牌系统在传统信息发布和校园文化展示功能基础上,融…

白话机器学习的数学-2-分类

1、设置问题 图片分类:只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开: 这次分类的目的就是找到这条线。 2、内积 找到一条线,这是否意味着我们要像学习回归时那样,求出一次函数的斜率…

uni-app 前后端调用实例 基于Springboot 数据列表显示实现

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

人工智能_机器学习085_DBSCAN算法介绍_具有噪声基于密度的聚类_基于密度的空间聚类方法---人工智能工作笔记0125

然后我们再来看一种聚类算法,叫做DBSCAN算法 可以看到,他和KMeans的原理完全不一样, 这个是基于密度的聚类方法,就是在一堆数据中,把密度最大的数据,归为一类 这里的划分为簇,其实就是 划分类别的意思 这个簇,就跟鱼群一样,一个鱼群中肯定是同一种鱼类. 然后我们再来看,DBSC…

LeetCode刷题--- 第 N 个泰波那契数

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言:这个专栏主要讲述动…

从马尔可夫奖励过程到马尔可夫决策到强化学习【01/2】

一、说明 关于马尔可夫过程,如何将马尔可夫决策转化成决策依据,这里介绍的基本的思想路径,为读者将来设计和应用决策模型提供理论上的参考。 这是了解强化学习的一系列基础文章的后续文章。如果您有兴趣了解强化学习,请查看此处。…

设计模式之工厂设计模式【创造者模式】

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

苹果手机录音误删怎么恢复?记住这3个正确操作方法!

苹果语音备忘录被广泛应用于生活、工作和学习等各个方面。通过语音备忘录,我们可以记录重要的会议、对话、音乐或声音。 但如果不小心删除了这些珍贵的录音文件,该怎么办呢?苹果手机录音误删怎么恢复?本文将为你提供三个常用的解…

【计算机毕业设计】SSM汽车维修预约平台

项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色: 管理员登录,新增管理员信息,查看管理员信息,查询管理员信息,查看用户信息列表,查询用户信息,新增新闻公告,查看新闻公告,查询新闻公告,新增配件类…

分布式系统架构设计之分布式数据存储的安全隐私和性能优化

五、安全性和隐私 在前面分布式系统部分,有对安全性做过介绍,如前面所述,在分布式系统中,确保系统的安全性和隐私是至关重要的。安全性关注系统的防护措施,而隐私是关注用户的个人信息保护。 安全性 身份认证&#…

【后端已完成,前端更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 (1)项目可行性分析 (一)技术可行性: (二)经济可行性: (三)社会可行性: (2)需求描述 功能模块图 用例图&#…

航芯ACM32G103开发板评测 03 RT-Thread Nano移植 线程管理测试

航芯ACM32G103开发板评测 07 RT-Thread Nano移植 线程管理测试 1. 软硬件平台 ACM32G103 Board开发板MDK-ARM KeilRT-Thread Nano 源码 2. 物联网RTOS—RT-Thread ​ RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主…