MySQL 中的常用工具
mysql(客户端连接工具)
这里的“mysql”不是指 MySQL 服务,也不是指 mysql 数据库,而是连接数据库的客户端工具。是操作者和数据库之间的纽带和桥梁。
语法如下:
mysql [OPTIONS] [database]
这里的 OPTIONS 表示 mysql 的可用选项,可以一次写一个或者多个,甚至可以不写;database 表示连接的数据库,一次只能写一个或者不写,如果不写,连接成功后需要用 "use dbname" 命令进入要操作的数据库。
下面介绍 mysql 的一些常用选项,这些选项通常有两种表达方式,一种是“-” + 选项单次的缩写字符+选项值;另一种是“--” + 选项的完整单次 + “=” + 选项的实际值。例如,下面的两种写法是完全等价的。
mysql --uroot
myslq --user=root
在下面的介绍中,如果有两种表达方式,都会用逗号隔开进行列出;否则将只显示一种表达方式。要了解更多的选项,读者可以用 mysql --help
命令进行查看。
连接选项
-u, --user=name 指定用户名
-p, --password[=name] 指定密码
-h, --host=name 指定服务器 IP 或者域名
-P, --port=# 指定连接端
这 4 个选项经常一起配合使用。默认情况下,如果这些选项都不写,mysql 将会使用 '用户 '@'localhost' 和空密码连接本机(localhost)上的 3306 端口。
如果客户端和服务器位于同一台机器上,通常不需要指定 -h 选项,否则要指定 MySQL 服务 所在的 IP 或者主机名。如果不指定端口,默认连接到 3306 端口。以下是一个远程用户用 root 帐号成功连接到服务器 192.168.7.55 上 3306 端口的例子:
C:\mysql\bin\mysql -h 192.168.7.55 -P 3306 -uroot -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8 to server version: 4.1.13-standard-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
注意:在正式的生产环境中,为了安全起见,一般需要创建应用账号并赋予适当权限,而不会用 root 直接操纵数据库;默认端口(3306)一般不要使用,可以改为任意操作系统未占用的端口。
客户端字符集选项
--default-character-set=charset-name
作为服务器的字符集选项,这个选项也可以配置在 my.cnf 的[mysqld] 组中。同样,作为客户端字符集选项,也可以配置在 my.cnf 的[mysql]组中,这样每次用 mysql 工具连接数据库的时候就会自动使用此客户端字符集。当然,也可以在 mysql 的命令行中手工指定客户端字符集,如下所示:
shell>mysql -u user --default-character-set=charset
相当于在 mysql 客户端连接成功后执行:
set name charset;
执行选项
-e, --execute=name 执行SQL语句并退出
此选项可以直接在 MySQL 客户端执行 SQL 语句,而不用连接到 MySQL 数据库后再执行,对于一些批处理脚本,这种方式尤其方便。下面的例子从客户端直接查询 mysql 数据库中的 user 表中的 User 和 Host 字段:
PS D:\Server\MySQL\bin> ./mysql -u root -p mysql -e "SELECT User, Host FROM user"
Enter password: ****
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
可以按照这种方式连续执行多个 SQL 语句,用英文分号(;)隔开,下面例子中连续执行了两个 SQL 语句:
PS D:\Server\MySQL\bin> ./mysql -u root -p mysql -e "SELECT User, Host FROM user;SELECT COUNT(*) FROM user"
Enter password: ****
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
格式化选项
-E, --vertical 将输出方式按照字段顺序竖着显示
-s, --silent 去掉mysql中的线条框显示
“-E”选项类似于 mysql 里面执行 SQL 语句后加“\G”,将输出内容比较多的行能够更清晰完整的进行显示,经常和“-e”选项一起使用。下例中在 powershell 命令行直接对数据库做查询,并将结果格式化输出:
PS D:\Server\MySQL\bin> ./mysql -u root -p mysql -e "SELECT User, Host FROM user" -E
Enter password: ****
*************************** 1. row ***************************
User: root
Host: %
*************************** 2. row ***************************
User: mysql.infoschema
Host: localhost
*************************** 3. row ***************************
User: mysql.session
Host: localhost
*************************** 4. row ***************************
User: mysql.sys
Host: localhost
在 mysql 的安静模式下,“-s”选项可以将输出中讨厌的线条框去掉,字段之间用 tab 进行分隔,没条记录显示一行。此选项对于只显示数据的情况很有用,下例中是此选项的显示结果:
PS D:\Server\MySQL\bin> ./mysql -u root -p chihuo -e "SELECT * FROM sys_user_role" -s
Enter password: ****
user_id role_id
1 1
2 1
2 2
110 1
112 1
138 1
138 2
152 2
错误处理选项
-f, --force 强制执行 SQL
-v, --verbose 显示更多信息
--show-warnings 显示警告信息
在一个批量执行的 SQL 中,如果有其中一个 SQL 执行出错,正常情况下,该批处理将停止 退出。加上-f
选项,则跳过出错 SQL,强制执行后面 SQL;加上-v
选项,则显示出错的 SQL 语句;加上--show-warnings
,则会显示全部错误信息。
这 3 个参数经常一起使用,在很多情况下会对用户很有帮助,比如加载数据。如果数据中有语法错误的地方,则会将出错信息记录在日志中,而不会停止使得后面的正常 SQL 无法执行;而出错的语句,也可以在日志中得以查看,进行修复。
myisampack(MyISAM 表压缩工具)
myisampack 是一个表压缩工具,可以使用很高的压缩率来对 MyISAM 存储引擎的表进行压缩,使得压缩后的表占用比压缩前小得多的磁盘空间。但是压缩后的表也将成为一个只读表,不能进行 DML 操作。
shell>myisampack [options] filename
mysqladmin(MySQL 管理工具)
mysqladmin 是一个执行管理操作的客户端程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等。它的功能和 mysql 客户端非常类似,主要区别在于它更侧重于一些管理方面的功能,比如关闭数据库。
mysqladmin
的用法如下:
shell> mysqladmin [options] command [command-options]
[command [command-options]]...
使用方法和常用的选项和 mysql 非常类似,这里就不再赘述。这里将可以执行的命令行简单列举如下:
create databasename Create a new database
debug Instruct server to write debug information to log
drop databasename Delete a database and all its tables
extended-status Gives an extended status message from the server
flush-hosts Flush all cached hosts
flush-logs Flush all logs
flush-status Clear status variables
flush-tables Flush all tables
flush-threads Flush the thread cache
flush-privileges Reload grant tables (same as reload)
kill id,id,... Kill mysql threads
password new-password Change old password to new-password, MySQL 4.1 hashing.
old-password new-password Change old password to new-password in old format.
ping Check if mysqld is alive
processlist Show list of active threads in server
reload Reload grant tables
refresh Flush all tables and close and open logfiles
shutdown Take server down
status Gives a short status message from the server
start-slave Start slave
stop-slave Stop slave
variables Prints variables available
version Get version info from server
更多关于 mysqladmin
的命令使用可以使用 mysqladmin --help
获取帮助:
PS D:\Server\MySQL\bin> .\mysqladmin.exe --help
这里简单举一个关闭数据库的例子:
[root@localhost test]# mysqladmin -uroot -p shutdown
Enter password:
mysqlbinlog(日志管理工具)
由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到 mysqlbinlog 日志管理工具。
mysqlbinlog 的具体用法如下:
shell> mysqlbinlog [options] log-files1 log-files2...
option 有很多选项,常用的如下:
- -d,--database=name 指定数据库名称,只列出指定的数据库相关操作。
- -o,--offset=# 忽略掉日志中的前 n 行命令。
- -r,--result-file=name 将输出的文本格式日志输出到指定文件。
- -s,--short-form 显示简单格式,省略掉一些信息。
- --set-charset=char-name:在输出为文本格式时,在文件第一行加上 set names char-name,这个选项在某些情况下装载数据时,非常有用。
- --start-datetime-name --stop-datetime=name:指定日期间隔内的所有日志。
- --start-position=# --stop-position=#:指定位置间隔内的所有日志。
mysqlcheck (MyISAM 表维护工具)
mysqlcheck 客户端工具可以检查和修复 MyISAM 表,还可以优化和分析表。实际上,它集成了 mysql 工具中 check、repair、optimize 的功能。
有 3 种方式可以来调用 mysqlcheck:
shell> mysqlcheck[options] db_name [tables]
shell> mysqlcheck[options] --database DB1 [DB2 DB3...]
shell> mysqlcheck[options] --all--database
option 中有以下常用选项:
- -c,--check 检查表
- -r,--repair 修复表
- -a,--analyze 分析表
- -o,--optimize 优化表
其中,默认选项是-c(检查表)。
## 检查表
PS D:\Server\MySQL\bin> .\mysqlcheck.exe -u root -p -c test
Enter password: ****
test.player_battle_data OK
test.player_battle_relation OK
mysqldump(数据导出工具)
mysqldump 客户端工具用来备份数据库或在不同的数据库之前进行数据迁移。备份内容包含创建表或装载表的 SQL 语句。mysqldump 目前是 MySQL 中最常用的备份工具。
有 3 中方式来调用 mysqldump:
shell> mysqldump [options] db_name [tables] #备份单个数据库或者库中部分数据表
shell> mysqldump [options] --database DB1 [DB2 DB3...] #备份指定的一个或者多个数据库
shell> mysqldump [options] --all-database #备份所有数据库
下面是 mysqldump 的一些常用选项,要查阅更详细的功能,请用“mysqldump –help”查看。
连接选项
-u, --user=name 指定用户名
-p, --password[=name] 指定密码
-h, --host=name 指定服务器 IP 或者域名
-P, --port=# 指定连接端口
这 4 个选项经常一起配合使用,如果客户端位于服务器上,通常不需要指定 host。如果不指定端口,默认连接到 3306 端口,以下是一个远程客户端连接到服务器的例子:
PS D:\Server\MySQL\bin> .\mysqldump.exe -h 192.168.1.91 -P3306 -uroot -p chihuo > chihuo.txt
Enter password: ****
输出内容选项
--add-drop-database 每个数据库创建语句前加上 DROP DATABASE 语句
--add-drop-table 在每个表创建语句前加上 DROP TABLE 语句
这两个选项可以在导入数据库的时候不用先手工删除旧的数据库,而是会自动删除,提高导入效率,但是导入前一定要做好备份并且确认旧数据库的确已经可以删除,否则误操作将会造成数据的损失。在默认情况下,这两个参数都自动加上。
-n, --no-create-db 不包含数据库的创建语句
-t, --no-create-info 不包含数据表的创建语句
-d, --no-data 不包含数据
这 3 个选项分别表示备份文件中不包含书刊的创建语句、不包含数据表的创建语句、不包含数据,在不同的场合下,用户可以根据实际需求来进行选择。
输出格式选项
--compact 选项使得输出结果简洁,不包括默认选项中的各种注释。
-c --complete-insert 选项使得输出文件中的 insert 语句包括字段名称,默认是不包括字段名称的。
-T 选项将指定数据表中的数据备份为单纯的数据文本和建表 SQL 两个文件,经常和下面几个选项一起配合使用,将数据导出为指定格式显示。
- -T,--tab=name(备份数据和建表语句);
- --fields-terminated-by=name(域分隔符);
- --fields-enclosed-by=name(域引用符);
- --fields-optionally-enclosed-by=name(域可选引用符);
- --fields-escaped-by=name(转义字符)。
字符集选项
--default-character-set=name 选项可以设置导出客户端字符集。系统默认的客户端字符集可以通过以下命令来查看:
[zzx@localhost ~]$ mysqld --verbose --help|grep 'default-character-set'|grep -v name
default-character-set gbk
-
-F --flush-logs(备份前刷新日志)。
加上此选项后,备份前将关闭旧日志,生成新日志。使得进行恢复的时候直接从新日志开始进行重做,大大方便了恢复过程。
-
-l --lock-tables(给所有表加读锁)。
可以在备份期间使用,使得数据无法被更新,从而使备份的数据保持一致性,可以配合-F 选项一起使用。
mysqlhotcopy(MyISAM表热备份工具)
mysqlhotcopy 是一个 Perl 脚本,它使用 LOCK TABLES
、FLUSH TABLES
、cp
或 scp
来快速备份数据库。它是备份数据库或单个表的最快途径,其缺点是 mysqlhotcopy 只用于备份 MyISAM,而且它需要运行在 Linux/UNIX 环境中。
需要注意的是,mysqlhotcopy 是 Perl 脚本,因此需要安装 Perl 的 MySQL 数据库接口包。
mysqlhotcopy 的常用选项如下。
- --allowold:如果备份路径下中含有同名备份,则将旧的备份目录 rename 为目录名_old。
- --addtodest:如果备份路径下存在同名目录,则仅仅将新的文件加入目录。
- --noindices:不备份所有的索引文件。
- --flushlog:表被锁定后刷新日志。
mysqlimport(数据导入工具)
mysqlimport 是客户端数据导入工具,用来导入 mysqldump 加-T 选项后导出的文本文件。它实际上是客户端提供了 LOAD DATA INFILEQL
语句的一个命令行接口。用法和 LOAD DATA INFILE
子句非常类似。
mysqlimport
的基本用法如下:
shell> mysqlimport [options] db_name textfile1 [textfile2 ...]
mysqlshow(数据库对象查看工具)
mysqlshow 客户端对象查找工具,用来很快地查找存在哪些数据库、数据库中的表、表中的列或索引。和 mysql 客户端工具很类似,不过有些特性是 mysql 客户端工具所不具备的。
mysqlshow 的使用方法如下:
shell> mysqlshow[option] [db_name [tbl_name [col_name]]]
如果不加任何选项,默认情况下,会显示所有数据库。下例中显示了当前 MySQL 中的所有数据库:
[zzx@localhost ~]$ mysqlshow -uroot
+--------------------+
| Databases |
+--------------------+
| information_schema |
| backup |
| data |
| index |
| mysql |
| test |
| test1 |
+--------------------+
下面是 mysqlshow 的一些常用选项。
-
--count(显示数据库和表的统计信息)。
如果不指定数据库,则显示每个数据库的名称、表数量、记录数量;如果指定数据库,则显示指定数据库的每个表名、字段数量,记录数量;如果指定具体数据库中的具体表,则显示表的字段信息。
-
-k --keys(显示指定表中的所有索引)。
此选项显示了两部分内容,一部分是指定表的表结构,另外一部分是指定表的当前索引信息。
-
-i --status(显示表的一些状态信息)
此命令和 mysql 客户端执行
"show table status from test like 'emp'"
的结果完全一致。
perror(错误代码查看工具)
在 MySQL 的使用过程中,可能会出现各种各样的 error,这些 error 有些是由于操作系统引起的,比如文件或者目录不存在;有些则是由于存储引擎使用不当引起的。这些 error 一般都有一个代码,类似于“error:#”或者“Errcode:#”,“#”代表具体的错误号。perror 的作用就是解释这些错误代码的详细含义。
perror 的用法很简单,如下所示:
perror [OPTIONS] [ERRORCODE [ERRORCODE...]]
在下面的例子中,可以看一下错误号 30 和 60 分别是什么错误:
[zzx@localhost mysql]$ perror 30 60
OS error code 30: Read-only file system
OS error code 60: Device not a stream
replace(文本替换工具)
replace 是 MySQL 自带的一个对文件中的字符串进行替换的工具,类似于 *Linux 下的 sed,不过它的使用更加简单灵活。
具体使用方法如下:
shell> replace from to [from to] ... -- file [file] ...
shell> replace from to [from to] ... < file
其中--表示字符串结束,文件的开始,可跟多个源文件,替换完毕后会覆盖原文件。<表示后面的文件作为输入,替换后的文本显示在标准输出上,不会覆盖原文件。
文字内容来自《深入浅出MySQL》,作为个人笔记记录使用。