MySQL工具【mysql 客户端连接工具】
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 distributionCopyright (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_12345602. 客戶端字符集選項
作為服務器的字符集選項,這個選項也可以配置在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 distributionCopyright (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 root05. 錯誤處理選項
-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不顯示輸出分隔符
-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 << EOFsystem 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(); EOFcat 6666.sql# 也可以直接利用選項輸出,或利用重定向輸入文件等等 ${mysql} -N -s -e "select current_user();" >> 66666.sqlcat 66666.sql# 也可以登錄后加載執行sql文件, source AAA.sql總結
以上是生活随笔為你收集整理的MySQL工具【mysql 客户端连接工具】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UML九种图 之 包图和对象图
- 下一篇: linux cmake编译源码,linu