文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MySQL 5.1参考手册 :: 8. 客户端和实用工具程序(3)

MySQL 5.1参考手册 :: 8. 客户端和实用工具程序(3)

时间:2008-05-11  来源:sdccf

8.3.4. mysql技巧

8.3.4.1. 垂直显示查询结果 8.3.4.2. 使用--safe-updates选项 8.3.4.3. 禁用mysql自动连接

该节描述了可以帮助你更有效使用mysql的一些技术。

8.3.4.1. 垂直显示查询结果

一些查询结果如果垂直显示而不用通常的水平表格式显示,则更容易读取。用\G而不用分号结束查询可以垂直显示查询。例如,包括新行的更长的文本值垂直输出时通常更容易读取:

mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: [email protected] mail_to: "Thimble Smith" <[email protected]> sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 

8.3.4.2. 使用--safe-updates选项

对于新手,有一个有用的启动选项--safe-updates(或--i-am-a-dummy,具有相同的效果)。当你已经发出一个DELETE FROM tbl_name语句但忘记了WHERE子句时很有用。通常情况,这样的语句从表中删除所有行。用--safe-updates,可以通过指定可以识别它们的键值只删除某些行。这样可以帮助防止事故。

若使用--safe-updates选项,mysql连接MySQL服务器时发出下面的语句:

SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000, SQL_MAX_JOIN_SIZE=1000000;

参见13.5.3节,“SET语法”。

SET语句有下面的效果:

·         不允许你执行UPDATE或DELETE语句,除非在WHERE子句中指定一个键值约束或提供一个LIMIT子句(或二者皆使用)。例如:

·                UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
·                 
·                UPDATE tbl_name SET not_key_column=val LIMIT 1;

·         所有大的SELECT结果自动限制到1,000行,除非语句包括一个LIMIT子句。

·         放弃可能需要检查1,000,000多行组合的多表SELECT语句。

要将限制指定为1,000和1,000,000之外的值,可以使用--select_limit和--max_join_size选项覆盖默认值:

shell> mysql --safe-updates --select_limit=500 --max_join_size=10000

8.3.4.3. 禁用mysql自动连接

如果mysql客户程序发送查询时断开与服务器的连接,它立即并自动尝试重新连接服务器并再次发送查询。然而,即使mysql重新连接成功,你的第1个连接也已经结束,并且以前的会话对象和设定值被丢失:包括临时表、自动提交模式,以及用户和会话变量。该行为很危险,如下面的例子所示,服务器将在你不知道的情况下关闭并重启:

mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)
 
mysql> INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: test
 
Query OK, 1 row affected (1.30 sec)
 
mysql> SELECT * FROM t;
+------+
| a    |
+------+
| NULL |
+------+
1 row in set (0.05 sec)

@a用户变量已经随连接丢失,并且重新连接后它也没有定义。如果有必要在连接断开时终止mysql并提示错误,你可以用--skip-reconnect选项启动mysql客户程序。

8.4. mysqlaccess:用于检查访问权限的客户端

mysqlaccess是Yves Carlier为MySQL分发提供的一个诊断工具。它检查访问权限的主机名、用户名和数据库组合。请注意 mysqlaccess检查只使用user、db和host表的访问。它不检查在tables_priv、columns_priv或procs_priv表中指定的表、列或者程序的权限。

调用mysqlaccess的方法:

shell> mysqlaccess [host_name [user_name [db_name]]] [options]

mysqlaccess理解下面的选项:

·         ---help,-?

显示帮助消息并退出。

·         --brief,-b

生成单行表格式的报告。

·         --commit

从临时表将新访问权限复制到原授权表。必须为新的权限刷新授权表以使其生效。(例如,执行mysqladmin RELOAD命令)。

·         --copy

从原授权表重载临时授权表。

·         --db=db_name,-d db_name

指定数据库名。

·         ---debug=N

指定调试级别。N可以为从0到3的一个整数。

