Wishlist 0 ¥0.00

MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections

 

MySQL连接数过度的异常

碰到Can not connect to MySQL server. Too many connections”-mysql错误着实令人抓狂。这基本等于失去了对 MySQL 的控制权

一、连接数过度出现的原因

出现 MySQL 连接数过多有多种情况,多数是因为mysql_connect ,没有 mysql_close; 当sleep连接占满最大连接数max_connections时,会导致 Too many connections 错误。

MySQL 默认最大连接数max_connections为 151,其实 MySQL 还给 root 留了多一个通道,真正的最大连接数为max_connections + 1 。但实际工作中因为各种原因,这个 1 也有可能被占用。这时,我们无法通过登录 MySQL 调整参数的方法来处理这个错误。

二、查看当前 MySQL 连接情况

我们可以使用 SHOW PROCESSLIST; 查看前 100 条连接。

show processlist;

也可以使用 SHOW full PROCESSLIST; 查看所有连接。

show full processlist;

如何查看当前 MySQL 连接池是否已满?

使用 mysqladmin -u uname -p status 查看当前连接数情况。

 

将 uname 替换为你的 MySQL 账号名称,在返回的结果中,Threads 的值为当前连接数,如果当前连接数接近或等于最大连接数,那么就说明 MySQL 连接数已经满了或接近满了。

合理设置超时时间

之所以会出现大量 sleep 占满连接,除了业务量的原因外,也有可以从超时时间着手调整,可根据实际情况适当缩短超时时间,让 MySQL 可在短时间自动清理超时连接,以达到保证连接通常的目的。

mysqld 连接超时参数有以下两个:

  • interactive_timeout
  • wait_timeout

默认情况下,两者都是 28800 秒(8 小时),我们可以在 MySQL 配置文件中修改这两个参数。
如果使用的是mysql_pconnect 这种持久连接的话,可以将超时时间降到更合适的值,比如 600 (10 分钟)甚至 60(1 分钟)。这个超时时间并没有一个明确的时间,主要还是要看应用场景中的实际需求。

  • 1.在配置文件中修改超时时间(需重启 MySQL 生效):
    首先打开 mysqld.cnf 配置文件。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

然后在配置文件中找到这两行,并修改对应的参数:

interactive_timeout=60
wait_timeout=60
  • 2.临时变更连接超时时间(无需重启):
SET GLOBAL interactive_timeout = 60;
SET GLOBAL wait_timeout = 60;

注意:

  • 这是临时变更配置的方法,在重启 MySQL 后会恢复配置文件中的设置值。

     

  • 对于已经打开的连接,是不会被关闭的。只有新建立的连接才会在 60 秒后关闭。

查看及修改最大连接数

在 MySQL 中,默认连接数为 151,我们可以通过修改 MySQL 配置文件永久调整连接数参数,也可以通过 SQL 命令临时调整。

1.查看当前 MySQL 连接数

 show variables like '%max_connections%';

2.临时调整当前 MySQL 连接数

set GLOBAL max_connections = 300;

3.通过修改 MySQL 配置文件调整最大连接数

  • 1.先打开 MySQL 配置文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 下面找到 max_connections ,如果没有可直接添加。

[mysqld]
...
max_connections = 300
...

    1. 修改后重启 MySQL,使配置文件生效:
sudo systemctl restart mysql

无法登录 MySQL 时,如何修改最大连接数

无法登录又无法重启 MySQL 时,我们可以使用以下方法进行操作,以增大连接数。

  • 1.修改 pid 增大连接数
    我们可以使用 gdb 工具,在不进入数据库的情况下,修改最大连接数。
gdb -p $(cat data/uname.pid) \
-ex "set max_connections=5000" -batch
  • data/uname.pid:将这里修改为你服务器中 pid 的文件路径及文件名。

此方法仅适用于特殊、紧急情况,在生产环境使用,有一定风险,慎用。

提前布局,给 root 预留好连接通道。

在 MySQL 配置文件中,有两个有关连接数的参数.

  • max_connections:控制最大连接数。
  • max_user_connections:控制单个用户的最大连接数。当此参数为 100 时,那么任意用户(含 root 用户)最多可创建 100 个连接。

制定连接策略:

max_connections = 2000
max_user_connections= 300

当 MySQL 有 6 个用户时(不含 root ),单个用户最大连接数为 300,那么 6 个用户最多有 1800 连接。那么系统总会剩下 200 个连接留给 root 使用。

总结

