mysql数据库连接过多的错误,可能的原因分析及解决办法

 系统不能连接数据库,关键要看两个数据: 

  1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。 
  2、数据库当前的连接线程数threads_connected。这是动态变化的。查看max_connections、 max_connections的办法见后。 如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而 threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术, threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。查看max_connections 进入MySQL,用命令:show variables 查看数据库最大可连接数的变量值:max_connections 查看threads_connected 进入MySQL,用命令:show status 查看当前活动的连接线程变量值:threads_connected 设置max_connections 设置办法是在my.cnf文件中,添加下面的最后红色的一行: -------------------------------------------------------------------------------- 
[mysqld]
port=3306 
#socket=MySQL skip-locking 
set-variable = key_buffer=16K 
set-variable = max_allowed_packet=1M 
set-variable = thread_stack=64K 
set-variable = table_cache=4 
set-variable = sort_buffer=64K set-variable = net_buffer_length=2K 
set-variable = max_connections=32000 
-------------------------------------------------------------------------------- 修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。 注意: 1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384; 2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥; 3、添加了最大允许连接数,对系统消耗增加不大。 4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。








常见问题集锦

 MySQL总是崩溃

  首先你应该试着找出问题mysqld守护进程是否死掉或你的问题是否与你的客户有关。你可以用mysqladmin version检查你的mysqld服务器正常执行了多长时间,如果mysqld死了,你可以在文件“mysql-data- directory/'hostname'.err”中找到其原因。


  使用MySQL时的一些常见错误

  MySQL server has gone away

  常见的原因是服务器超时了并且关闭了连接。缺省地,如果没有事情发生,服务器在 8个小时后关闭连接。你可在启动mysqld时通过设置wait_timeout变量改变时间限制。

  如果mysqld得到一个太大或不正常的包,它认为客户出错了并关闭连接。


  Can't connect to [local] MySQL server

  通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时,你正在使用一个错误的套接字文件或TCP/IP端口。

  检查(使用ps)服务器上是否有一个名为mysqld的进程启动

  如果一个mysqld进程正在运行,可以通过尝试这些不同的连接来检查服务器

shell> mysqladmin version

shell> mysqladmin variables

shell> mysqladmin -h `hostname` version variables

shell> mysqladmin -h `hostname` --port=3306 version

shell> mysqladmin -h 'ip for your host' version