·         --host=host_name,-h host_name

在访问权限中使用的主机名。

·         --howto

显示一些例子显示如何使用mysqlaccess。

·         --old_server

假定服务器是一个旧版本的MySQL服务器(MySQL 3.21之前),还不知道如何处理全WHERE子句。

·         --password[=password],-p[password]

当连接服务器时使用的密码。如果你在命令行中在--password或-p选项后面省略 密码值,将提示你输入密码。

·         --plan

显示将来发布的建议和思想。

·         --preview

更改临时授权表后显示权限的不同。

·         --relnotes

显示发布注解。

·         --rhost=host_name,-H host_name

连接给定主机的MySQL服务器。

·         --rollback

取消对临时授权表的最新的更改。

·         --spassword[=password],-P[password]

以super用户连接服务器时使用的密码。如果在命令行中在--password或-p选项后面省略了 密码值,将提示你输入密码。

·         --superuser=user_name,-U user_name

指定以super用户连接时的用户名。

·         --tables,-t

生成表格式的报告。

·         --user=user_name,-u user_name

在访问权限中使用的主机名。

·         --version,-v

显示版本信息并退出。

如果你的MySQL分发安装在某个非标准位置,必须进入mysqlaccess期望找到mysql客户的目录。编辑大约在18行处的mysqlaccess脚本。搜索类似下面的一行:

$MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable

将路径更改为mysql实际在系统中保存的位置。如果不这样做,当运行mysqlaccess时会发生Broken pipe错误。

8.5. mysqladmin:用于管理MySQL服务器的客户端

mysqladmin是一个执行管理操作的客户程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等等。

这样调用mysqladmin:

shell> mysqladmin [options] command [command-options] [command [command-options]] ...

mysqladmin支持下面的命令:

·         create db_name

创建一个名为db_name的新数据库。

·         debug

告诉服务器向错误日志写入调试信息。

·         drop db_name

删除名为db_nam的数据库和所有表。

·         extended-status

显示服务器状态变量及其值。

·         flush-hosts

刷新主机缓存中的所有信息。

·         flush-logs

刷新所有日志。

·         flush-privileges

重载授权表(类似reload)。

·         flush-status

清除状态变量。

·         flush-tables

刷新所有表。

·         flush-threads

刷新线程缓存。

·         kill id,id,...

杀掉服务器线程。

·         old-password new-password

类似password但使用旧的(pre-4.1)密码哈希格式保存 密码。(参见5.7.9节,“MySQL 4.1中的密码哈希处理”)。

·         password new-password

设置一个新密码。将用mysqladmin连接服务器使用的 账户的密码更改为new-password。

如果new-password包含空格或其它命令解释符的特殊字符,需要用引号将它引起来。在Windows中,一定要使用双引号而不要用单引号;单引号不会从 密码中剥离出来,而是解释为密码的一部分。例如:

shell> mysqladmin password "my new password"

·         ping

检查服务器是否仍活动。如果服务器在运行mysqladmin返回状态0,如果不运行返回1。即使出现错误例如Access denied也为0,因为这说明服务器在运行但拒绝了连接,与服务器不在运行不同。

·         processlist

显示活动服务器线程的列表。类似SHOW PROCESSLIST语句的输出。如果给出了--verbose选项,输出类似SHOW FULL PROCESSLIST。(参见13.5.4.16节,“SHOW PROCESSLIST语法”)。

·         reload

重载授权表。

·         refresh

刷新所有表并关闭和打开日志文件。

·         shutdown

停止服务器。

·         start-slave

开始从服务器上的复制。

·         status

显示短服务器状态消息。

·         stop-slave

停止从服务器上的复制。

·         variables

显示服务器系统变量及其值。

·         version

显示服务器的版本信息。

所有命令可以简化为任何唯一的前缀。例如:

