2012-06-28 58 views
1

我是新来的,但从此站点获得了日志。 我打算在大型php/mysql网站上,但混淆了mysql并发连接限制。 是否每个mysql数据库的限制或每个localhost/cpanel帐户的限制? 如果它限制每个mysql数据库。因此,如果我为每个最终用户都有一个专用的mysql数据库,那么例如每1000个最终用户就有1000个数据库,但是我只有1个mysql用户授予访问所有1000个数据库的权限。它可以吗? 如果它限制每个mysql用户。池连接可以成为这种情况下的解决方案吗?是每个MySQL用户的mysql并发连接数限制或每个本地主机的限制

回答

5

有系统变量控制两个。正如the manual指出:

  • max_connections

     
    +----------------------+-----------------------+ 
    | Command-Line Format | --max_connections=# | 
    +----------------------+-----------------------+ 
    | Option-File Format | max_connections  | 
    +----------------------+-----------------------+ 
    | Option Sets Variable | Yes, max_connections | 
    +----------------------+-----------------------+ 
    | Variable Name  | max_connections  | 
    +----------------------+-----------------------+ 
    | Variable Scope  | Global    | 
    +----------------------+-----------------------+ 
    | Dynamic Variable  | Yes     | 
    +----------------------+-----------------------+ 
    |      | Permitted Values  | 
    +       +---------+-------------+ 
    |      | Type | numeric  | 
    +       +---------+-------------+ 
    |      | Default | 151   | 
    +       +---------+-------------+ 
    |      | Range | 1 .. 100000 | 
    +----------------------+-----------------------+ 
    

    允许的最大客户端同时连接的数量。默认情况下,这是151.有关更多信息,请参阅Section C.5.2.7, “Too many connections

    增加此值会增加mysqld要求的文件描述符的数量。有关文件描述符限制的注释,请参阅Section 8.4.3.1, “How MySQL Opens and Closes Tables”

  • max_user_connections

     
    +----------------------+---------------------------+ 
    | Command-Line Format | --max_user_connections=# | 
    +----------------------+---------------------------+ 
    | Option-File Format | max_user_connections  | 
    +----------------------+---------------------------+ 
    | Option Sets Variable | Yes, max_user_connections | 
    +----------------------+---------------------------+ 
    | Variable Name  | max_user_connections  | 
    +----------------------+---------------------------+ 
    | Variable Scope  | Global, Session   | 
    +----------------------+---------------------------+ 
    | Dynamic Variable  | Yes      | 
    +----------------------+---------------------------+ 
    |      | Permitted Values   | 
    +       +---------+-----------------+ 
    |      | Type | numeric   | 
    +       +---------+-----------------+ 
    |      | Default | 0    | 
    +       +---------+-----------------+ 
    |      | Range | 0 .. 4294967295 | 
    +----------------------+---------------------------+ 
    

    允许任何给定的MySQL用户帐户同时连接的最大数目。值为0(默认值)表示“无限制”。

    此变量具有可在服务器启动或运行时设置的全局值。它还具有只读会话值,该值指示适用于与当前会话关联的帐户的有效同时连接限制。

    如果用户帐户具有非零MAX_USER_CONNECTIONS资源限制,会话max_user_connections值设置为限制:会话值如下初始化。

    否则,会话max_user_connections值设置为全局值。

    帐户资源限制使用GRANT声明指定。见Section 6.3.4, “Setting Account Resource Limits”Section 13.7.1.3, “GRANT Syntax”

+0

对我来说确定这是新的,所以如果使用声明“所有root权限”的VPS主机,我可以如何管理它们? – Thanaporn

1

这太疯狂了。每个用户不能有1个数据库。这是一个过度杀戮。 (如果你不是托管服务提供商)

无论如何MySQL建议不要过来4096并发每台机器的请求。如果您有4096个并发请求,我相信您会遇到许多其他问题,而不是数据库。

参考:MySQL Best Pratices

+0

为什么不呢?如果某人正在运行一个托管服务,其中一个用户可以访问他们自己的MySQL数据库,那么每个用户可能会有一个数据库。我不明白为什么这是不好的做法,但当然服务器/集群需要足够的资源来应付预期的负载。 – eggyal

+0

@eggyal:是的,我没有考虑到托管服务提供商。如果他从这个角度讲话,我认为服务器故障是这个问题的更好地方。 – dynamic

+0

我计划让每个用户数据库只存储经常动态的个人数据。然后中央数据库用于链接每个用户数据库之间的关系。 – Thanaporn