MySQL工具【mysql 客户端连接工具】

本文详细介绍了MySQL客户端工具的使用方法,包括连接选项(如用户名、密码、主机和端口)、字符集设置、执行SQL语句的方式、错误处理和格式化输出。通过实例演示了如何处理登录、字符集选择和SQL批处理中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01. mysql (客户端连接工具)

这里的"mysql"不是指mysql服务,也不是指mysql数据库,而是指连接数据库的客户端工具,它是操作者和数据库之间的纽带和桥梁。

以下两种方式等价:- 表示单词缩写,-- 表示完整单词。其他选项可以使用 mysql --help 命令进行查看。

  • mysql -uroot
  • mysql --user=root
01. 连接选项
-u, --user=name			指定用户名
-p, --password[=name]   指定密码
-h, --host=name         指定服务器IP或者域名
-P, --port=3306			指定连接端口,默认3306
-D, --database=name		指定连接的数据库

这5个选项经常一起配合使用。在默认情况下,如果这些选项不写,那么mysql将会使用 ‘用户名’@‘localhost’空密码 连接本机上的3306端口。空用户 在mysql刚刚安装完毕后会自动生成,这也就是我们只使用一个mysql命令就可以连接到数据库的原因。

[root@ufo128 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, 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> 

查看当前用户(为空用户)

mysql> select current_user();
+----------------+
| current_user() |
+----------------+
| @localhost |
+----------------+
1 row in set (0.00 sec)

如果单纯的删除了空用户,那木用单纯的mysql命令是不是就永远不能登录了呢? 不是的,如果空用户被删除,mysql会接着去my.cnf里边找[client]组内的用户名和密码,如果有则按照此用户名和密码进行登录(必须是已经存在的用户);如果没有记录此选项,则系统会使用’root’@'localhost’用户进行登录。

如果客户端和服务器位于同一台机器上,通常不需要指定-h选项,否则需要指定mysql服务所在的IP或主机名。如果不指定端口,默认会连接到3306端口。下边是一个远程连接服务器的例子:

# 注意用户名和密码参数之间没有空格
[root@ufo128 ~]# mysql -h 192.168.71.130 -P 3306 -uroot -pUfo_123456
02. 客户端字符集选项

作为服务器的字符集选项,这个选项也可以配置在mysql.cnf的 [mysqld] 组中。同样,作为客户端字符集选项,也可以配置在mysql.cnf的 [mysql] 组中,这样每次用mysql工具连接数据库的时候就会自动使用此客户端字符集。当然也可以在mysql的命令行手工指定客户端字符集。

[root@ufo128 ~]# mysql -u root --default-character-set=utf8
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, 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 'chara%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8    	###              |
| character_set_connection | utf8     	###              |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8     	###           |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

原来默认的客户端字符集

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

03. 执行选项
-e, --execute=name        执行sql语句并退出

对于一些批量处理脚本,这种方式尤为方便。

[root@ufo128 ~]# mysql -e "select host,user from mysql.user;"
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| localhost |      |
| localhost | root |
| ufo       |      |
| ufo       | root |
+-----------+------+
[root@ufo128 ~]# mysql -e "select host,user from mysql.user; select current_user();"
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| localhost |      |
| localhost | root |
| ufo       |      |
| ufo       | root |
+-----------+------+
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
04. 格式化选项
-E,--vertical		将输出方式按照字段顺序竖着显示
-s,--silent			去掉mysql中的线条框显示

“-E"选项类似于mysql中的”\G",可以将内容比较多的行更清晰完整的进行显示,经常和"-e"选项一起使用。

[root@ufo128 ~]# mysql -e "select host,user from mysql.user;"
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| localhost |      |
| localhost | root |
| ufo       |      |
| ufo       | root |
+-----------+------+
[root@ufo128 ~]# mysql -E -e "select host,user from mysql.user;"
*************************** 1. row ***************************
host: 127.0.0.1
user: root
*************************** 2. row ***************************
host: localhost
user: 
*************************** 3. row ***************************
host: localhost
user: root
*************************** 4. row ***************************
host: ufo
user: 
*************************** 5. row ***************************
host: ufo
user: root
[root@ufo128 ~]# mysql -s -e "select host,user from mysql.user;"
host	user
127.0.0.1	root
localhost	
localhost	root
ufo	
ufo	root
05. 错误处理选项
-f, --force			强制执行sql
-v, --verbose		显示更多信息
--show-warnings		显示警告信息

在一个批处理的sql中,如果有其中一个sql执行出错,正常情况下,该批处理将停止退出。加上-f选项,则跳过出错的sql,强制执行后面的sql;加上-v选项,则显示出错的sql语句;加上--show-warnings,则会显示全部的错误信息。

创建测试表

mysql> create table t2(id int(11));
Query OK, 0 rows affected (0.02 sec)

mysql> desc t2;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

测试数据

[root@ufo128 tmp]# cat 666.sql 
insert into t2 values(1);
insert into t2 values(2a);
insert into t2 values(3);

不加任何参数将数据导入表t2

[root@ufo128 tmp]# mysql -uroot -D test < 666.sql
ERROR 1054 (42S22) at line 2: Unknown column '2a' in 'field list'
[root@ufo128 tmp]# 
[root@ufo128 tmp]# mysql -uroot -D test -e "select * from t2;"
+------+
| id   |
+------+
| 1    |
+------+

注意:只提交了前边正确的数据

加-f选项强制导入

[root@ufo128 tmp]# mysql -uroot -D test -f < 666.sql
ERROR 1054 (42S22) at line 2: Unknown column '2a' in 'field list'
[root@ufo128 tmp]# 
[root@ufo128 tmp]# mysql -uroot -D test -e "select * from t2;"
+------+
| id   |
+------+
|    1 |
|    1 |
|    3 |
+------+

注意:跳过中间语法报错的语句,强制执行后边的语句,但是提示信息不够明确,不易定位

加入-v选项

[root@ufo128 tmp]# mysql -uroot -D test -f -v < 666.sql
--------------
insert into t2 values(1)
--------------

--------------
insert into t2 values(2a)
--------------

ERROR 1054 (42S22) at line 2: Unknown column '2a' in 'field list'
--------------
insert into t2 values(3)
--------------

[root@ufo128 tmp]# mysql -uroot -D test -e "select * from t2;"
+------+
| id   |
+------+
|    1 |
|    1 |
|    3 |
|    1 |
|    3 |
+------+

注意:提示信息更明确,易于定位

修改测试数据,测试告警提示

[root@ufo128 tmp]# cat 666.sql 
insert into t2 values(1);
insert into t2 values(22222222222222222222222222);
insert into t2 values(3);

[root@ufo128 tmp]# mysql -uroot -D test -f -v < 666.sql
--------------
insert into t2 values(1)
--------------

--------------
insert into t2 values(22222222222222222222222222)
--------------

--------------
insert into t2 values(3)
--------------

[root@ufo128 tmp]# mysql -uroot -D test -e "select * from t2;"
+------------+
| id         |
+------------+
|          1 |
|          1 |
|          3 |
|          1 |
|          3 |
|          1 |
| 2147483647 |
|          3 |
+------------+

注意:超出了存储范围,但是没有任何告警提示信息。(因为没有设置SQL_MODE,默认为非严格的数据效验,也就是第二条数据虽然可以插入表t2,但是插入的数据时错误的)

[root@ufo128 tmp]# mysql -uroot -D test -f -v --show-warnings < 666.sql
--------------
insert into t2 values(1)
--------------

--------------
insert into t2 values(22222222222222222222222222)
--------------

Warning (Code 1264): Out of range value for column 'id' at row 1
Warning (Code 1264): Out of range value for column 'id' at row 1
--------------
insert into t2 values(3)
--------------

[root@ufo128 tmp]# mysql -u root -D test -e "select * from t2;"
+------------+
| id         |
+------------+
|          1 |
|          1 |
|          3 |
|          1 |
|          3 |
|          1 |
| 2147483647 |
|          3 |
|          1 |
| 2147483647 |
|          3 |
+------------+

注意:插入数据异常,且有告警提示。

06. 其他

生成html格式,特别适合输出为报告

[root@ufo128 tmp]# mysql -uroot -Dtest -e "select * from t2;" -H
<TABLE BORDER=1><TR><TH>id</TH></TR><TR><TD>1</TD></TR><TR><TD>1</TD></TR><TR><TD>3</TD></TR><TR><TD>1</TD></TR><TR><TD>3</TD></TR><TR><TD>1</TD></TR><TR><TD>2147483647</TD></TR><TR><TD>3</TD></TR><TR><TD>1</TD></TR><TR><TD>2147483647</TD></TR><TR><TD>3</TD></TR></TABLE>

在这里插入图片描述

生成xml格式,特别适合程序捞取数据并传输

[root@ufo128 tmp]# mysql -uroot -Dtest -e "select * from t2;" -X

在这里插入图片描述
-N 跳过不显示输出列名,-s不显示输出分隔符

[root@ufo128 tmp]# mysql -uroot -Dtest -e "select current_user();" 
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
[root@ufo128 tmp]# mysql -uroot -Dtest -e "select current_user();" -N
+----------------+
| root@localhost |
+----------------+
[root@ufo128 tmp]# mysql -uroot -Dtest -s -e "select current_user();" -N
root@localhost

-V 查看mysql版本

[root@ufo128 tmp]# mysql -V
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

一个简单shell脚本示例

#! /bin/bash

# 登录mysql,不输出分隔符,不显示列名,可用shell传递变量
# 数据库与shell来回切换使用命令

mysql=`which mysql`
table_name="mysql.user"

${mysql} -N -s << EOF

system echo ""
select current_user();

system echo ""
select now();

system echo ""
select host,user from ${table_name};

system echo ""
system echo ${mysql}
system echo ${table_name}
EOF


# 也可以追加到文件,进行后续文件处理
${mysql} -N -s >> 6666.sql << EOF
system echo ""
select current_user();
EOF

cat 6666.sql

# 也可以直接利用选项输出,或利用重定向输入文件等等
${mysql} -N -s -e "select current_user();" >> 66666.sql

cat 66666.sql

# 也可以登录后加载执行sql文件, source AAA.sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值