shell> mysqladmin proc stat
+----+-------+-----------+----+---------+------+-------+------------------+
| Id | User  | Host      | db | Command | Time | State | Info             |
+----+-------+-----------+----+---------+------+-------+------------------+
| 51 | monty | localhost |    | Query   | 0    |       | show processlist |
+----+-------+-----------+----+---------+------+-------+------------------+
Uptime: 1473624  Threads: 1  Questions: 39487  
Slow queries: 0  Opens: 541  Flush tables: 1  
Open tables: 19  Queries per second avg: 0.0268
 

mysqladmin status命令的结果显示下面的值:

·         Uptime

MySQL服务器已经运行的秒数。

·         Threads

活动线程(客户)的数目。

·         Questions

服务器启动以来客户的问题(查询)数目。

·         Slow queries

执行时间超过long_query_time秒的查询的数量。参见5.11.4节,“慢速查询日志”。

·         Opens

服务器已经打开的数据库表的数量。

·         Flush tables

服务器已经执行的flush ...、refresh和reload命令的数量。

·         Open tables

目前打开的表的数量。

·         Memory in use

mysqld代码直接分配的内存数量。只有用--with--debug=full编译了MySQL该值才显示。

·         Maximum memory used

mysqld代码直接分配的最大内存数量。只有用--with--debug=full编译了MySQL该值才显示。

如果当使用Unix套接字文件连接本地服务器时执行mysqladmin shutdown,mysqladmin将等待直到服务器的进程ID文件被删除,以确保服务器正确停止。

mysqladmin支持下面的选项:

·         ---help,-?

显示帮助消息并退出。

·         --character-sets-dir=path

字符集的安装目录。参见5.10.1节,“数据和排序用字符集”。

·         --compress,-C

压缩客户和服务器之间发送的所有信息(如果二者均支持压缩)。

·         --count=num,-c num

迭代数目。该选项只有结合--sleep (-i)才能工作。

·         ---debug[=debug_options],-# [debug_options]

写调试日志。debug_options字符串通常为'd:t:o,file_name'。 默认为'd:t:o,/tmp/mysqladmin.trace'。

·         --default-character-set=charset

使用charsetas作为默认字符集。参见5.10.1节,“数据和排序用字符集”。

·         --force,-f

不再为drop database命令进行确认。对于多个命令,即使出现错误也继续。

·         --host=host_name,-h host_name

连接给定主机上的MySQL服务器。

·         --password[=password],-p[password]

连接服务器使用的密码。如果使用短选项形式(-p),该选项和 密码之间不能有空格。如果你在命令行中在--password或-p选项后面省略 密码值,将提示你输入密码。

·         --port=port_num,-P port_num

用于连接的TCP/IP端口号。

·         --protocol={TCP | SOCKET | PIPE | MEMORY}

使用的连接协议。

·         --relative,-r

当带-I使用时显示当前和前面值的差别。目前,该选项只用于extended-status命令。

·         --silent,-s

如果不能建立与服务器的连接则以沉默方式退出。

·         --sleep=delay,-i delay

每睡眠delay秒后执行一次命令。

·         --socket=path,-S path

用于连接的套接字文件。

·         --user=user_name,-u user_name

当连接服务器时使用的MySQL用户名。

·         --verbose,-v

冗长模式。打印出程序操作的详细信息。

·         --version,-V

显示版本信息并退出。

·         --vertical,-E

垂直打印输出。类似于--relative,但垂直打印输出。

·         --wait[=count],-w[count]

如果连接不能建立,等待并重试而不是放弃。如果给出一个选项值,则指示重试的次数。默认是一次。

也可以使用--var_name=value选项设置下面的变量:

·         connect_timeout

连接超时之前的最大秒数。默认值为43200(12小时)。

·         shutdown_timeout

等候关闭的最大秒数。默认值为3600(1小时)。

也可以使用--set-variable=var_name=value或-O var_name=value语法来设置变量。然而,现在不赞成该语法,并且不再使用。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载