JEE Study|JAVA EE|企业级开发学习网

标题: MySQL8.0大师之路:第10章:MySQL程序详解-10.3 客户端程序 [打印本页]

作者: JeeStudy    时间: 2020-4-6 16:28
标题: MySQL8.0大师之路:第10章:MySQL程序详解-10.3 客户端程序
1.mysql — MySQL命令行客户端

    mysql是具有输入行编辑功能的简单SQL Shell。它支持交互和非交互两种方式使用。交互使用时,查询结果以ASCII表格式显示。当非交互式使用(例如,用作过滤器)时,结果以制表符分隔的格式显示。可以使用命令选项更改输出格式。
    如果由于大结果集的内存不足而遇到问题,请使用--quick选项。这迫使mysql一次从服务器上一次检索结果,而不是检索整个结果集并在显示之前将其缓冲在内存中。这是通过使用客户端/服务器库中的mysql_use_result()C API函数而不是mysql_store_result()返回结果集来完成的。


使用mysql非常简单。
从命令解释器的提示符处调用它,如下所示:
shell> mysql db_name
或:
shell> mysql --user=user_name --password db_name
Enter password: your_password

然后键入一个SQL语句,并以;,\ g或\G结尾,然后按Enter。
键入Control + C会中断当前语句(如果存在),否则将取消任何部分输入行。
您可以在脚本文件(批处理文件)中执行SQL语句,如下所示:
shell> mysql db_name <script.sql> output.tab



快捷键:Control + W删除光标之前的单词,而Control + U删除当前光标位置之前的所有内容。

我们输入的sql语句会被记录到历史文件中。要在Unix上禁用交互式历史记录,请首先删除.mysql_history文件(如果存在,该文件一般在/root/目录下)(否则将调用以前的条目)。然后使用--histignore =“ *”选项启动mysql,以忽略所有新的输入行。如果阻止创建.mysql_history文件(请参阅控制历史记录文件)并使用--histignore =“ *”启动mysql客户端,则交互式历史记录调用功能将完全禁用。

垂直显示而不是通常的水平表格格式时,某些查询结果更具可读性。通过用\ G代替分号来终止查询,可以垂直显示查询。
2.mysqladmin — 用于管理MySQL服务器的客户端
    mysqladmin是用于执行管理操作的客户端。您可以使用它来检查服务器的配置和当前状态,创建和删除数据库等等。

    修改密码:shell> mysqladmin - p password "my new password"  注意这里必须使用双引号("")。
    使用password命令可以省略新密码。在这种情况下,mysqladmin提示输入密码值,这使您避免在命令行上指定密码。如果输入明文的密码非常不安全。

    如果服务器是通过--skipgrant-tables选项启动的,则不要使用此命令,不会更改密码。即使在同一命令行上在password命令前加上flush-privileges来重新启用授权表,也是如此,因为在连接后会进行刷新操作。但是,可以使用mysqladmin flush-privileges重新启用授权表,然后使用单独的mysqladmin password命令更改密码。


3.mysqlcheck —表维护程序
    mysqlcheck客户端执行表维护:它检查,修复,优化或分析表。每个表都被锁定,因此在处理它时其他会话不可用,尽管对于检查操作,该表仅用READ锁锁定。 表维护操作可能很耗时,特别是对于大型表。如果使用--databases或--all-databases选项处理一个或多个数据库中的所有表,则mysqlcheck的调用可能会花费很长时间。 (如果MySQL升级过程确定需要进行表检查,因为它以相同的方式处理表,这对于MySQL升级过程也是如此。)在mysqld服务器运行时必须使用mysqlcheck,这意味着您不必停止服务器进行操作。mysqlcheck以一种方便用户的方式使用SQL语句CHECK TABLE,REPAIR TABLE,ANALYZE TABLE和OPTIMIZE TABLE。它确定要用于该操作的语句,然后将这些语句发送到要执行的服务器。
[root@CentOS8 init.d]# mysqlcheck -p school student;
school:数据库名
student:表名