有关 MySQL 连接数过多的错误,需要在平时的工作中多实践,这里的很多关键参数都需要对手中的工作有更宏观的认识,才能更好的设定这些参数。

这类问题还可以利用arthas/tcpdump等工具排查:

  • Arthas 是 Alibaba 开源的 Java 诊断工具;
  • tcpdump根据使用者的定义对网络上的数据包进行截获的包分析工具
    tcpdump可以抓取mysql报文
    一个TCP包中包含多个mysql协议包,一个协议包就是一条mysql记录

(完)

locking the volume和vss的区别

锁定卷(Locking the Volume)和卷影复制服务(VSS,Volume Shadow Copy Service)是两种不同的方法,用于管理存储卷的访问和数据一致性。以下是它们的区别:  

---

1. 锁定卷(Locking the Volume)

- 定义:锁定卷是指直接禁止对存储卷的写操作,通常在创建磁盘或卷的镜像时使用,以确保数据在复制过程中保持一致性。
- 特点:
  - 写保护:防止任何应用程序或进程对卷进行写操作。
  - 适用场景:用于简单的备份或克隆操作,不涉及复杂的事务管理。
  - 中断性:锁定操作通常会对卷上的其他应用程序造成中断,因为写入被完全禁止。
  - 实现方式:通过操作系统的文件系统接口或驱动直接锁定卷。
- 优缺点:
  - 优点:实现简单,数据一致性高。
  - 缺点:不适合动态环境,会中断正常的读写操作。

---

2. 卷影复制服务(VSS)

- 定义:VSS 是 Windows 提供的一种技术,通过创建卷的时间点快照(Shadow Copy)来确保数据一致性,无需锁定卷或停止写操作。
- 特点:
  - 事务一致性:支持事务一致的备份,特别是对数据库或虚拟机等复杂环境。
  - 动态操作:在快照期间,卷仍然可以被读写,不会中断操作。
  - 快照机制:VSS 创建的是一个只读快照,并将增量写操作重定向到另一个位置(Copy-on-Write)。
- 适用场景:适用于复杂的企业级应用程序和动态环境,例如数据库备份、虚拟化环境中的快照等。
- 优缺点:
  - 优点:对生产环境影响小,支持复杂的事务一致性。
  - 缺点:实现复杂,可能需要更多的存储资源。

---

主要区别

| 特性                     | 锁定卷(Locking the Volume)       | 卷影复制服务(VSS)          |
|--------------------------|-----------------------------------|-----------------------------|
| 数据一致性           | 通过禁止写操作实现一致性         | 使用快照技术实现一致性       |
| 对系统的影响         | 会中断写操作,可能影响系统正常运行 | 不中断写操作,系统可继续运行 |
| 适用场景             | 简单备份、克隆                   | 企业级备份、动态环境         |
| 实现复杂性           | 实现较简单                       | 实现较复杂                   |
| 性能影响             | 写入完全暂停,可能有延迟         | 写入性能可能略有影响         |

---

总结  
- 如果需要快速复制数据,且可以暂停写操作,锁定卷是一个简单的解决方案。  
- 如果需要最小化对生产环境的影响,尤其是需要处理事务一致性数据,VSS 是更好的选择。

Joomla 网站上的内存不足错误与允许内存错误

我们知道,距离我们上次在这个博客上写一篇文章已经有几周了——我们并没有偷懒,只是我们在 12 月有不少大型项目。尽管如此,我们还是感到内疚,所以我们决定现在写一篇文章,如果你想知道现在是什么,那么现在是美国东部标准时间 2016 年 12 月 31 日晚上 8:52。是的,今天是除夕夜,我们正在写一篇博文!

好了 - 这个介绍就够了。让我们从多汁的东西开始......

作为 Joomla 管理员,您可能已经在 Joomla 网站上看到过以下错误之一(或者您可能已经看到了这两个错误):

致命错误:允许的内存大小为 x 字节已耗尽(尝试分配 x 字节)

致命错误:内存不足(已分配 x)(尝试分配 x 字节)

对于未经训练的人来说,上述错误看起来或多或少是相同的:它们看起来像一个内存问题,这是正确的,它们是内存问题。但是,它们是完全不同的内存问题。不幸的是,大多数 Joomla 管理员认为上述错误是相同的,他们认为本文中提出的解决方案可以解决这两个错误。事实并非如此......

