MySQL运维实战(3.1) MySQL官方客户端使用介绍

俊达3个月前技术文章63

mysql是mysql安装包默认的客户端。位于二进制安装包的bin目录。或者通过rpm安装包安装mysql-community-client。


使用mysql程序

linux终端下,输入mysql命令登陆数据库。如果提示mysql不存在,要看mysql程序是否在命令行的搜索路径。

[root@box3 ~]# mysql
-bash: mysql: No such file or directory

### 测试环境中,mysql位于/usr/local/mysql, 设置PATH
[root@box3 ~]# cat ~/.bash_profile
...
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
export PATH

[root@box1 ~]# mysql --version
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper



mysql主要命令行参数说明

命令行参数

说明

--help

查看帮助信息。mysql --help

--version

查看客户端版本

-p, --password

用户密码,小写的p

-P, --port

服务端口,大写的P

-u, --user

用户名

-h, --host

服务地址

-S, --socket

socket文件。和-S和 -h -P只能使用其中一种方式登陆。

-v, --verbose

输出更多提示信息,使用-vvv 输出更多信息。在批量执行脚本时,我们可能会需要增加输出信息,便于查看脚本执行过程中的信息。

-s, --silent

安静模式,输出更少的提示信息

-B, --batch

批模式,输出更少提示信息。会影响wait_timeout参数。

-e

执行sql语句。mysql -e 'select now()'

-A, --no-auto-rehash

登陆时不读取mysql数据字典。在数据库中表多的时候,使用-A选项能提高连接的速度。

--tee

将命令和结果输出到文件

--no-defaults

不从默认的配置文件中读取选项

--defaults-file

从指定的配置文件中读取选项

--ssl-mode 

ssl连接模式

  • required: 启用ssl

  • verify_ca:验证服务端证书

  • verify_identity:验证服务端身份

  • disabled:不启用ssl

--ssl-ca

ssl CA证书。服务端和客户端使用同一个ca证书

--ssl-cert

客户端ssl证书

--ssl-key

客户端ssl私钥



关于mysql客户端空闲超时

mysql服务端会终止空闲时间超过一定时长的会话,有2个参数会影响超时时间。空闲时间是指客户端没有发送请求到服务端的连续时间。


  • interactive-timeout

交互模式下的连接空闲超时时间。使用mysql client连接是,超时时间会设置为interactive-timeout指定的值。

  • wait-timeout

非交互模式下的连接空闲超时时间。如果登陆时设置了交互模式,wait-timeout会设置为interactive-timeout指定的值


测试

1、先分别设置interactive-timeout和wait-timeout参数

mysql> set global wait_timeout=8000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global interactive_timeout=1000;
Query OK, 0 rows affected (0.00 sec)


2、在交互式客户端查看超时时间。wait_timeout被设置为interactive_timout的值。

