不要依据errno的值来判断错误是否发生金沙js娱乐场官方网站,  上面列出的各种status命令

最后熟练使用这些工具,       在前面几章中讲到了常用的几个工具,那么也可以使用下面命令查看具体的System,Windows平台下的System Error,标注出错误代码的值对应的错误类型,不要依据errno的值来判断错误是否发生,  上面列出的各种status命令,若需要长期监控,指定密码,指定服务器IP或者域名

一.  perror 错误代码查看工具

           在mysql
的使用过程中,可能会出现各种各样的error。这些error有些是由于操作系统引起的,比如文件或者目录不存在等等,使用perror的作用就是解释这些错误代码的详细含义。 
perror 使用方法如下:

*       金沙js娱乐场官方网站 1
*

    例如:指定错误号30和60分别是指什么错误
      金沙js娱乐场官方网站 2
    在MYSQL系统出现故障或错误后,一般用户都会去看错误日志,而错误日志里一般都会发现这样的错误编号。这时我们就可以利用这个命令分析到底是哪里出问题了。

 

glibc_error reporting,glibc_error

  很多GNU
C库里的函数都会侦测并报告错误条件。我们的程序需要检测这些错误条件。比如:我们打开一个输入文件时需要判断该文件是否正确的打开。如果没有正确打开,我们需要打印错误或者采取其他正确的方式。为了利用这种错误报告机制,我们需要包含头文件errno.h

   status系列

mysql学习记录(二十四)–mysql相关工具

一、理论:
1.mysql:客户端连接工具
a.-u:指定用户名
b.-p:指定密码
c.-host:指定服务器IP或者域名
d.-P:指定连接端口
e.–default-character-set:客户端字符集选项
f.-e:执行选项
g.-E:将输出方式按照字段顺序显示
h.-f:强制执行sql
i.-v:显示更多信息
2.myisampack:myisam表压缩工具
3.mysqladmin:mysql管理工具
4.mysqlbinlog:日志管理工具
a.-d:指定数据库名称,只列出指定的数据库相关操作
b.-o:忽略掉日志中的前n行命令
c.-r:将输出的文本格式日志输出到指定文件
d.-s:显示简单格式,省略掉一些信息
e.–set-charset=char-name:在输出为文本格式时,在文件第一行上加上set
names char-nam(可用于装载数据)
f.–start-datetime=name:指定日期间隔内的所有日志
g.–start-position:指定位置间隔内的所有日志
5.mysqlcheck:MyISAM表维护工具
a.-c:检查表
b.-r:修复表
c.-a:分析表
d.-o:优化表
6.mysqldump:数据导出工具
a.-u:用户名
b.-p:密码
c.-h:服务器IP或者域名
d.-P:连接端口
e.–add-drop-database:每个数据库创建语句前加上drop database
f.–add-drop-table:在每个表创建语句前加上drop table
g.-n:不包含数据库的创建语句
h.-t:不包含数据表的创建语句
i.-d:不包含数据
j.–compact:不包含默认选项中的各种注释
7.mysqlhostcopy:MyISAM表热备份工具
8.mysqlimport:数据导入工具
9.mysqlshow:数据库对象查看工具
10.perror:错误代码查看工具

11.replace:文本替换工具

二、实践:

 

[email protected]:~$ mysql -uroot -p(密码) --default-character-set=utf8
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.5.44-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

mysql> show variables like 'char%';Ctrl-C -- exit!
Aborted
[email protected]:~$ mysql -uroot -p(密码) --default-character-set=gbk;
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.5.44-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | gbk                              |
| character_set_connection | gbk                              |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | gbk                              |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

mysql> Ctrl-C -- exit!
Aborted
[email protected]:~$ mysql -uroot -p(密码);
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 5.5.44-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use sakila;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

[email protected]:~$ mysql -uroot -p(密码) -e 'use sakila;select * from payment limit 5;';
+------------+-------------+----------+-----------+--------+---------------------+---------------------+
| payment_id | customer_id | staff_id | rental_id | amount | payment_date        | last_update         |
+------------+-------------+----------+-----------+--------+---------------------+---------------------+
|          1 |           1 |        1 |        76 |   2.99 | 2005-05-25 11:30:37 | 2006-02-15 22:12:30 |
|          2 |           1 |        1 |       573 |   0.99 | 2005-05-28 10:35:23 | 2006-02-15 22:12:30 |
|          3 |           1 |        1 |      1185 |   5.99 | 2005-06-15 00:54:12 | 2006-02-15 22:12:30 |
|          4 |           1 |        2 |      1422 |   0.99 | 2005-06-15 18:02:53 | 2006-02-15 22:12:30 |
|          5 |           1 |        2 |      1476 |   9.99 | 2005-06-15 21:08:46 | 2006-02-15 22:12:30 |
+------------+-------------+----------+-----------+--------+---------------------+---------------------+
[email protected]:~$ mysql -uroot -p(密码) -e 'use sakila;select * from payment limit 5;' -E;
*************************** 1. row ***************************
  payment_id: 1
 customer_id: 1
    staff_id: 1
   rental_id: 76
      amount: 2.99
