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 &

Too many connections错误

意味着已经有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: ’[email protected]_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(至今)没有数据库复制,但是有一些如何实现的信息。

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

数据库备份

为了得到一个一致的备份,在相关的表上做一个LOCK TABLES。你只需一个读锁定;当你在数据库目录中做文件的一个拷贝时,这允许其他线程继续查询该表。如果你想要做一个SQL级的备份,你可以SELECT INTO OUTFILE。

备份一个数据库的另一个方法是使用mysqldump程序:

为你的数据库做一个完整的备份:

shell> mysqldump –tab=/path/to/some/dir –opt –full
你也可以简单地拷贝所有的表文件(“*.frm”、“*.MYD”和“*.MYI”文件),只要服务器不在更新任何东西。
停止mysqld如果它正在运行,然后以–log-update选项启动它。你将得到一个名为“hostname.n”形式的日志文件,
这里n是随着你每次执行mysqladmin refresh或mysqladmin flush-logs、FLUSH
LOGS语句、或重启服务器而递增的一个数字。这些日志文件向你提供了在你执行mysqldump处后面进行的复制数据库改变的所需信息。

如果你必须恢复一些东西,尝试首先用myisamchk -r恢复你的表。这应该处理所有情况的99.9%。如果myisamchk失败,尝试下列过程:

恢复原来的mysqldump备份。

执行下列命令以再次运行更新日志中的更改:

shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
ls被用来以正确的顺序得到所有的日志文件。
你也可以与SELECT * INTO OUTFILE ‘file_name’ FROM tbl_name做有选择的备份并且用LOAD DATA
INFILE ‘file_name’ REPLACE …恢复。为了避免重复记录,在表中你需要一个PRIMARY
KEY或UNIQUE键。当在唯一键值上一个新记录与一个老记录重复时,REPLACE关键词使得老记录用一个新记录替代。
{mosliteadsense4joomla ad_align=”center”}作者: tom
主题:  MySQL常见问题集锦
时间: 2006-9-13 周三, 下午11:08 (GMT

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 &

Too many connections错误

意味着已经有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: ’[email protected]_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(至今)没有数据库复制,但是有一些如何实现的信息。

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

数据库备份

为了得到一个一致的备份,在相关的表上做一个LOCK TABLES。你只需一个读锁定;当你在数据库目录中做文件的一个拷贝时,这允许其他线程继续查询该表。如果你想要做一个SQL级的备份,你可以SELECT INTO OUTFILE。

备份一个数据库的另一个方法是使用mysqldump程序:

为你的数据库做一个完整的备份:

shell> mysqldump –tab=/path/to/some/dir –opt –full
你也可以简单地拷贝所有的表文件(“*.frm”、“*.MYD”和“*.MYI”文件),只要服务器不在更新任何东西。
停止mysqld如果它正在运行,然后以–log-update选项启动它。你将得到一个名为“hostname.n”形式的日志文件,
这里n是随着你每次执行mysqladmin refresh或mysqladmin flush-logs、FLUSH
LOGS语句、或重启服务器而递增的一个数字。这些日志文件向你提供了在你执行mysqldump处后面进行的复制数据库改变的所需信息。

如果你必须恢复一些东西,尝试首先用myisamchk -r恢复你的表。这应该处理所有情况的99.9%。如果myisamchk失败,尝试下列过程:

恢复原来的mysqldump备份。

执行下列命令以再次运行更新日志中的更改:

shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
ls被用来以正确的顺序得到所有的日志文件。
你也可以与SELECT * INTO OUTFILE ‘file_name’ FROM tbl_name做有选择的备份并且用LOAD DATA
INFILE ‘file_name’ REPLACE …恢复。为了避免重复记录,在表中你需要一个PRIMARY
KEY或UNIQUE键。当在唯一键值上一个新记录与一个老记录重复时,REPLACE关键词使得老记录用一个新记录替代。

时间: 2024-10-05 04:45:10

mysql常见问题集锦的相关文章

20160924-2——mysql常见问题集锦

一.数据类型相关问题 1.varchar(N)占用多少空间 (1)varchar(N)里的N是字符数,而不是字节数: (2)字符类型(varchar text blob等)空间=字符实际长度+字段长度: (3)varchar(N)占用的空间: 如果是lantin1字符集时,最大空间=1N+(1 or 2)bytes,因为lantin1的1个字符占用1个字节,后面加的1或2bytes是用来表示字段长度的,当可能超过255个字节时,要2个bytes来表示字段长度: 如果是utf8字符集时,最大空间=

Android Studio使用心得 - 常见问题集锦

整理了一些这段时间遇到的常见问题,希望对各位猿们有帮助...如果觉得有用就点个赞哦 问题一: Error:(26, 9) Attribute [email protected] value=(@drawable/logo) from AndroidManifest.xml:26:9 Error:(28, 9) Attribute [email protected] value=(@style/ThemeActionBar) from AndroidManifest.xml:28:9 is als

Word 2003中有关分栏的常见问题集锦

我把自己备课和讲课过程中遇到的有关分栏的诸多问题集中于此,有兴趣的朋友可以一起讨论.如果你提出相关的问题,我会尽力给出回答. 1 分栏符是否可以当软分页符使用? 2 同一页面上能否实现不同的分栏块? 3 能否实现跨页分栏? 4 能否实现栏中栏? 5 分栏与打字的先后顺序?先选文字后分栏和先分栏后打字. 6 分栏后的段落调整技巧有哪些? 7 如何给纵向文字分栏? 8 去除分栏的哪些方法? 9 回车符在分栏中的影响? 10 文本框里的文字能否使用分栏? 11 表格里的文字能否使用分栏? 12 能否实

常见问题集锦

常见问题集锦 1.重复调用2次loadView和viewDidLoad 2.按钮无法点击 [email protected]和[email protected] 4.启动app时全屏显示Default.png 1.重复调用2次loadView和viewDidLoad 最好不要在UIViewController的loadView方法中改变状态栏的可视性(比如状态栏由显示变为隐藏.或者由隐藏变为显示),因为会导致重复调用2次loadView和viewDidLoad方法 假设状态栏本来是处于显示状态的

NHibernate+MySql常见问题

版本: NHibernate :NHibernate 4.0.1GA MySql:MySql 5.0.1 常见问题一: "NHibernate.HibernateException"类型的未经处理的异常在 NHibernate.dll 中发生 其他信息: Could not create the driver from NHibernate.Driver.MySqlDataDriver. 解决方案: 把MySql.Data.dll程序集引入到项目中,这个问题就解决了.原因在于找不到驱动

MySQL常见问题概览

最近看了江承尧老师的<MySQL技术内幕:sql编程>,同时结合自己工作中遇到的一些问题,从工程性能以及MySQL本身实际应用出发,总结了一些通过子查询解决的常见问题 1  行号 MySQL数据库在行号方面的支持并不是十分友好,没有像其他数据库一样提供类似row_number解决方案 demo1:select  empid ,(select count(1) from sales AS t2 where  t2.empid<=t1.empid) as rownum from salas

mysql常见问题

一,指定需要mysql.sock文件 [[email protected] mysql-5.5.24]# mysql -uroot -pEnter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 解决方法: mysql -uroot -p -S /var/lib/mysql/mysql.sock 或者 ln -s /var/lib/mysq

MySQL常见问题和命令

问题: 1.centos MySQL启动失败:关闭selinux, vi /etc/selinux/config, 设置SELINUX=disabled,重启电脑: 命令: 停止.启动mysql服务器:/etc/init.d/mysqld {start|stop|status|restart|condrestart|try-restart|reload|force-reload} DDL(Data Definition Languages) 一.数据库相关 创建数据库:            

Django Python MySql 问题集锦

问题 1: raise ImproperlyConfigured("settings.DATABASES is improperly configured. " django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more deta