[root@box3 ~]#  mysql -udemo -h172.16.20.51 -pdemo -s -t
mysql> show variables where variable_name in ('wait_timeout', 'interactive_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 1000  |
| wait_timeout        | 1000  |
+---------------------+-------+


3、使用非交互式客户端连接,查看超时时间。使用客户端参数-B指定当前会话为非交互式会话。

[root@box3 ~]#  mysql -udemo -h172.16.20.51 -pdemo -s -t -B
show variables where variable_name in ('wait_timeout', 'interactive_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 1000  |
| wait_timeout        | 8000  |


wait_timeout的值还是8000。


4、每个会话可以设置各自的超时时间

mysql> show variables where variable_name in ('wait_timeout', 'interactive_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 1000  |
| wait_timeout        | 1000  |
+---------------------+-------+
mysql> set session wait_timeout=256;
mysql> show variables where variable_name in ('wait_timeout', 'interactive_timeout');
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 1000  |
| wait_timeout        | 256   |
+---------------------+-------+


5、使用各种语言的api连接到mysql,需要连接后执行命令查看会话的空闲超时时间。



关于mysql client的参数文件

在linux环境下,使用mysql client会从默认的配置文件中读取相关参数。使用strace可以看到mysql会访问这些文件: /etc/my.cnf, /etc/mysql/my.cnf, /usr/etc/my.cnf, /root/.my.cnf

[root@box1 ~]# strace mysql  2>&1 | grep my.cnf
stat("/etc/my.cnf", {st_mode=S_IFREG|0644, st_size=1029, ...}) = 0
open("/etc/my.cnf", O_RDONLY)           = 3
stat("/etc/mysql/my.cnf", 0x7ffc29961a00) = -1 ENOENT (没有那个文件或目录)
stat("/usr/etc/my.cnf", 0x7ffc29961a00) = -1 ENOENT (没有那个文件或目录)
stat("/root/.my.cnf", 0x7ffc29961a00)   = -1 ENOENT (没有那个文件或目录)


测试在/root/.my.cnf中配置相关连接参数,mysql client程序会自动从文件中读取相关选项。使用--no-defaults参数避免从默认参数文件中读取命令行选项。

[root@box1 ~]# cat /root/.my.cnf
[mysql]
user=demo
password=demo

[root@box1 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
...
mysql> show grants;
+-------------------------------------------+
| Grants for demo@%                         |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> ^DBye

[root@box1 ~]# mysql --no-defaults
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)



mysql client程序使用场景


批量执行保存在文件中的SQL

以列的方式展现查询数据

sql语句以\G结尾,将行格式的数据转换成按列显示。

mysql> select user, host from mysql.user limit 1;
+-------+------+
| user  | host |
+-------+------+
| auser | %    |
+-------+------+
1 row in set (0.01 sec)

mysql> select user, host from mysql.user limit 1\G
*************************** 1. row ***************************
user: auser
host: %
1 row in set (0.00 sec)

使用show warnings查看warning信息

有时候执行SQL会有warnings,执行show warnings命令可以查看具体的信息

mysql> set sql_mode='';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings\G
*************************** 1. row ***************************
  Level: Warning
   Code: 3090
Message: Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1 row in set (0.00 sec)


使用pager过滤查询的数据

mysql客户端中可以使用pager过滤数据。类似于通过管道将sql的输出发送给pager指定的命令进行处理。

mysql> pager more
PAGER set to 'more'

mysql> select * from mysql.user\G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
20 rows in set (0.00 sec)

mysql> pager
Default pager wasnt set, using stdout.

mysql> pager grep "inserts/s"
PAGER set to 'grep "inserts/s"'
mysql> show engine innodb status\G
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
1 row in set (0.00 sec)

mysql> pager
Default pager wasnt set, using stdout.


相关文章

Nginx性能优化

Nginx性能优化

       前言:Nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求。 以下的Nginx配置参数作为参考,具体需根据线上业务情况进行调整。一、worker进程work...

PG的多版本并发控制(一)

PG的多版本并发控制(一)

一、 表系统字段几个比较重要概念1.1  tupletuple表示表中的数据行,在MySQL中用row表示。在表数据页中,主要分为普通的数据元祖和TOAST元祖。以下是一个普通数据元祖的结构,主要由三...

Keepalived安装部署

Keepalived安装部署

安装keepalivedyum 安装keepalivedyum install keepalivedkeepalived.conf配置文件进行调整,其中state设置主备状态,interface设置对...

linux中的buffer和cache

linux中的buffer和cache

linux中的buffer和cache一、buffer和cache的来源及应用1、来源Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储。那么,这两种“临时存储”有什么区别...

Clickhouse冷热数据分离实践

配置多卷存储策略使用Clickhouse的存储策略功能,可以实现冷热数据分离存储。我们可以将业务上访问频繁的数据放到热存储区(如高性能SSD磁盘),将业务上较少访问的数据放在冷存储区(如价格更便宜、空...

数据湖技术之iceberg(十二)Flink与Iceberg整合-SQL API操作

数据湖技术之iceberg(十二)Flink与Iceberg整合-SQL API操作

1.SQL API 创建Iceberg表并写入数据StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnv...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。