payment_date: 2005-05-25 11:30:37
 last_update: 2006-02-15 22:12:30
*************************** 2. row ***************************
  payment_id: 2
 customer_id: 1
    staff_id: 1
   rental_id: 573
      amount: 0.99
payment_date: 2005-05-28 10:35:23
 last_update: 2006-02-15 22:12:30
*************************** 3. row ***************************
  payment_id: 3
 customer_id: 1
    staff_id: 1
   rental_id: 1185
      amount: 5.99
payment_date: 2005-06-15 00:54:12
 last_update: 2006-02-15 22:12:30
*************************** 4. row ***************************
  payment_id: 4
 customer_id: 1
    staff_id: 2
   rental_id: 1422
      amount: 0.99
payment_date: 2005-06-15 18:02:53
 last_update: 2006-02-15 22:12:30
*************************** 5. row ***************************
  payment_id: 5
 customer_id: 1
    staff_id: 2
   rental_id: 1476
      amount: 9.99
payment_date: 2005-06-15 21:08:46
 last_update: 2006-02-15 22:12:30
[email protected]:~$ cd ~/Downloads/
[email protected]:~/Downloads$ mkdir mysql
[email protected]:~/Downloads$ cd mysql/
[email protected]:~/Downloads/mysql$ vi a.sql;
(在此步添加了一些内容)
[email protected]:~/Downloads/mysql$ more a.sql;
insert into t2 values (1);
insert into t2 values (2222222222222222222222222);
insert into t2 values (3);
[email protected]:~/Downloads/mysql$ mysql -uroot -p(密码);
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.5.44-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test;
Database changed
mysql> create table t2(
    -> id int(11)
    -> ) engine = innodb charset = utf8;
Query OK, 0 rows affected (0.05 sec)

mysql> Ctrl-C -- exit!
Aborted
[email protected]:~/Downloads/mysql$ mysql -uroot -p(密码) test < a.sql;
ERROR 1054 (42S22) at line 2: Unknown column '2a' in 'field list'
[email protected]:~/Downloads/mysql$ mysql -uroot -p(密码) test -e 'select * from t2';
+------+
| id   |
+------+
|    1 |
+------+
[email protected]:~/Downloads/mysql$ mysql -uroot -p(密码) test -f < a.sql 
ERROR 1054 (42S22) at line 2: Unknown column '2a' in 'field list'
[email protected]:~/Downloads/mysql$ mysql -uroot -p(密码) test -e 'select * from t2';
+------+
| id   |
+------+
|    1 |
|    3 |
+------+
[email protected]:~/Downloads/mysql$ mysql -uroot -p(密码) test -f -v ~/test.txt;
[email protected]:/usr/local/mysql/bin$ cd ~/
[email protected]:~$ more ~/test.txt 
-- MySQL dump 10.13  Distrib 5.5.44, for Linux (x86_64)
--
-- Host: localhost    Database: test
-- ------------------------------------------------------
-- Server version 5.5.44-log

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `t2`
--

DROP TABLE IF EXISTS `t2`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `t2`
--

LOCK TABLES `t2` WRITE;
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
INSERT INTO `t2` VALUES (1),(3),(1),(3),(1),(2147483647),(3),(1),(2147483647),(3),(1),(2147483647),(3);
/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET [email protected]_TIME_ZONE */;

/*!40101 SET [email protected]_SQL_MODE */;
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email protected]_UNIQUE_CHECKS */;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
/*!40111 SET [email protected]_SQL_NOTES */;

-- Dump completed on 2015-11-06  5:15:01
[email protected]:/usr/local/mysql/bin$ mysqldump -uroot -p(密码) --compact -d test t2 > ~/Downloads//t2.txt
[email protected]:/usr/local/mysql/bin$ more ~/Downloads/t2.txt;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
[email protected]:/usr/local/mysql/bin$ mysqldump -uroot -p(密码) --compact -c test t2 > ~/Downloads/t2c.txt
[email protected]:/usr/local/mysql/bin$ more ~/Downloads/t2c.txt
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `t2` (`id`) VALUES (1),(3),(1),(3),(1),(2147483647),(3),(1),(2147483647),(3),(1),(2147483647),(3);