shell> mysqladmin --socket=/tmp/mysql.sock version

  注意hostname命令使用反引号“`”而非正引号“'”;这些导致hostname输出(即,当前主机名)被代替进mysqladmin命令中。


  Host '...' is blocked错误

Host 'hostname' is blocked because of many connection errors.

Unblock with 'mysqladmin flush-hosts'

  这意味着,mysqld已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在 max_connect_errors次失败请求后,mysqld认定出错了(象来字一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令 mysqladmin flush-hosts。

缺省地,mysqld在10个连接错误后阻塞一台主机。你可以通过象这样启动服务器很容易地调整它:

shell> safe_mysqld -O max_connect_errors=10000 &


  [color=Red]链接过多,请联系空间商[/color]错误

意味着已经有max_connections个客户连接了mysqld服务器。

如果你需要比缺省(100)更多的连接,那么你应该重启mysqld,用更大的 max_connections 变量值。


  Out of memory错误

mysql: Out of memory at line 42, 'malloc.c'

mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)

ERROR 2008: MySQL client ran out of memory

  注意,错误指向了MySQL客户mysql。这个错误的原因很简单,客户没有足够的内存存储全部结果。

  首先检查你的查询是否正确

 Packet too large错误

  一个MySQL客户或mysqld服务器得到一个比max_allowed_packet个字节长的包

  可以通过用mysql --set-variable=max_allowed_packet=8M指定一个更大的缓冲区来启动客户程序。


  The table is full错误

  这个错误发生在内存临时表变得比tmp_table_size字节大时。


  Commands out of sync in client错误

  正在以错误的次序调用客户函数!


  Ignoring user错误

Found wrong password for user: 'some_user@some_host'; Ignoring user

  这意味着在mysqld启动时或在它再次装载权限表时,它在user表中找到了一个有一个无效口令的条目。结果,条目简单地被权限系统忽略。


  Table 'xxx' doesn't exist错误

  数据库和表名件是区分大小写的!可以用SHOW TABLES检查你在当前数据库中有哪个表。

 

  从一个文本文件运行SQL命令

  可以把SQL命令放在一个文件中并且告诉mysql从该文件读取其输入:创造一个文本文件“text_file”,它包含要执行的命令。然后如下调用mysql:

shell> mysql database < text_file

  或

shell> mysql < text_file

  启动有USE db_name语句的文本文件。

 

  怎样重新设置一个忘记的口令

  如果忘记了MySQL的root用户的口令,可以使用如下方法恢复:

  通过发送一个kill(不是kill -9)到mysqld服务器来关闭mysqld服务器。pid 被保存在一个.pid文件中,通常在MySQL数据库目录中:

  kill `cat /mysql-data-directory/hostname.pid`

  你必须是一个UNIX root用户或运行服务器的相同用户做这个。

  使用--skip-grant-tables选项重启mysqld。

  用mysql -h hostname mysql连接mysqld服务器并且用一条GRANT命令改变口令。见7.26 GRANT和REVOKE句法。也可以用mysqladmin -h hostname -u user password 'new password' 进行。

  用mysqladmin -h hostname flush-privileges或用SQL命令FLUSH PRIVILEGES来装载权限表。

 

  使用DATE列的问题

  DATE值的格式是'YYYY-MM-DD'。

 

  改变一张表中列的顺序

  在一个应用程序中,应该决不基于他们的位置使用SELECT * 检索列,因为被返回的列的顺序永远不能保证;对数据库的一个简单改变可能导致应用程序相当有戏剧性地失败。

  可以使用如下方法改变:

  以正确的列顺序创建一张新表。

  执行INSERT INTO new_table SELECT fields-in-new_table-order FROM old_table.

  删除或改名old_table。

  ALTER TABLE new_table RENAME old_table。

 

  数据库复制

  MySQL(至今)没有数据库复制,但是有一些如何实现的信息。

  复制一个数据库最一般的方法是使用更新日志。










 MySQL 许可常见问题(MySQL Licensing FAQ)
[url]http://www.chinaunix.net[/url] 作者:yejr  发表于:2006-11-15 09:52:02
【发表评论】【查看原文】【MySQL讨论区】【关闭】

译文出自: [url]http://imysql.cn/?q=node/150[/url], 译者:叶金荣, 转载请注明.

原文摘录自: [url=http://dev.mysql.com/tech-resources/articles/mysql- network-and-you.html]http://dev.mysql.com/tech-resources/articles/mysql-network -and-you.html,作者: Arjen Lentz(Community Relations Manager of MySQL AB)

End users

终端用户

If you are an end-user, you can use a GPL licensed server and will not require a commercial license to use MySQL. This applies even if you are an ISP or if you sell services on your e-commerce web site, since you are not distributing anything. If you are distributing anything, please see under the Developer heading below.

如果你是一个终端用户,则你可以使用GPL服务器而无需使用商业许可的MySQL.不管你是ISP还是电子商务销售服务网站,都适用这个原则,因为你没有分发(分发给其他人)任何东西.如果你分发了,那么看看下面的开发者的前面那部分.

If you want to take advantage of MySQL Network for your servers, you can get a yearly subscription. In case your organization is apprehensive about GPL licensed software, you can then ask for a commercial (non-GPL) license as an optional (but free) extra.

如果你想让MySQL Network提供更多高级服务的话,就可以每年订阅MySQL Network的服务.如果你(所在的组织)对GPL许可下的软件不放心的话,就可以索要一个商业许可(非GPL)作为额外的选择(但免费).

If you later decide that you no longer want to subscribe to MySQL Network, you can continue to use GPL licensed servers.

如果你将来决定不再订阅MySQL Network的服务,则可以继续使用GPL许可下的服务器.

Developers (including ISVs/OEMs)

开发者(包括分公司(ISV)和代工(OEM))

If you build an application, and link it with MySQL code, check out these possibilities:

如果你开发了一个应用软件,并且和MySQL的代码连接,则看看下面的几个可能性:

   1.  Are you only using your application in-house?
      →You are actually an end-user. See above.

   1.  你是否只是在内部使用这个软件?
      →  那么你实际上是终端用户,看上面.

   2.  Are you distributing your application as Open Source under the GPL (free or for money, doesn't matter)?
      →You may link with any GPL licensed MySQL code: client library or embedded server. The end-users of your software can, at their option, subscribe to MySQL Network.

   2.  你是否把你的应用软件在GPL许可下作为开源(是否免费无所谓)分发了?
      →  你可能和GPL许可下的MySQL代码连接了: 客户端库或者嵌入的服务器. 则应用软件的终端客户可以自行选择是否要订阅MySQL Network服务.

   3.  Are you distributing your application and only linking with the MySQL client libraries, not under GPL but with another Open Source license we allow? (see the FLOSS License Exception)
      →Same as the previous point 2.

   3.  你是否在非GPL许可但遵循其他开源许可([url=http: //www.mysql.com/company/legal/licensing/foss-exception.html]查看FLOSS例外许可) 下分发了你的应用软件,并且只是和MySQL客户端库连接?
      →  看看上面的第2点.

   4.  Are you distributing your application but it is not Open Source, and you want to link with the MySQL server?
   Contact MySQL AB to discuss an OEM agreement for commercial licenses. Embedding the MySQL server with your application can be an excellent idea, as it makes things very easy and cost-effective for your customers. And of course there are volume discounts.

   4.  你以非开源的方式分发了应用软件,并且你想要连接到MySQL服务器上?
      →  联系MySQL AB讨论一下用OEM协议作为商业许可.把MySQL服务器嵌入到你的应用软件中也许是一个绝妙的主意,因为这么做让你的客户非常方便并且效率很高.当然了,他们可以享受很多优惠.

   5. Are you certifying your application, whether it's open source or not, for use with MySQL Network?
   You can sign up to be a MySQL Network Certified Partner. This program helps you certify your software as compatible with MySQL Network and is quite effective when you will have your customers buy MySQL Network. There is a cost associated with this program, but the basic level is very affordable and it also gives you MySQL Network for yourself, which includes access to the knowledge base and the advisors.
As partner, you get listed on our partner web site, and your application will have a strategic advantage over competitors as it is certified for MySQL Network. There are some additional rules that govern the partner program.

   5. 你认证了应用软件,不管是开源也好还是用MySQL Network服务?
      →  [url=http://solutions.mysql.com/program/tech-partners.html] 你可以注册成为MySQL Network的认证合作伙伴.这有助于你在需要客户购买MySQL Network产品时,保证你的程序和 MySQL Network的产品兼容性更好而且效率更高.同时这是有相关价值的,但都是从MySQL Network能获得的基础的知识,包括访问知识库和建议.作为合作伙伴,在我们的合作伙伴列表网站列表上能看得到,并且由于有了MySQL Network认证可以提高你的战略竞争优势.还
有一些其他附加的规则来管理合作伙伴.

          Your customers may want to subscribe to MySQL Network, for which your software will be tested and certified, but you don't have to worry about individual licensing or anything like that. So this is the really big new thing for developers of closed-source software
who want to support MySQL.

          你的客户可能想要订阅MySQL Network,则你的软件会被测试和认证,但不必担心诸如个别许可的事情.这对那些想要支持MySQL的封闭源码开发者来说是件大好事.

Of course, you can always sign up as a MySQL Network Certified Partner even if your situation is not as described above. You would get the benefits of MySQL Network as well as the partnership extras, for a decent price.

当然,就算你的情况没有在上述情况中,你也可以只注册作为MySQL Network的认证合作伙伴.你可以作为额外的合作伙伴从MySQL Network中获得利益,比如较低的价格.

I won't go into the definitions of "linking" or "distribution" here. We follow what the GNU General Public License text and the FSF (Free Software Foundation, the people who wrote the GPL license) say about this (Frequently Asked Questions about the GNU GPL). Lawyers also have (varying!) opinions on this. If you are uncertain but don't want to pay a lawyer, please contact MySQL.

在这里我不想进一步定义"连接"或"分发".我们遵守GNU通用公共许可以及FSF(自由软件基金会的奠基者,他写的GPl许可)所阐述的(GNU GPL FAQ部分).我们的律师在也已经确定这点了.如果你还不确定,又不愿意请律师,请联系MySQL.



KimSeong Loh wrote:
> The article listed some possibilities for Developers.
>
> Case 4: Does "link with the MySQL server" means using MySQL server in embedded mode only or
> does it include using the client libraries to connect to a MySQL database server through TCP/IP or
> other protocol?
> For example: a java application using Connector/J or an application using ODBC.

>那篇文章列出了适用于开发者的一些可能性.
>情况4: "和MySQL服务器连接"是否指只是嵌入式的MySQL服务器或者是否包括使用客户端库通过TCP/IP或其他协议连接到MySQL数据库服务器吗?
>例如,一个使用Connector/J连接的java应用软件,或者使用ODBC的应用软件.

It is about linking with MySQL code.
It definitely applies to libmysqld (the embedded server), as the server is GPL.
It also applies to the libmysqlclient (the client library), in case the application is not open source; the client lib is GPL, but
has the licensing exception to allow other open source licensed apps to link with it too.

这主要是关于和MySQL源代码的连接.
它显然适用于 libmysqld(嵌入的服务器),因为服务器是GPL的.
如果应用软件不是开源的话,它也适用于 libmysqlclient(客户端库);如果客户端库是GPL的,但是有例外的许可允许其他开源的许可下的应用软件也可以连接它.

> Case 5: Certifying the application for use with MySQL Network.
> Does it mean distributing a certified application (non-GPL) do not need a commercial license to use
> the MySQL client library or drivers such as Connector/J or MyODBC?

>情况5: 让应用软件通过MySQL Network的认证.
>是否意味着如果分发应用软件(非GPL)时,就无需购买一个商业许可才能使用MySQL客户端库或者类似 Connector/J 及 MyODBC 那样的驱动?

Certified apps have nothing to do with commercial licenses as such.
It is about certifying that the app works with the certified server. This allows the app vendor to specify a known suitable
environment for the application, and provide support based on that.

让应用软件通过MySQL Network认证跟是否需要商业许可没有任何关系.
这是关于让你的认证应用软件和认证服务器一起工作.它允许应用软件销售商为软件指定一个更合适的环境,并且基于此提供支持.

> What about cases where the developers create custom applications (non open source) for each
> customers?
> In the case of distributing a php application (non open source) which connects to a MySQL database
> through php mysql api, does this falls under case 3, case 4 or case 5? Definitely not case 1 and 2.

>如果是开发者为不同的客户定制应用软件(非开源),这种情况该怎么办?
>如果把一个通过php mysql api连接到MySQL数据库的php应用软件分发了(非开源),那么是对应哪一种情况呢?第3,第4,还是第5种?显然不会是第1,2种.

Again, it primarily comes down to what requirements an application builder has.
It makes sense to be a MySQL partner for MySQL Network, so you have those resources available, the exposure on the MySQL web site, and providing the known tested environment to users.

再说一次,这主要回归到应用软件创建者的要求.
这主要是对MySQL Network的合作伙伴才有意义,所以你才有这些可用资源,MySQL网站上那些公开的资源,以及为用户提供已知的测试环境.

We could debate the (sometimes murky) legal bottom line, but that's not it's really about.
MySQL Network for end users, and network/oem partnerships for developers, offers an environment that provides real value for
all those involved. It's also very affordable.
Inside any of these offers, licensing effectively becomes a non-issue. So why waste time on it?

我们来讨论一下合法的底线(有时候是晦涩,不明确的),不过这不是真正相关的问题.
MySQL Network为终端用户,并且网络/OEM合作伙伴为开发者,提供了一个包括真正价值的环境.
基于以上各种因素,许可证的有效性已经不是问题了,为什么还要浪费时间呢?

注:由于本人的水平有限及对MySQL License理解存在一定局限,翻译可能有误,敬请指出,谢谢!








安装,启动与卸载Mysql系统服务(MYSQL常见问题)
作者:love感冒 日期:2006-05-11
字体大小: 小 中 大
将Mysql添加到Windows系统服务中:
1.、 安装服务。
在Windows2000下,安装完成后,并没有把MySQL安装成服务,我们必须执行下面的语句把MySQL注册为服务:installdir\mysql\bin\mysqld-nt –-install。
Windows98下没有服务的概念,所以不用安装服务。
2.、 启动服务
在Windows2000下,安装服务后可以启动MySQL服务:net start mysql。
在Windows98下,可以用下面的命令启动服务:c:\mysql\bin\mysqld,服务启动后在后台运行,并没有界面。
3.、 停止服务
在Windows2000下,可以通过下面的命令停止MySQL服务:net stop mysql。
在Windows98下,可以通过下面命令停止服务:C:\> C:\mysql\bin\mysqladmin -u root shutdown
4、 卸载服务
可以通过下面的命令卸载MySQL服务:installdir\mysql\bin\mysqld-nt –-remove。
    经过上面的安装就可以使用了,可以把我们系统空的数据库内建到mySQL数据目录即可,缺省数据库目录在installdir\mysql\data。
    访问MySQL数据库可以通过dbExpress组件,dbExpress组件是一组高效的数据库访问组件,只要改变连接串,我们就可以直接把数据源连接到MSSQLServer等数据库。

安装与卸载windows系统服务有专门软件,如果需要,mail to me:wangyihust@163.com

 

删除了原来的mysql4.1系统服务后,下载了一个5.0的non-install版本,将其添加到windows系统服务后,为什么无法启动?-1056错误

1.报错:Can't find messagefile 'F:\Program Files\mysql\share\english\errmsg.sys'


原因:原来的4.1版本安装在F:\Program Files\mysql目录;而现在的5.0版本在F:\database目录

解决方法:在c:\winnt\目录下找到my.ini文件,修改或删除之

2.报错:ready for connections.
Version: '5.0.21-community-nt'  socket: ''  port: 3306  MySQL Community Edition (GPL)

原因:socket为空,没有配置mysql;或者端口已经占用

解决方法: \mysql\bin目录下运行MySQLInstanceConfig.exe配置mysql实例



如何更改Win2000服务MySQL属性中的可执行文件路径!

开始时在D盘装了MySQL,后来卸载后,格式化D盘,再次安装,路径与原路径不同,不能通过“net start mysql”启动。查看win2000服务中MYsql的属性,可执行文件路径在位于D盘。现在怎么样更改,或者从服务项去掉Mysql?

注册表里HKEY_LOCAL_MECHINE---SYSTEM ---CurrentControlSet里


启动MYSQL服务时出错的几种解决方法

1
安装MYSQL后更改了ROOT的密码后用
net startmysql
启动时我就遇到了这样的问题.使用以下命令后
c:\mysql\bin\mysqladmin-u root -p shutdown
再net start mysql就没有这个错误提示了!


*************
2
MySQL的1067错误 
Q:我的Mysql碰到了 1067 错误

错误信息为:
A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.

A:在我的机上的解决办法是:
修改%windir%\my.ini,增加
[mysqld]
#设置basedir指向mysql的安装路径
basedir=D:\Program\Tools\mysql
datadir=D:\Program\Tools\mysql\data


*************
3
已经弄好了!!!
好像是这样……
mysql_install_db脚本只是在初次安装时才需要运行一次,之后就不用再运行了,不知道是
不是这么回事.我把mysql.server拷贝至/etc/rc.d/init.d/中,运行chkconfig mysql.ser
ver,至此mysql服务器每次开机自动启动,只要设置好PATH,在命令行上输入mysql就一切搞
定!
看来摸索的过程实在是痛苦啊,这已经折磨我好几天了……

*************
4
问:我的Mysql碰到了 1067 错误

错误信息为:

A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.

答:
解决办法:

1.检查你的Mysql目录有没有给系统的System用户权限。
2.删除掉你的 %WINDOWS%/my.ini 文件。
3.检查你的 c:/my.cnf 文件配置是否正确。


*************
5
【☆☆☆ MySql概要说明 ☆☆☆】 
MySql的默认安装目录是c:mysql,安装结束后没有任何提示信息说安装结束,请点Finish
按钮之类的话,直接就退出了。如果需要安装到其他目录,建议先安装到c:mysql,然后再
整个目录move到自己希望的地方,例如移动到d:mysql 之后,需要编辑 d:mysqlmy-examp
le.cnf (*.cnf的文件在Windows 2000中会被注册成为 SpeedDial文件,在资源管理器中
无法操作,要用命令行来启动notepad编辑,例如运行notepadd:mysqlmy-example.cnf ,
但是这个文件是UNIX系统下的文本文件格式,在notepad中不能正确换行,可以用write打
开编辑, 
或者用write打开后保存一次,再用notepad就可以编辑了。)找到basedir一行,去掉前面
的“#”号注释,将后面的路径改为移动后的目录(目录分隔符要用斜线而不是反斜线),
然后另存为:c:my.cnf 
用服务方式启动的MySql如果用 net stop mysql 来停止,会得到一条 出错消息,例如:
 
    C:>net stop mysql 
    MySql 服务正在停止. 
    系统出错。 
    系统发生 1067 错误。 
    进程意外终止。 
    MySql 服务已成功停止。 
这没有关系,MySql确实已经停止了。但是假如不希望看到任何出错消息 
的话,可以用以下的命令来停止: 
    C:>mysqlbinmysqladmin -u root shutdown 
如果没有任何提示信息,说明MySql已经成功停止了。 
需要说明的是MySql虽然号称安装简单,易于使用,但是这毕竟是基于SQL的数据库管理系
统,所以如果不是对SQL十分精通的话恐怕也不能拿它来做什么

**************
6
mysql服务无法启动的解决方法
mysql服务无法启动

我的操作系统是 win xp
无论安装何版本的mysql,在管理工具的服务中启动mysql服务时都会在中途报错
内容为:在 本地计算机 无法启动mysql服务 错误1067:进程意外中止

经过多方求教,得解决方法如下

查找系统(后来验证应该为windows目录)目录下的my.ini文件,编辑内容(如果没有该文件
,则新建一个),至少包含basedir,datadir这两个基本的配置。
[mysqld]
# set basedir to installation path, e.g., c:/mysql
# 设置为MYSQL的安装目录
basedir=D:/www/WebServer/MySQL
# set datadir to location of data directory,
# e.g., c:/mysql/data or d:/mydata/data
# 设置为MYSQL的数据目录
datadir=D:/www/WebServer/MySQL/data

另外,要主意
[WinMySQLadmin]
Server=D:/www/WebServer/MySQL/bin/mysqld-nt.exe
user=root
password=xxxxxxxx
#以上是设置WinMySQLadmin的配置
[Client]
user=root
password=xxxxxxxx

hehe~  解决了

**************
7
刚刚弄好Mysql 『关键字 1067错误』 
比较郁闷,竟然没有想到安装个Mysql也会出错,错误代码是1067  安装卸载了好几次,就
是不行,而且把一些禁用了的服务都打开了,但是还是不行。最后我是这样解决的:

在C:\windows里找一找my.ini 然后删除 然后再启动winmysqladmin.exe界面配置mysql,
保存my.ini就可以了 启动mysql试试  呵呵 

 

***************
8
mysql 错误 1067: 进程意外终止
这个问题困扰了一个早晨,非常郁闷!以前我在装mysql的时候从来没有遇到过,可是现在
庄这个高版本的就有问题了,我换我装过的低版本的还是一样的问题(最关键的是操作系
统都是一样的)。在windows2000的服务里面启动mysql服务可是总是弹出“错误 1067: 进
程意外终止”! 

我感觉问题在配置文件,于是就重新写了my.ini,启动还是一样的效果,我在google上查
找无果,崩溃状态!就在此时眼前一亮,一位高人的指点是我豁然开朗,你的ini文件有否
放到windows目录下,我从个人目录的windows目录下,将其拷贝到系统windows目录下,启
动服务,ok!!! 

我实在是不满足,为什么有不同呢,我的另外一台机子上装的是4.0.18的版本,它的my.i
ni就是放在用户目录下的windows目录下的,而且也运行正常,我现在有点迷惘,人往往在
解决了问题以后很少去思考,所以我现在有点想放弃的感觉,如果现在不会得到答案我想
这个在去思考解决基本上是不可能了:) 




1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
1235:MySQL版本过低,不具有本功能。


MySQL性能设置
公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可能指望 MySQL 默认的系统参数能够让 MySQL运行得非常顺畅。

  通过在网络上查找资料和自己的尝试,我认为以下系统参数是比较关键的:

(1)、back_log:
  要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
  back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
  当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(2)、interactive_timeout:
  服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。

(3)、key_buffer_size:
  索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为 402649088(400MB)。

(4)、max_connections:
  允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 [color=Red]链接过多,请联系空间商[/color] 错误。 默认数值是100,我把它改为1024 。

(5)、record_buffer:
  每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)

(6)、sort_buffer:
  每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。

(7)、table_cache:
  为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size:
  可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(10)、wait_timeout:
  服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

 

优化参数:http://www.databasejournal.com/features/mysql/article.php/10897_1402311_2

注:参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作,上面的结果也仅仅是我的一些看法,你可以根据你自己主机的硬件情况(特别是内存大小)进一步修改。


从sql导出到mysql的方法很多,现介绍一种无需编程,直接利用sql和mysql里的图形界面进行导入导出的简单方法。
  
   前提是已经安装了sqlserver客户端和mysql的图形界面管理工具phpmyadmin。
  
   在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择;然后新建sqlserver 注册,进行对sqlserver的连接。准备妥当后,下面就开始了:
  
   首先打开数据转换服务,新建包,打开DTS界面,在连接中选择数据源进行配置。再选择将要转换到的目的文件,这里我选的 Textfile(destination),选择好文件的存放位置之后,我们来新建一个任务。这里我们只选择转换数据任务,将带有“选择源连接”“选择目的连接”的鼠标分别选中数据源和目的之后,我们对新生成的连接进行定义,在其属性中将源,目的,转换依次定义。
  
   执行任务,提示成功。保存任务。然后在新建的任务上导出数据,有向导提示,其中一项选择“从源数据库复制表和视图”。

   这一步已经把数据导出到目的文件中。
  
  下一步在mysql中新建表,与将要导入的结构保持一致时,直接选取“从文本文件中提取数据,插入到数据表:”,将选项添好后,“发送”就可以了,浏览一下,数据已导入了。若要导入的表已经存在,且属性名也不同,这时就先建一个与要导入的数据相同结构的表并导入数据(按刚才的进行就可以了),然后在 mysql中导出“数据和结构”,得到sql语句,将其在文本文件中编辑,利用文本编辑器的替换功能,将表名修改,列名加入,最后将其粘贴在要导入表的执行sql语句的地方,执行一下,数据便导入了。
  
   若过程中出现错误,请仔细检查配置的选项,确保正确。

转载于:https://www.cnblogs.com/codingking/p/3401974.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL连接过多的情况有多种可能性。常见的情况包括没有正确关闭连接,导致连接数不断增加,当连接数达到最大限制时,会出现"Too many connections"错误。另外,在某些情况下,MySQL的默认最大连接可能会被占用,导致无法通过登录MySQL来调整参数来处理这个错误。 要解决此问题,可以采取以下方法: 1. 检查代码中的mysql_connect和mysql_close函数是否正确使用。确保在每次使用完数据库连接后都调用了mysql_close来关闭连接,释放资源。 2. 使用命令行工具或者通过查询系统变量的方式,确认当前MySQL的最大连接数设置。可以通过以下命令登录MySQL并查询最大连接数: ``` sudo mysql -uroot -p ``` 然后输入密码,如果出现"ERROR 1040 (00000): Too many connections"错误,说明当前连接数已经达到了最大限制。 3. 查看当前MySQL连接情况。可以通过以下方式查看当前连接数和已经建立的连接数: ``` SHOW STATUS LIKE 'Threads_connected'; ``` 这将显示当前连接数。如果连接过多,可以通过以下命令查看当前所有的连接: ``` SHOW PROCESSLIST; ``` 这将显示当前所有的连接和相关信息,包括连接的状态、用户和主机等。 4. 根据现有的连接数情况,评估是否需要增加最大连接数限制。如果连接数经常达到最大限制,可以考虑增加最大连接数。可以通过修改MySQL的配置文件my.cnf来设置最大连接数参数max_connections。找到该配置文件并添加或修改以下行: ``` max_connections = 200 ``` 然后重新启动MySQL服务。 需要注意的是,增加最大连接可能会对服务器资源造成负担,因此在增加前需要评估服务器的性能和资源使用情况。 综上所述,解决MySQL连接过多的问题,一方面需要检查代码中是否正确关闭连接,另一方面可以通过查询当前连接状态和最大连接数设置来评估并调整最大连接数限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值