① mysql 命令行你知多少
Usage: mysql [OPTIONS] [database] //命令方式
-?, --help //顯示幫助信息並退出
-I, --help //顯示幫助信息並退出
--auto-rehash //自動補全功能,就像linux裡面,按Tab鍵出提示差不多,下面有例子
-A, --no-auto-rehash //默認狀態是沒有自動補全功能的。-A就是不要自動補全功能
-B, --batch //ysql不使用歷史文件,禁用交互
(Enables --silent)
--character-sets-dir=name //字體集的安裝目錄
--default-character-set=name //設置資料庫的默認字元集
-C, --compress //在客戶端和伺服器端傳遞信息時使用壓縮
-#, --debug[=#] //bug調用功能
-D, --database=name //使用哪個資料庫
--delimiter=name //mysql默認命令結束符是分號,下面有例子
-e, --execute=name //執行mysql的sql語句
-E, --vertical //垂直列印查詢輸出
-f, --force //如果有錯誤跳過去,繼續執行下面的
-G, --named-commands
/*Enable named commands. Named commands mean this program's
internal commands; see mysql> help . When enabled, the
named commands can be used from any line of the query,
otherwise only from the first line, before an enter.
Disable with --disable-named-commands. This option is
disabled by default.*/
-g, --no-named-commands
/*Named commands are disabled. Use \* form only, or use
named commands only in the beginning of a line ending
with a semicolon (;) Since version 10.9 the client now
starts with this option ENABLED by default! Disable with
'-G'. Long format commands still work from the first
line. WARNING: option deprecated; use
--disable-named-commands instead.*/
-i, --ignore-spaces //忽視函數名後面的空格.
--local-infile //啟動/禁用 LOAD DATA LOCAL INFILE.
-b, --no-beep //sql錯誤時,禁止嘟的一聲
-h, --host=name //設置連接的伺服器名或者Ip
-H, --html //以html的方式輸出
-X, --xml //以xml的方式輸出
--line-numbers //顯示錯誤的行號
-L, --skip-line-numbers //忽略錯誤的行號
-n, --unbuffered //每執行一次sql後,刷新緩存
--column-names //查尋時顯示列信息,默認是加上的
-N, --skip-column-names //不顯示列信息
-O, --set-variable=name //設置變數用法是--set-variable=var_name=var_value
--sigint-ignore //忽視SIGINT符號(登錄退出時Control-C的結果)
-o, --one-database //忽視除了為命令行中命名的默認資料庫的語句。可以幫跳過日誌中的其它資料庫的更新。
--pager[=name] //使用分頁器來顯示查詢輸出,這個要在linux可以用more,less等。
--no-pager //不使用分頁器來顯示查詢輸出。
-p, --password[=name] //輸入密碼
-P, --port=# //設置埠
--prompt=name //設置mysql提示符
--protocol=name //使用什麼協議
-q, --quick //不緩存查詢的結果,順序列印每一行。如果輸出被掛起,伺服器會慢下來,mysql不使用歷史文件。
-r, --raw //寫列的值而不轉義轉換。通常結合--batch選項使用。
--reconnect //如果與伺服器之間的連接斷開,自動嘗試重新連接。禁止重新連接,使用--disable-reconnect。
-s, --silent //一行一行輸出,中間有tab分隔
-S, --socket=name //連接伺服器的sockey文件
--ssl //激活ssl連接,不激活--skip-ssl
--ssl-ca=name //CA證書
--ssl-capath=name //CA路徑
--ssl-cert=name //X509 證書
--ssl-cipher=name //SSL cipher to use (implies --ssl).
--ssl-key=name //X509 密鑰名
--ssl-verify-server-cert //連接時審核伺服器的證書
-t, --table //以表格的形勢輸出
--tee=name //將輸出拷貝添加到給定的文件中,禁時用--disable-tee
--no-tee //根--disable-tee功能一樣
-u, --user=name //用戶名
-U, --safe-updates //Only allow UPDATE and DELETE that uses keys.
-U, --i-am-a-mmy //Synonym for option --safe-updates, -U.
-v, --verbose //輸出mysql執行的語句
-V, --version //版本信息
-w, --wait //伺服器down後,等待到重起的時間
--connect_timeout=# //連接前要等待的時間
--max_allowed_packet=# //伺服器接收/發送包的最大長度
--net_buffer_length=# //TCP / IP和套接字通信緩沖區大小。
--select_limit=# //使用--safe-updates時SELECT語句的自動限制
--max_join_size=# //使用--safe-updates時聯接中的行的自動限制
--secure-auth //拒絕用(pre-4.1.1)的方式連接到資料庫
--server-arg=name //Send embedded server this as a parameter.
--show-warnings //顯示警告
② Linux tee命令作用是什麼
tree:以樹形結構顯示目錄下的內容
tree命令的中文意思為「樹」,功能是以樹形結構列出指定目錄下的所有內容,包括所有文件、子目錄及子目錄里的目錄和文件。
[root@oldboy ~]# rpm -qa tree #<==查詢tree命令是否安裝。
tree-1.5.3-2.el6.x86_64 #<==如果沒有顯示就執行下面的命令。
[root@oldboy ~]# yum -y install tree #<==安裝tree命令的yum命令。
第二步,調整系統字元集,防止樹形結構顯示亂碼。
範例2-9:不帶任何參數執行tree命令。
[root@oldboy etc]# cd ~
[root@oldboy ~]# tree #<==顯示當前目錄結構。
. #<==「.」以當前目錄為起點。
├── anaconda-ks.cfg
├── install.log
└── install.log.syslog
0 directories, 3 files
範例2-10:以樹形結構顯示目錄下的所有內容(-a的功能)。
[root@oldboy ~]# tree -a #<==帶-a參數顯示所有文件(包括隱藏文件)。
.├── anaconda-ks.cfg
├── .bash_history #<==在Linux系統中,以「.」點號開頭的文件為隱藏文件,默認不顯示。
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .cshrc
├── install.log
├── install.log.syslog
├── .mysql_history
├── .tcshrc
└── .viminfo
0 directories, 11 files
#<==上述命令結果僅供參考,能看到加粗的以點開頭的隱藏文件即可,列表的內容名字多少可能因系統的不同而有區別。
範例2-11:只列出根目錄下第一層目錄結構(-L功能)。
[root@oldboy ~]# tree -L 1 / #<==-L參數後接數字,表示查看目錄的層數,不帶-L選項默認顯示所有層數。
/
├── bin
├── boot
...省略若干行...
├── sys
├── tmp
├── usr
└── var
20 directories, 0 files
③ linux系統下怎麼在終端運行sql語句
主要有以下幾種方法:
1、將SQL語句直接嵌入到shell腳本文件中
代碼如下:
--演示環境
[root@SZDB ~]# more /etc/issue
CentOS release 5.9 (Final)
Kernel \r on an \m
root@localhost[(none)]> show variables like 'version';
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| version | 5.6.12-log |
+---------------+------------+
[root@SZDB ~]# more shell_call_sql1.sh
#!/bin/bash
# Define log
TIMESTAMP=`date +%Y%m%d%H%M%S`
LOG=call_sql_${TIMESTAMP}.log
echo "Start execute sql statement at `date`." >>${LOG}
# execute sql stat
mysql -uroot -p123456 -e "
tee /tmp/temp.log
drop database if exists tempdb;
create database tempdb;
use tempdb
create table if not exists tb_tmp(id smallint,val varchar(20));
insert into tb_tmp values (1,'jack'),(2,'robin'),(3,'mark');
select * from tb_tmp;
notee
quit"
echo -e "\n">>${LOG}
echo "below is output result.">>${LOG}
cat /tmp/temp.log>>${LOG}
echo "script executed successful.">>${LOG}
exit;
[root@SZDB ~]# ./shell_call_sql1.sh
Logging to file '/tmp/temp.log'
+------+-------+
| id | val |
+------+-------+
| 1 | jack |
| 2 | robin |
| 3 | mark |
+------+-------+
Outfile disabled.
2、命令行調用單獨的SQL文件
代碼如下:
[root@SZDB ~]# more temp.sql
tee /tmp/temp.log
drop database if exists tempdb;
create database tempdb;
use tempdb
create table if not exists tb_tmp(id smallint,val varchar(20));
insert into tb_tmp values (1,'jack'),(2,'robin'),(3,'mark');
select * from tb_tmp;
notee
[root@SZDB ~]# mysql -uroot -p123456 -e "source /root/temp.sql"
Logging to file '/tmp/temp.log'
+------+-------+
| id | val |
+------+-------+
| 1 | jack |
| 2 | robin |
| 3 | mark |
+------+-------+
Outfile disabled.
3、使用管道符調用SQL文件
代碼如下:
[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql
Logging to file '/tmp/temp.log'
id val
1 jack
2 robin
3 mark
Outfile disabled.
#使用管道符調用SQL文件以及輸出日誌
[root@SZDB ~]# mysql -uroot -p123456 </root/temp.sql >/tmp/temp.log
[root@SZDB ~]# more /tmp/temp.log
Logging to file '/tmp/temp.log'
id val
1 jack
2 robin
3 mark
Outfile disabled.
4、shell腳本中MySQL提示符下調用SQL
代碼如下:
[root@SZDB ~]# more shell_call_sql2.sh
#!/bin/bash
mysql -uroot -p123456 <<EOF
source /root/temp.sql;
select current_date();
delete from tempdb.tb_tmp where id=3;
select * from tempdb.tb_tmp where id=2;
EOF
exit;
[root@SZDB ~]# ./shell_call_sql2.sh
Logging to file '/tmp/temp.log'
id val
1 jack
2 robin
3 mark
Outfile disabled.
current_date()
2014-10-14
id val
2 robin
5、shell腳本中變數輸入與輸出
代碼如下:
[root@SZDB ~]# more shell_call_sql3.sh
#!/bin/bash
cmd="select count(*) from tempdb.tb_tmp"
cnt=$(mysql -uroot -p123456 -s -e "${cmd}")
echo "Current count is : ${cnt}"
exit
[root@SZDB ~]# ./shell_call_sql3.sh
Warning: Using a password on the command line interface can be insecure.
Current count is : 3
[root@SZDB ~]# echo "select count(*) from tempdb.tb_tmp"|mysql -uroot -p123456 -s
3
[root@SZDB ~]# more shell_call_sql4.sh
#!/bin/bash
id=1
cmd="select count(*) from tempdb.tb_tmp where id=${id}"
cnt=$(mysql -uroot -p123456 -s -e "${cmd}")
echo "Current count is : ${cnt}"
exit
[root@SZDB ~]# ./shell_call_sql4.sh
Current count is : 1
④ 資料庫中edit 和browse命令的區別
相當於在 MySQL 中使用 vi 命令來編輯 SQL 語句。這個功能比較雞肋,即使對於 vi 黨來說,效率也沒有多少提升。默認打開 edit 時,是編輯上一條 SQL 命令,退出 vi 後,輸入「;」後回車就會執行在 vi 中編輯的 SQL。這個日誌,可以發現我有一個 pager 操作,並且最後一個 edit 後有查詢結果輸出,但具體三個 edit 里的實際操作,我們都無從得知。最後一個 edit 後有查詢結果輸出說明了「tee 審計方式」會忽略 pager 的過濾作用,原輸出被審計下來了,但執行的原 SQL 命令躲過了審計,被隱藏起來了。
可以看出,審計插件的審計功能可以審計到伺服器真實執行的 SQL,這是 tee 審計方式不可比擬的。但審計插件並沒有發現我的 pager 操作,所以並不知道我導出了數據,只有 tee 審計方式發現了我導出了數據。
前面例子,我們可以看到,審計插件的審計日誌里,密碼是不顯示的。
而我們知道 binlog 里,密碼也是加密的。
MySQL客戶端的歷史記錄里,是不會記錄帶identified by 'xxx'語句的。
所以,以上方式都不會泄露密碼。
唯一會泄露明文密碼的地方,是「tee審計方式」。而經過測試,結論是使用 edit 可以讓明文密碼絕不泄露。所以,edit 操作可以隱藏密碼。