解决 MySQL ERROR 1041 (HY000): Out of Memory

上周遇到 MySQLERROR1 04 1 (HY000)。

内存不足。

查资料。

有几个方向。

1 . 调整MySQL配置。

优化缓冲区和缓存。

innodb_buffer_pool_size是关键。

建议设置为总内存的5 0-7 0%。

Key_buffer_size也取决于它。

sort_buffer_size 用于每个连接。

read_buffer_size一般不需要太大。

更改后重新启动 MySQL。

使用 SHOW VARIABLES LIKE '%buffer%'; 看看是否生效。

2 限制连接数。

每个连接都会消耗内存。

max_connections 应该调小一些。

3 系统级资源限制。

您可以使用 ulimit 查看当前限制。

ulimit -a 看看。

ulimit -v unlimited 解除虚拟内存限制。

要进行永久更改,请转至 /etc/security/limits.conf。

添加几行。

重启后才会生效。

4 优化查询和索引。

解释查看查询。

应避免全表扫描。

添加索引。

添加了高频查询字段。

在订单上创建索引 idx_customer_id(customer_id);
5 监控系统内存。

使用top或free -m查看。

free -m 输出示例:
内存:7 9 8 2 4 5 008 002 002 6 8 2 3 002 6 8 2 3 000
交换:2 04 7 5 01 9 9 7
可用内存不足,无法处理。

6 增加交换空间(Swap)。

可以使用命令创建交换文件。

临时补充。

sudo fallocate -l 2 G /swapfile
sudo chmod 6 00 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
要永久生效,请在 /etc/fstab 中添加一行。

7 硬件升级。

如果内存一直超过8 0%。

交换空间也被大量使用。

考虑添加 RAM。

或者移动服务。

总结一下。

先调整MySQL配置。

优化查询和索引。

检查系统限制。

监控内存。

如有必要,添加交换或硬件。

算了。

为何在访问mysql的时候提示: SQLSTATE[ HY000

哦,这个错误太烦人了。
2 02 2 年,我所在城市的服务器一直报这个错误。
SQLSTATE[HY000][1 04 5 ]用户“root”@“localhost”的访问被拒绝(使用密码:YES)。
起初我不知道,我很困惑。

后来我发现这是数据库访问的问题。
想一想,root用户肯定不能随意访问。
您需要更改其权限。
我正在 Linux 服务器上工作。
首先进入MySQL,使用命令use mysql;切换到mysql数据库。

然后我更新用户集 Host='%' where user='root';要求。
你看,这里我把 root 的托管设置为 %。
这意味着什么?它可以从任何地方访问,包括远程访问。

但是!仅仅改变这一点是不够的,您必须行使另一个删除权限;要求。
这个命令有什么作用?这是为了使更改的权限立即生效。
有时,如果你做不到,这些改变就会变得毫无用处。

哦,顺便说一句,我当时的服务器也安装了SELinux。
SELinux 有时会带来麻烦。
我找到了文件 /etc/sysconfig/selinux 并将其中的 SELINUX=enforcing 更改为 SELINUX=disabled。
这意味着关闭 SELinux 的强制访问控制功能。

进行这些更改后,我重新启动了整个 Linux 服务器。
不仅是MySQL,整个服务器都被重启了。
为什么?因为有时系统级别的设置发生了变化,如果不重新启动它就无法工作。

重启完成后,我会再次尝试连接数据库,嘿!那个烦人的错误消息消失了!连接成功!我也松了口气。
可能我有点偏激,觉得这个问题特别严重,但是解决了之后,我感觉世界变得太平了。

无论如何,这个方法对我有用。
尝试一下,导入 MySQL,将 root 的主机更改为 %,然后删除权限,禁用 SELinux(如果已打开),最后重新启动服务器。
也许它会解决你的问题。

启动mysql 出现错误 2003 原话是:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhos

哎呀,我最近也遇到了这个“ERROR 2 003 : Can't connect to MySQL server on 'localhost'”的坑。
这件事从去年就开始了。
我当时在一家小公司做运维,公司的几个项目都使用了MySQL数据库。

那天,我坐在电脑前,突然收到开发小哥发来的微信,说数据库无法连接。
我一头雾水,赶紧查看错误日志,发现是“ERROR 2 003 : Can't connect to MySQL server on 'localhost'”。
该怎么办?
第一步,我按照网上的教程,在“事件查看器”中查找最新的MySQL错误消息。
一看,原来是提示端口被占用了。
我当时就傻眼了,因为我记得之前配置的时候,MySQL默认使用的是3 3 06 端口。

然后我开始检查端口占用情况。
我用命令行工具查看,发现某个后台程序占用了3 3 06 端口,我打开任务管理器,找到该进程,并将其结束。
然而问题还没有解决,因为程序又自动启动了。

我当时有点慌,但也不能乱来。
我开始考虑解决端口冲突。
我想了想,决定先停止占用端口的程序,然后重新启动MySQL服务。
这个伎俩非常有效。
重启后,数据库连接正常。

后来我还修改了MySQL配置文件中的端口号,以防止以后再出现这种情况。
这次事件告诉我,运维一定要认真,不能马虎。
以后我会知道如何处理类似的问题。