[email protected]:/usr/local/mysql/bin$ mysqld --verbose --help | grep 'default-character-set' | grep -v name ;
151106  5:18:52 [Warning] option 'table_definition_cache': unsigned value 100 adjusted to 400
151106  5:18:52 [Note] mysqld (mysqld 5.5.44-log) starting as process 74255 ...
151106  5:18:52 [Warning] Can't create test file /usr/local/mysql/data/ubuntu.lower-test
151106  5:18:52 [Warning] Can't create test file /usr/local/mysql/data/ubuntu.lower-test
151106  5:18:52 [Warning] One can only use the --user switch if running as root

mysqld: File '/usr/local/mysql/data/mysql-bin.index' not found (Errcode: 13)
151106  5:18:52 [ERROR] Aborting

[email protected]:/usr/local/mysql/bin$ mysqldump -uroot -p(密码) --compact test t2 > ~/Downloads/testA.txt
[email protected]:/usr/local/mysql/bin$ more ~/Downloads/testA.txt 
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `t2` VALUES (1),(3),(1),(3),(1),(2147483647),(3),(1),(2147483647),(3),(1),(2147483647),(3);
[email protected]:/usr/local/mysql/bin$ mysqldump -uroot -p(密码) --compact --default-character-set=latin1 test t2 > ~/Downloads/testA.txt
[email protected]:/usr/local/mysql/bin$ more ~/Downloads/testA.txt 
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `t2` VALUES (1),(3),(1),(3),(1),(2147483647),(3),(1),(2147483647),(3),(1),(2147483647),(3);

[email protected]:/usr/local/mysql/bin$ mysqlshow -uroot -p(密码);
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| test               |
| test1              |
+--------------------+
[email protected]:/usr/local/mysql/bin$ mysqlshow -uroot -p(密码) --count;
+--------------------+--------+--------------+
|     Databases      | Tables |  Total Rows  |
+--------------------+--------+--------------+
| information_schema |     40 |        20863 |
| mysql              |     24 |         2214 |
| performance_schema |     17 |           14 |
| sakila             |     33 |        50132 |
| test               |      1 |           13 |
| test1              |     20 |           67 |
+--------------------+--------+--------------+
6 rows in set.
[email protected]:/usr/local/mysql/bin$ mysqlshow -uroot -p(密码) test --count;
Database: test
+--------+----------+------------+
| Tables | Columns  | Total Rows |
+--------+----------+------------+
| t2     |        1 |         13 |
+--------+----------+------------+
1 row in set.

[email protected]:/usr/local/mysql/bin$ mysqlshow -uroot -p(密码) test a --count;
mysqlshow: Cannot get record count for db: test, table: a: Table 'test.a' doesn't exist
[email protected]:~/Downloads$ more t2c.txt
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `t2` (`id`) VALUES (1),(3),(1),(3),(1),(2147483647),(3),(1),(2147483647),(3),(1),(2147483647),(3);
[email protected]:~/Downloads$ mysqlshow
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| test               |
+--------------------+
[email protected]:~/Downloads$ mysqlshow -uroot -p(密码) test t2 --count;
Database: test  Table: t2  Rows: 13
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type    | Collation | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| id    | int(11) |           | YES  |     |         |       | select,insert,update,references |         |
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
[email protected]:~/Downloads$ mysql -uroot -p(密码);
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 88
Server version: 5.5.44-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use sakila;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
[email protected]:~/Downloads$ mysqlshow -uroot -p(密码) test t2 -k;
Database: test  Table: t2
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type    | Collation | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| id    | int(11) |           | YES  |     |         |       | select,insert,update,references |         |
+-------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
Table has no keys
[email protected]:~/Downloads$ mysqlshow -uroot -p(密码) sakila actor -k;
Database: sakila  Table: actor
+-------------+----------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+---------+
| Field       | Type                 | Collation       | Null | Key | Default           | Extra                       | Privileges                      | Comment |
+-------------+----------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+---------+
| actor_id    | smallint(5) unsigned |                 | NO   | PRI |                   | auto_increment              | select,insert,update,references |         |
| first_name  | varchar(45)          | utf8_general_ci | NO   |     |                   |                             | select,insert,update,references |         |
| last_name   | varchar(45)          | utf8_general_ci | NO   | MUL |                   |                             | select,insert,update,references |         |
| last_update | timestamp            |                 | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | select,insert,update,references |         |
+-------------+----------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+---------+
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| actor | 0          | PRIMARY             | 1            | actor_id    | A         | 201         |          |        |      | BTREE      |         |               |
| actor | 1          | idx_actor_last_name | 1            | last_name   | A         | 201         |          |        |      | BTREE      |         |               |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