最好在执行表修复操作之前先备份表。在某些情况下,该操作可能会导致数据丢失。可能的原因包括但不限于文件系统错误。




4.mysqldump —数据库备份程序
    mysqldump客户端程序执行逻辑备份,生成一组SQL语句,可以执行这些语句来重现原始数据库对象定义和表数据。它转储一个或多个MySQL数据库以进行备份或转移到另一台SQL服务器。 mysqldump命令还可以生成CSV,其他文本或XML格式的输出。

    如果未使用--single-transaction选项,则mysqldump至少需要对转储表具有SELECT特权,对转储视图必须具有SHOW VIEW,对于转储触发器需要TRIGGER以及LOCK TABLES。如选项说明中所述,某些选项可能需要其他特权。要重新加载转储文件,您必须具有执行该文件所包含的语句所需的特权,例如对那些语句创建的对象的适当CREATE特权。 mysqldump的输出可以包含改变数据库排序规则的ALTER DATABASE语句。在转储存储的程序以保留其字符编码时,可以使用这些字符。要重新加载包含此类语句的转储文件,需要对受影响的数据库具有ALTER特权。

在Windows上使用PowerShell进行输出重定向的转储会创建一个具有UTF-16编码的文件:
shell> mysqldump [options] > dump.sql
但是,Windows 不允许将UTF-16作为连接字符集,因此转储文件将无法正确加载。
要解决此问题,请使用--result-file选项,该选项以ASCII格式创建输出:
shell> mysqldump [options] --result-file=dump.sql



共有三种使用mysqldump的方法-为了转储一组一个或多个表,一组一个或多个完整数据库或整个MySQL服务器-如下所示:
shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases


要转储整个数据库,请勿在db_name之后命名任何表,也不要使用--databases或--all-databases选项。要查看您的mysqldump版本支持的选项列表,请发出命令mysqldump -help。


例:
[root@CentOS8 init.d]# mysqldump -p school >a.sql
mysqldump: [Warning] unknown variable 'loose-local-infile=1'.

出现这个错误是因为我们前面在导入文本数据到数据库时配置了一个选项,去掉就可以了。用mysqldump导出的数据,需要用mysql命令导入进去,这时候还需要开启下面的配置
[root@CentOS8 ~]# cat /etc/my.cnf
[mysqld]
loose-local-infile=1
[client]
loose-local-infile=1



限制:
默认情况下,mysqldump不会转储Performance_schema或sys模式。要转储其中任何一个,请在命令行上明确命名它们。您也可以使用--databases选项命名它们。对于performance_schema,还可以使用--skip-lock-tables选项。
mysqldump不会转储INFORMATION_SCHEMA 数据库。
mysqldump不会转储InnoDB CREATE TABLESPACE语句。
mysqldump不会转储NDB群集ndbinfo信息数据库。




5.mysqlimport — 数据导入程序
mysqlimport客户端为LOAD DATA SQL语句提供命令行界面。 mysqlimport的大多数选项直接对应于LOAD DATA语法的子句。
像这样调用mysqlimport

shell> mysqlimport [options] db_name textfile1 [textfile2 ...]

对于在命令行上命名的每个文本文件,mysqlimport将从文件名中删除所有扩展名,并使用结果来确定将文件内容导入到的表的名称。
例如,名为Patient.txt,Patient.text和Patient的文件都将导入到名为Patient的表中。

mysqlimport支持以下选项,可以在命令行或选项文件的[mysqlimport]和[client]组中指定。


6.mysqlpump — 数据库备份程序
mysqlpump客户端程序执行逻辑备份,生成一组SQL语句,可以执行这些语句来重现原始数据库对象定义和表数据。它转储一个或多个MySQL数据库以进行备份或转移到另一台SQL服务器。
mysqlpump功能包括:
•并行处理数据库以及数据库中的对象,以加快转储过程
•更好地控制要转储哪些数据库和数据库对象(表,存储程序,用户帐户)
•将用户帐户作为帐户转储-
管理语句(CREATE USER,GRANT),而不是插入到mysql系统数据库中
•创建压缩输出的能力
•进度指示器(值是估计值)
•对于转储文件重新加载,通过在行后添加索引,可以更快地为InnoDB表创建二级索引被插入