事实上,增加 php.ini 或 .user.ini 文件中的memory_limit可能会解决第一个问题,但肯定不会解决第二个问题。你看,第一个问题意味着 Joomla 网站已经超过了 PHP 实例允许的内存限制,而第二个问题意味着 Joomla 网站已经用完了所有可用内存。让我们给你举个例子......

假设您的默认 php.ini 的内存限制为 32 MB,并且您的服务器上有 2 GB 的 RAM。.如果您的 Joomla 网站上的页面超过 32 MB,那么您将看到允许的内存...致命错误。但是,如果您的 php.ini 文件中的内存限制设置为非常高的数字,例如 4096 MB(或 4 GB,这不应该是这种情况),并且您的服务器上有 2 GB 的 RAM,那么如果您的 Joomla 网站上的页面需要超过 2 GB,那么您将看到内存不足致命错误。

现在,如果您非常仔细地阅读上述段落,那么您的问题将是,为什么在现实生活中,有人会看到内存不足致命错误?问得好!

事实上,在实际场景中,永远不会引发内存不足致命错误,因为服务器的所有内存都已耗尽,引发该错误是因为超出了在 Apache 级别设置的硬限制,并且该硬限制是使用 Apache 中的 RLimitMEM 指令设置的。例如,在 httpd.conf 文件中包含以下内容...

RLimitMEM 33554432

…意味着您的 Joomla 网站上的内存使用量有 32 MB 的硬性限制,这意味着您的 Joomla 网站上需要超过 32 MB 的任何页面都将引发内存不足致命错误(假设 PHP memory_limit高于 32 MB,否则,该页面将引发允许的内存致命错误)。

那么,如何解决“内存不足”致命错误呢?

显然,解决此类错误可以通过注释掉 httpd.conf 文件中的整个 RLimitMEM 行,或者将 RLimitMEM 的值(也在 httpd.conf 中)增加到更高的值,然后重新启动 Apache 来完成。请注意,如果您使用的是 WHM,则可以从 WHM 中更改 RLimitMEM 的值,方法如下:

  • 以 root 身份登录 WHM 控制台。
  • 在左上角的搜索框中,搜索 Apache Configuration

  • 单击 Apache 配置

  • 向下滚动一点,然后单击 Memory Usage Restrictions

  • 在 Configure Apache RLimits 页面中,您可以禁用 RLimitMEM,也可以将其设置为更高的值。请注意,您需要重新启动 Apache 才能使设置生效。

如果您看到问题并且您正在使用共享主机,那么您应该联系您的托管公司,他们可能会为您增加它(但不要屏住呼吸,因为他们很可能不会)。

如何备份和恢复您的 Joomla 站点(完整教程)

It’s very important to take website backups. A site may face many problems that require restoring it from previous backups. What if you don’t have any? This is not pleasant at all. You may avoid such unexpected situations by taking regular backups. You can do it in several ways including manually archiving files and downloading them to your computer. But creating a backup is very easy with Akeeba.
这是非常重要的采取网站备份.站点可能面临许多问题,需要从以前的备份中恢复。如果你没有怎么办?这一点也不愉快。您可以通过定期备份来避免此类意外情况。你可以通过几种方式来做到这一点,包括手动存档文件并将其下载到电脑上。但是使用Akeeba创建备份非常容易。

Well, Akeeba Backup is a component that you can use to create full backups of your Joomla site and restore them. Let’s see how to do it.
Akeeba Backup是一个组件,您可以使用它来创建Joomla站点的完整备份并恢复它们。让我们看看怎么做。

Download and Install Akeeba Backup
下载并安装Akeeba Backup

Download the component from its official site. You will get several versions of Akeeba on its website. Installing the latest version can be the best option for an updated Joomla setup.
从其官方网站下载组件。您将在其网站上获得Akeeba的多个版本。安装最新版本可能是更新Joomla设置的最佳选择。

Now login to your Joomla site’s administration panel. Go to Extensions > Manage.
现在登录到您的Joomla网站的管理面板。转到扩展管理。

install akeeba1

Locate the Akeeba Backup package from your computer, press “Upload & Install”. 
找到Akeeba备份软件包从您的计算机,按“上传安装”.

Remember, you can install an extension by locating it from a folder that is already uploaded to your server. Also, there is an option for installing extensions via their URLs. In this method, you don’t need to download the package locally, rather enter the package link into the specified field and click the Upload & Install button. You can use the "Install from Web" feature to get extensions from Joomla extension directory as well.
请记住,您可以通过从已上传到服务器的文件夹中查找扩展来安装扩展。此外,还有一个通过URL安装扩展的选项。在这种方法中,您不需要在本地下载软件包,而是在指定字段中输入软件包链接,然后单击Upload Install按钮。您可以使用“从Web安装”功能从Joomla扩展目录中获取扩展。