一、理论:
1.mysql:客户端连接工具 a.-u:指定用户名 b.-p:指定密码
c.-host:指定服务器IP或者域名 d.-P:指…

二 总结

       在前面几章中讲到了常用的几个工具,其实还有像replace
(sql文本字符替换工具),这个以后用的时候在查看说明。
mysqlimport(数据导入工具)后续会在讲到。mysqlhotcopy(MyISAM表热备份工具)这个只针对MyISAM存储引擎的表,就不在说明。最后熟练使用这些工具,将会带来很大便利。

 在MySQL数据库的维护过程中,我们有时候会在MySQL的错误日志文件中看到一些关于Operating
system
error的错误信息,例如在MySQL的错误日志里面,有时候会看到关于

检测错误:

  很多库函数都会返回一个特殊的值来显示函数运行出错。常见的特殊值有:-1、空指针、EOF常量。但是这些返回值只能告诉你有错误产生,但不会告诉你错误是什么。如果你想知道错误是什么,就得靠错误代码,错误代码存储在变量errno中(在errno.h中有声明)

  errno变量包含了系统错误代码,其类型是volatile。该类型意味着其可以突然被异步线程改变,编译器从不假设其值。如果你在写信号处理程序应当保存改变量的值并恢复其值。

  errno的初始值为0,遇到错误时,errno绝无可能为0。但没有错误的时候,errno也不一定为0(库函数在成功运行时并不会修改errno的值)。所以,不要依据errno的值来判断错误是否发生。正确的做法是为每一个函数做好文档,标注出错误代码的值对应的错误类型。这样调用失败时,你可以通过检查errno获取错误代码,然后查询函数文档获取错误详情。如果你想获取某一库函数的错误代码,最好再次之前设置errno为0(或许你还想先保存以下errno的值,然后便于恢复该值)。

  每一个错误代码都有一个以E开头紧跟大写字母或数字的符号名,实际为定义在errno.h中的宏。当然不是所有的宏都定义在一个errno.h中(详细的可以自己翻一翻头文件,注意不仅仅只有一个errno.h,多个errno.h共同定义了全部的宏)

  错误代码的值一般为正数并且都不相同,但也有一个例外:EWORLDBLOCK和EAGAIN的错误代码是一样的。除了EWORLDBLOCK和EAGAIN,你可以使用switch语句来判断错误代码。但你不应该依赖于此,你唯一可以相信的就是文档。

  除了GNU/Hurd系统,几乎所有的系统调用被传入一个无效指针时都会返回EFAULT。所以呢,glibc的函数库说明文档中往往会省略对EFAULT的解释。

  大多数的错误代码宏名都显而易见的好懂,如果实在不知其意可以查看手册或者

~# man errno

这里简单提几个宏:

Macro: int EDOM
    域错误,可以理解为定义域错误。主要用在数学函数中。如果数学函数的一个参数值不在函数定义域中,则会将errno设置为EDOM

Macro: int ERANGE
    范围错误,与上面的EDOM恰好相反。EDOM是定义域的话,ERANGER就是值域了。也多用于数学函数中。如果数学函数返回值超过了约定的返回,则会将errno设置为ERANGE

Macro: int EAGAIN
    资源暂时不可获得。这种错误可能是随机的,你再次运行的时候便好了。。。EWOULDBLOCK是EAGAIN的一个别名。

 

  Mysql提供了一系列命令来获取数据库的运行状态,其中最常用的主要有show
status;show innodb status;show processlist; show mutex
status。通过这些命令我们可以了解到数据库和存储引擎io,内存,锁等详细信息。

 

错误消息:

  我们知道错误代码,但总觉得查文档不方便。幸好库文件给我们提供了错误消息报告函数。这些函数可以报告一个具有说明性的错误消息。部分消息报告函数我们可以自己定义消息格式。

  函数strerror和perror为每一个错误代码都提供了一个标准的错误消息。而变量program_invocation_short_name则可以方便获取程序的名字,告诉我们哪个程序出错。

几个函数原型:

#include <string.h>
char * strerror(int errnum);
char *strerror_r(int errnum, char *buf, size_t n);

说明:  strerror和strerror_r两个函数差不多。区别在于安全性,官方文档对strerror的注释是MT-Unsafe
race:strerror,而strerror_r则为MT-Safe。strerror返回一个静态申请的字符串缓冲区,该缓冲区被所有线程共享。而strerror_r返回的是一个私有副本,并不被其他线程共享。另外这两个函数都有可能造成内存溢出(静态申请的缓冲区)。尽管strerror_r可以指定字符串长度,但这长度是char
*buf的。这函数有两个返回值,一个使用reurn返回,还有一个是char
*buf。return返回的依旧是一个静态缓冲区。

 

#include<stdio.h>
void perror(const char *message);

说明:  perror将error
message打印到标准错误输出中。如果你传进的参数是一个空指针,perror会根据errno打印错误消息。如果char
*message非空,perror会将message当作错误消息的前缀输出。perror得立即调用,不然errno的值可能发生变化。

 

char *program_invocation_name; //等同于argv[0]
char *program_invocation_short_name //不包含目录名。

说明:  这两个变量的初始化工作由glibc库在还未调用main函数之前执行。所以在非GNU库中,这两个变量不起效果,在实际代码中我们需要定义_GNU_SOURCE宏,告诉编译器使用GNU库。

  以下两个函数在整个GNU project中使用非常广泛。

void error(int status, int errnum, const char *format, ...);
void error_at_line(int status, int errnum, const char *fname, unsigned int lineno, const char *format, ...);

说明:  这两个函数的返回和status有关,如果status是0,则正常格式化打印错误消息。全局变量error_message_count也会做自增操作。错误消息的格式如下:program_name:
format_string:
error_messager_for_errno\n。如果status非零,这两个函数将调用exit
status,即以状态status退出(不会返回)。关于program_name:全局变量error_print_progname指向的函数决定了program_name的值。error_at_line函数有点特别:多了fname,lineno两个参数。错误消息格式如下:program_name:fname:lineno format_string:
error_mesage_for_errno\n。如果全局变量error_one_per_line被设置为非零值,每一行只会打印一个错误消息。

  除了以上的错误消息函数,我们还有以下几个:这几个函数主要用在BSD系统中,定义在头文件err.h中,在gnu系统中不推荐使用。

void warn(const char *format, ...)
void vwarn(const char *format, va_list ap)
void warnx(const char *format, ...)
void vwarnx(const char *format, va_list ap)
void err(int status, const char *format, ...)
void verr(int status, const char *format, va_list ap)
void errx(int status, const char *format, ...)
void verrx(int status, const char *format, va_list ap)

各位看官自行查看手册吧。just be a man!!!

reporting,glibc_error 很多GNU
C库里的函数都会侦测并报告错误条件。我们的程序需要检测这些错误条件。比如:我们打开一个输入文…

  参考资料:

InnoDB:
Operating system error number 0.

  监控工具――Mysqlreport

InnoDB:
Check that your OS and file system support files of this size.

  上面列出的各种status命令,能够方便地实时查看。
若需要长期监控,则需要工具对这些信息进行整理汇总。目前常见的mysql监控有mysqlreport、mysqlsla、innotop,还有公司内部开发的Mysql-mon。其中mysqlreport和mysql-mon属于状态统计类型。

InnoDB:
Check also that the disk is not full or a disk quota exceeded.

  数据来源:

 

  [mysql]show global status

 

  [mysql]Show Global Variables

InnoDB:
Operating system error number 5.

  [mysql]Show Full Processlist

…………………………………….

  [系统] vmstat/iostat/mpstat

 

  由于上述参数复杂,因此监控工具抽取重要的信息,以方便查看的方式显示,并记录都在日志中。

 那么这些System
Error
Code在Linux下分别代表什么意思呢?其实如果遇到错误日志里有这些对应的代码,使用MySQL自带的命令工具perror查看一下具体信息即可。非常简单方便。

  Mysqlreport是一款支持周期生成报表的工具。

 

  从mysqlreport报表中能够得到的信息有分为一下几类:

[root@DB-Server
~]# perror 2;

  1、总体数据:包括读写总请求、接收/发送总数据量、慢查询次数

OS
error code  
2:  No
such file or directory

  2、DMS(数据操作描述):各种数据操作分布(select、update等)、查询和排序次数分布

[root@DB-Server
~]# perror 3;

  3、Cache:包括cache命中率、cache操作次数及比例(查询命中率、插入次数、修改次数的比例)