如果未使用--single-transaction选项,则mysqlpump至少需要对转储表具有SELECT特权,对转储视图必须具有SHOW VIEW,对转储触发器需要TRIGGER以及LOCK TABLES。转储用户定义需要mysql系统数据库上的SELECT特权。如选项说明中所述,某些选项可能需要其他特权。要重新加载转储文件,您必须具有执行该文件所包含的语句所需的特权,例如对那些语句创建的对象的适当CREATE特权。


在Windows上使用PowerShell进行输出重定向的转储会创建一个具有UTF-16编码的文件:
shell> mysqlpump [options] > dump.sql
但是,Windows 不允许将UTF-16作为连接字符集,因此转储文件将无法正确加载。
要解决此问题,请使用--result-file选项,该选项以ASCII格式创建输出:
shell> mysqlpump [options] --result-file=dump.sql


默认情况下,mysqlpump不会转储Performance_schema,ndbinfo或sys。要转储其中任何一个,请在命令行上明确命名它们。您也可以使用-数据库或--include-databases选项来命名它们。
mysqlpump不会转储INFORMATION_SCHEMA模式。
mysqlpump不会转储InnoDB CREATE TABLESPACE语句。
mysqlpump使用CREATE USER和GRANT语句以逻辑形式转储用户帐户(例如,当您使用--include-users或--users选项时)。
因此,默认情况下,mysql系统数据库的转储不包括包含用户定义的授权表:user,db,tables_priv,columns_priv,procs_priv或proxies_priv。要转储任何授权表,请命名mysql数据库,然后命名表名称:



7.mysqlshow —显示数据库,表和列信息
mysqlshow客户端可用于快速查看存在哪些数据库,它们的表或表的列或索引
像这样调用mysqlshow:
shell> mysqlshow [options] [db_name [tbl_name [col_name]]]

8.mysqlslap —负载仿真客户端
mysqlslap是一个诊断程序,旨在模拟MySQL服务器的客户端负载并报告每个阶段的时间。就像多个客户端正在访问服务器一样。
像这样调用mysqlslap:

shell> mysqlslap [options]


某些选项(例如--create或--query)使您可以指定包含SQL语句的字符串或包含语句的文件。如果指定文件,则默认情况下该文件每行必须包含一个语句。 (也就是说,隐式语句定界符是换行符。)使用--delimiter选项可以指定其他定界符,使您能够指定跨多行的语句或将多条语句放在一行上。您不能在文件中包含注释; mysqlslap无法理解它们。



mysqlslap的运行分为三个阶段:
1.创建schema,table,以及可选的任何存储过程或数据以用于测试。此阶段使用单个客户端连接。
2.运行负载测试。此阶段可以使用许多客户端连接。
3.清理(断开连接,删除表)。此阶段使用单个客户端连接。
示例:
1.
提供您自己的create和query SQL语句,其中有50个客户端查询和200个选择查询(在一行中输入命令):

mysqlslap -p --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" --query="SELECT * FROM a" --concurrency=50 --iterations=200;


2.
让mysqlslap用两个INT列和三个VARCHAR列的表构建查询SQL语句。使用五个客户端,每个客户端查询20次。不要创建表或插入数据(即,使用先前测试的架构和数据):

mysqlslap -p --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql


3.
告诉程序从指定的文件加载创建,插入和查询SQL语句,其中create.sql文件具有多个以';'分隔的表创建语句和多个以';'分隔的插入语句。 --query文件将包含多个以';'分隔的查询。运行所有装入语句,然后使用五个客户端(每个客户端五次)运行查询文件中的所有查询:

mysqlslap -p --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";"


mysqlslap支持以下选项,可以在命令行或选项文件的[mysqlslap]和[client]组中指定。




























欢迎光临 JEE Study|JAVA EE|企业级开发学习网 (http://jeestudy.com/) Powered by Discuz! X3.2