The system will notify you soon about the installation.
系统将很快通知您安装。

After installing Akeeba, navigate to Components > Akeeba Backup.
安装Akeeba后,导航到组件Akeeba备份。

The component will show an auto configuration button. Run the Configuration Wizard. 
该组件将显示一个自动配置按钮。运行配置向导。

The configuration progress will be displayed on the screen. 
配置进度将显示在屏幕上。

After the component performs the automated configuration tasks, you will get an option to create new backups and re-configure the tool.
在组件执行自动配置任务后,您将获得一个创建新备份和重新配置工具的选项。

Create a Backup
创建备份

To start creating a new backup, go to Components > Akeeba Backup. There you will see the component options. You can create a new backup using the default configuration by clicking the default one-click backup button. (Other basic operations are also can be done from here.)
要开始创建新备份,请转到组件Akeeba备份。在那里,您将看到组件选项。您可以通过单击默认的一键备份按钮,使用默认配置创建新备份。(其他基本操作也可以从这里完成。

The system will show the backup progress. 
系统将显示备份进度。

You will be notified once the backup is completed.
备份完成后,您将收到通知。

Download the Backup
下载备份

When the backup is created, you can download it to your local computer. Click the “Manage Backups” button on the Akeeba Backup dashboard to view all of your available backups.
创建备份后,您可以将其下载到本地计算机。单击Akeeba备份仪表板上的“管理备份”按钮以查看所有可用备份。

You can download a backup file from the upcoming page.
您可以从下一页下载备份文件。

How to Restore a Backup?
如何恢复备份?

You can restore a backup that was created with Akeeba anytime. It has several steps to follow. At first go to the Akeeba Backup component dashboard via your site’s admin panel. Visit the Manage Backups section. Select the target backup by checking the checkbox. Click the Restore button 
您可以随时恢复使用Akeeba创建的备份。它有几个步骤需要遵循。首先通过您网站的管理面板转到Akeeba Backup组件仪表板。访问管理备份部分。通过选中复选框选择目标备份。单击还原按钮

On the next page, the system will gather some more configuration information from you. If you're restoring the site in the same server using an on-site backup, leave all these options as default. Then click the Start Restoration button. The progress will be shown on the screen.  
在下一页,系统将从您那里收集更多的配置信息。如果您使用现场备份在同一台服务器上还原站点,请将所有这些选项保留为默认值。然后单击“Start Restoration(开始恢复)”按钮。进度将显示在屏幕上。

After the package extraction is complete, the following screen will arrive. Click 'Run the site restoration script' button. 
包提取完成后,将出现以下屏幕。点击“运行网站恢复脚本”按钮。

Akeeba will load the restoration interface. It will check whether your site is ready to be restored. Click the Next button. 
Akeeba将加载恢复界面。它将检查您的网站是否已准备好恢复。单击下一步按钮。

The upcoming screen will show the database restoration phase. Review all information and click the Next button. 
接下来的屏幕将显示数据库恢复阶段。查看所有信息并单击“下一步”按钮。

You will get the Site Setup phase. It's very close to completion. Check the site setup information and click the Next button.
您将进入站点设置阶段。它就快完工了。检查站点设置信息,然后单击“下一步”按钮。

Almost finished. Now remove the installation directory by clicking the provided button.
快完成了现在通过单击提供的按钮删除安装目录。

And your mission is complete. Now you can visit your site and it should be back as it was in the backup date.
你的使命完成了。现在您可以访问您的网站,它应该回来,因为它是在备份日期。

That was all for now. Which backup-restore method do you use? Please share your experience with us via comments. 
目前就这些。您使用哪种备份还原方法?请通过评论与我们分享您的经验。

About Us

Since 1996, our company has been focusing on domain name registration, web hosting, server hosting, website construction, e-commerce and other Internet services, and constantly practicing the concept of "providing enterprise-level solutions and providing personalized service support". As a Dell Authorized Solution Provider, we also provide hardware product solutions associated with the company's services.
 

Contact Us

Address: No. 2, Jingwu Road, Zhengzhou City, Henan Province

Phone: 0086-371-63520088 

QQ:76257322

Website: 800188.com

E-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.