MySQL客戶端的進階操作

来源:https://www.cnblogs.com/greatsql/archive/2022/12/12/16975737.html
-Advertisement-
Play Games

GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者:土豆娃娃 文章來源:社區投稿 引言 作為一個MySQL資料庫從業者,我們最常用的工具就是mysql了,然而如何讓它變的更好用,你瞭解嗎? mysq ...


  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
  • GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。
  • 作者:土豆娃娃
  • 文章來源:社區投稿

引言

作為一個MySQL資料庫從業者,我們最常用的工具就是mysql了,然而如何讓它變的更好用,你瞭解嗎?

mysql Client Commands

作為連接MySQL資料庫的工具,mysql其實有很多非常有用的命令設置,有一些是我們日常使用的,比如\g、\G、\q,也有我們不太常用的\P、\T。今天分享一下我對這些設置的理解,希望能對大家在日常的工作中,有所幫助。

支持哪些設置

mysql提供了help命令,用以說明支持哪些命令的設置,我們先看一下

Great[(none)]> help ;

For information about Percona products and services, visit:
   http://www.percona.com/
Percona Server manual: http://www.percona.com/doc/percona-server/8.0/
For the MySQL Reference Manual: http://dev.mysql.com/
To buy Percona support, training, or other products, visit:
   https://www.percona.com/

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for 'help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
source_decrypt Execute an encrypted script file. Takes file name, decrypt key as arguments.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...) for the next query to pick up.

For server side help, type 'help contents'

?

顯示幫助信息,列出所有支持的操作命令,這個最簡單,就不做進一步說明瞭。

clear(\c)

MySQL手冊介紹為清除當前輸入的SQL語句,我個人更願意理解為撤銷已輸入SQL的執行。看下麵的例子:

Great[test]> select * from tt1;
+------+------+------+------+
| id   | dd   | c1   | c2   |
+------+------+------+------+
|    1 | aaa  | NULL | NULL |
|    2 | bbb  | NULL | NULL |
|    3 | NULL | NULL | NULL |
|    4 | 8    | NULL | NULL |
|    5 | NULL | NULL | NULL |
+------+------+------+------+
5 rows in set (0.01 sec)

Great[test]> delete from tt1 
    -> where id = 5 
    -> and c1 is not null
    -> 

當我輸入完上面的SQL時,發現邏輯未考慮全,不想執行這個SQL了,怎麼辦呢?這裡有好幾種解決辦法:你可以ctrl+c 終止命令的執行,也可以關閉當前的mysql客戶端,甚至關閉操作命令的電腦。然後有一種標準且簡單的方式,就是在命令的最後加上\c,就可以實現:

Great[test]> delete from tt1 
    -> where id = 5 
    -> and c1 is not null
    -> \c
Great[test]>

可以看到,在命令視窗最後輸入\c後,SQL不會被執行,並且重新啟動新的命令行接收客戶端輸入。需要註意的是:\c和需要取消的SQL間,不能有分隔符(預設為分號;),否則會先執行分隔符前面的SQL,然後再執行\c,這時就達不到取消已輸入SQL執行的效果了。

connect(\r)

重新連接資料庫服務端,支持重連過程中,指定database名字和連接主機。

這個功能看起來好像沒什麼新奇的,客戶端執行了SQL,就算連接超時了,預設情況下,自動就會重新連接服務端。

但是在MGR、主從複製場景下,如果所有實例的維護賬號都具有相同的用戶名、密碼、埠,那麼通過\r就很方便的切換多個實例進行維護,而不需要重新輸入其他連接信息

Great[test]> select @@report_host;
+---------------+
| @@report_host |
+---------------+
| 172.16.50.82  |
+---------------+
1 row in set (0.00 sec)

Great[test]> \r test 172.16.50.81
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Connection id:    911698
Current database: test

Great[test]> select @@report_host;
+---------------+
| @@report_host |
+---------------+
| 172.16.50.81  |
+---------------+
1 row in set (0.00 sec)

Great[test]> 

重連信息中的ip地址,也可以是在/etc/hosts中配置的主機名

Great[test]> select @@report_host;
+---------------+
| @@report_host |
+---------------+
| 172.16.50.81  |
+---------------+
1 row in set (0.00 sec)

Great[test]> \r test Great82
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Connection id:    2460607
Current database: test

Great[test]> select @@report_host;
+---------------+
| @@report_host |
+---------------+
| 172.16.50.82  |
+---------------+
1 row in set (0.00 sec)

Great[test]>

delimiter(\d)

自定義分隔符,在創建、修改存儲過程、函數、觸發器、事件、視圖都會用到,替換用於替換預設的分號分隔符。

edit(\e)

官網解釋說命令用於編輯當前輸入SQL命令,預設的編輯器是vi,也可以通過設置環境變數EDITOR來改變成其他的編輯器,比如調整為vim編輯器export EDITOR=$(which vim)

有這個命令後,輸出錯誤的SQL,就不需要再用\c終止了,而是直接在其後加上\e進行編輯,修改成正確的後,再執行。

比如我實際上想要執行的命令中tt2表不存在,那麼只需要通過\e更新SQL語句中的表名字就可以繼續執行,不需要再重新編輯整條SQL。

Great[test]> select * from test.tt2 \e

vi中替換表名字的操作就不再演示了,編輯後的執行情況如下:

Great[test]> select * from test.tt2 \e 
    -> ;
+------+------+------+------+
| id   | dd   | c1   | c2   |
+------+------+------+------+
|    1 | aaa  | NULL | NULL |
|    2 | bbb  | NULL | NULL |
|    3 | NULL | NULL | NULL |
|    4 | 8    | NULL | NULL |
|    5 | NULL | NULL | NULL |
+------+------+------+------+
5 rows in set (0.01 sec)

Great[test]>

另外在測試過程中,還發現\e可以對上一次執行的SQL進行編輯,即單獨執行\e時,其實是對上次執行的SQL命令做編輯。

Great[test]> \e
select * from test.tt1

這裡有人就會想到,我按向上的方向鍵,也能編輯上一條SQL呀,何必這麼麻煩,這裡有下麵的SQL情況,有多次換行,或者結構更複雜的SQL

Great[test]> select * from test.z1
    -> join test.z2 
    -> using(id)
    -> limit 3;
+------+------+------+
| id   | name | name |
+------+------+------+
|    1 | 11   | 11   |
|    2 | 22   | 22   |
|   11 | 11   | 11   |
+------+------+------+
3 rows in set (0.00 sec)


如果按上的方向鍵,整個SQL語句結構就發生了變化,本來規整的SQL語句,變成了很長的一行,很難調整,但是使用\e就不會有這種情況,會保持之前的輸入結構,更方便語句的調整

Great[test]> select * from test.z1
    -> join test.z2 
    -> using(id)
    -> limit 3;
+------+------+------+
| id   | name | name |
+------+------+------+
|    1 | 11   | 11   |
|    2 | 22   | 22   |
|   11 | 11   | 11   |
+------+------+------+
3 rows in set (0.00 sec)

Great[test]> \e

select * from test.z1
join test.z2
using(id)
limit 3

另外,有同學經常苦惱,我昨天才輸入的SQL命令,如果需要重新執行,又得輸入一遍,其實這裡也有一個小技巧,通過快捷鍵CTRL+R,輸入SQL中的關鍵信息(比如表名字),就能快速翻出對應的SQL,如果匹配出來的行不是想要的SQL,可以繼續按CTRL+R繼續上翻,直到查找到需要的SQL,當然,也有可能需要的SQL已經被清理出歷史記錄中,這種情況是無法被找到的。

ego(\G)

提交SQL語句到伺服器,並且將返回的數據列式顯示。

exit(\q)

退出mysql客戶端連接。

go(\g)

提交SQL語句到伺服器。

pager(\P)

設置pager規則,對查詢結果執行pager規則後,再輸出結果。這也是一個非常有用的設置,我們常常因為processlist結果太多而不方便查看,需要通過單行grep或者查詢information_schema.processlist來實現,有這個工具後,我們看看效果

Great[test]> show processlist;
+---------+-----------------+--------------------+------+---------+---------+--------------------------------------------------------+----------------------------------+------------+-----------+---------------+
| Id      | User            | Host               | db   | Command | Time    | State                                                  | Info                             | Time_ms    | Rows_sent | Rows_examined |
+---------+-----------------+--------------------+------+---------+---------+--------------------------------------------------------+----------------------------------+------------+-----------+---------------+
|       6 | event_scheduler | localhost          | NULL | Daemon  | 5019248 | Waiting on empty queue                                 | NULL                             | 5019247326 |         0 |             0 |
|      26 | system user     |                    | NULL | Connect | 5018577 | waiting for handler commit                             | Group replication applier module | 5018576436 |         0 |             0 |
|      29 | system user     |                    | NULL | Query   |    1010 | Slave has read all relay log; waiting for more updates | NULL                             |    1010045 |         0 |             0 |
|      30 | system user     |                    | NULL | Query   |    1010 | Waiting for an event from Coordinator                  | NULL                             |    1010045 |         0 |             0 |
|      31 | system user     |                    | NULL | Query   |  100958 | Waiting for an event from Coordinator                  | NULL                             |  100956966 |         0 |             0 |
|      32 | system user     |                    | NULL | Query   |  100958 | Waiting for an event from Coordinator                  | NULL                             |  100956966 |         0 |             0 |
|      33 | system user     |                    | NULL | Connect | 5018577 | Waiting for an event from Coordinator                  | NULL                             | 5018576419 |         0 |             0 |
|      34 | system user     |                    | NULL | Connect | 5018577 | Waiting for an event from Coordinator                  | NULL                             | 5018576418 |         0 |             0 |
|      35 | system user     |                    | NULL | Connect | 5018577 | Waiting for an event from Coordinator                  | NULL                             | 5018576417 |         0 |             0 |
|      36 | system user     |                    | NULL | Connect | 5018577 | Waiting for an event from Coordinator                  | NULL                             | 5018576415 |         0 |             0 |
|      37 | system user     |                    | NULL | Connect | 5018577 | Waiting for an event from Coordinator                  | NULL                             | 5018576413 |         0 |             0 |
+---------+-----------------+--------------------+------+---------+---------+--------------------------------------------------------+----------------------------------+------------+-----------+---------------+
14 rows in set (0.00 sec)

Great[test]> \P grep -vE 'system user|Sleep'
PAGER set to 'grep -vE 'system user|Sleep''
Great[test]> show processlist;
+---------+-----------------+--------------------+------+---------+---------+--------------------------------------------------------+----------------------------------+------------+-----------+---------------+
| Id      | User            | Host               | db   | Command | Time    | State                                                  | Info                             | Time_ms    | Rows_sent | Rows_examined |
+---------+-----------------+--------------------+------+---------+---------+--------------------------------------------------------+----------------------------------+------------+-----------+---------------+
|       6 | event_scheduler | localhost          | NULL | Daemon  | 5019255 | Waiting on empty queue                                 | NULL                             | 5019255045 |         0 |             0 |
| 2460607 | Great         | 172.16.50.81:59062 | test | Query   |       0 | init                                                   | show processlist                 |          0 |         0 |             0 |
+---------+-----------------+--------------------+------+---------+---------+--------------------------------------------------------+----------------------------------+------------+-----------+---------------+
14 rows in set (0.01 sec)

Great[test]>

pager後面可以跟很多的shell命令,比如awk、grep、wc ,對結果集的處理,當SQL不方便處理而shell方便處理時,不用再使用-e參數每次都進行連接,然後處理,比如主從結構對Slave_IO_Running、Slave_SQL_Running的監控,可設置pager grep -E 'Slave_IO_Running|Slave_SQL_Running'

pager的另外一個用途:經常有同學問,一些欄位中是否有包含某些特定字元串,正常的SQL處理是需要寫成col1 like '%abc%' or col2 like '%abc%'...,寫出來後SQL結構相對複雜,通過pager設置pager grep -i abc; select * from tab即可方便查看。

nopager(\n)

pager的設置是整個session生命周期內都生效,通過執行nopager進行關閉設置

prompt(\R)

修改mysql客戶端的命令行提示信息,支持顯示的提示信息非常多,具體可以參見MySQL官網介紹。修改mysql客戶端的命令行提示信息,也有好幾種方式:

1、設置操作系統環境變數MYSQL_PS1 export MYSQL_PS1= " \D_\h_\p_\u > ",格式為"時間_主機_埠_用戶名"

2、通過客戶端的命令prompt修改 \R \D_\h_\p_\u >

3、通過my.cnf的[mysql]域進行配置

[mysql]
prompt="\R \D_\h_\p_\u > "

4、如果session中通過\R xxx 臨時修改了命令行提示信息,可以通過單獨執行\R來恢復預設設置。

quit(\q)

退出當前session連接。

auto-rehash(#)

在使用mysql客戶端連接伺服器時,預設情況下會自動收集一些元數據信息,在後續輸入SQL命令時可以通過tab鍵補齊命令,比如補齊表名字、列名字。

Great[test]> select * from tt(此時按tab鍵)
tt1     tt1.c1  tt1.c2  tt1.dd  tt1.id  ttt     ttt.id

但是如果在session中新建了表,或者給表上新增了欄位,是無法通過tab鍵補齊的,這時通過\#命令刷新元數據信息,之後就能對新的DDL結構進行補齊

Great[test]> create table tt2 as select * from tt1;
Query OK, 5 rows affected (0.09 sec)
Records: 5  Duplicates: 0  Warnings: 0

Great[test]> select * from tt(此時按tab鍵)
tt1     tt1.c1  tt1.c2  tt1.dd  tt1.id  ttt     ttt.id  
Great[test]> \#
Great[test]> select * from tt(此時按tab鍵)
tt1     tt1.c1  tt1.c2  tt1.dd  tt1.id  tt2     tt2.c1  tt2.c2  tt2.dd  tt2.id  ttt     ttt.id  
Great[test]> select * from tt

source(.)

命令後需要跟一個文件名,\. filename會對filename文件中的內容按標準SQL進行解析執行。

status(\s)

輸出本次連接的相關信息及伺服器的一些信息,如果連接時指定了--safe-updates,還會輸出查詢限制相關的信息,\s輸出了很多有用的信息,可仔細閱讀。

[#8#root@Great81 ~ 20:26:13]8 m5 3306 --safe-updates 
greatsql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 916197

********

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Great[(none)]> \s
--------------
********

Connection id:  916197
Current database: 
Current user:  [email protected]
SSL:   Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Current pager:  stdout
Using outfile:  ''
Using delimiter: ;
**********
Protocol version: 10
Connection:  127.0.0.1 via TCP/IP
Server characterset: utf8mb4
Db     characterset: utf8mb4
Client characterset: utf8mb4
Conn.  characterset: utf8mb4
TCP port:  3306
Binary data as:  Hexadecimal
Uptime:   51 days 9 hours 5 min 13 sec

Threads: 16  Questions: 4354604  Slow queries: 339  Opens: 19188  Flush tables: 3  Open tables: 6095  Queries per second avg: 0.980

Note that you are running in safe_update_mode:
UPDATEs and DELETEs that don't use a key in the WHERE clause are not allowed.
(One can force an UPDATE/DELETE by adding LIMIT # at the end of the command.)
SELECT has an automatic 'LIMIT 1000' if LIMIT is not used.
Max number of examined row combination in a join is set to: 1000000

--------------

Great[(none)]>Great

system(!)

使用預設命令解釋器執行給定命令,簡單的說就是返回到操作系統執行\!之後的命令,比如下麵

Great[(none)]> \! date
2022年 11月 16日 星期三 20:32:34 CST
Great[(none)]> \! pwd
/root
Great[(none)]> \! cd /Great
Great[(none)]> \! vmstat -w
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
 r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
 1  0            0       358508            0      3117236    0    0   486    20    0    0   5   3  92   0   0
Great[(none)]>

在8.0.19之前,只支持在unix系統中使用該命令,到8.0.19後,在windows中也支持了該命令。

tee(\T)

將所有執行的SQL命令及輸出結果保存到指定文件中。這在調測、生產維護過程中,都是非常有用的一個功能,特別是一些安全要求高的環境中,控制台只能顯示幾十行命令時,想要查找之前執行的命令及執行的結果比較難,此時就能用上\T了。

Great[(none)]> \T /root/a.log
Logging to file '/root/a.log'
Great[(none)]> select * from test.tt1;
+------+------+------+------+
| id   | dd   | c1   | c2   |
+------+------+------+------+
|    1 | aaa  | NULL | NULL |
|    2 | bbb  | NULL | NULL |
|    3 | NULL | NULL | NULL |
|    4 | 8    | NULL | NULL |
|    5 | NULL | NULL | NULL |
+------+------+------+------+
5 rows in set (0.01 sec)

Great[(none)]> \! cat /root/a.log
Great[(none)]> select * from test.tt1;
+------+------+------+------+
| id   | dd   | c1   | c2   |
+------+------+------+------+
|    1 | aaa  | NULL | NULL |
|    2 | bbb  | NULL | NULL |
|    3 | NULL | NULL | NULL |
|    4 | 8    | NULL | NULL |
|    5 | NULL | NULL | NULL |
+------+------+------+------+
5 rows in set (0.01 sec)

Great[(none)]> 

如果想要記錄每個人登錄資料庫,做了哪些操作,由於tee不支持根據當前時間動態產生日誌文件名,我們可以這樣設置

## 首先創建一個log目錄
mkdir -p /Great/logs/client/

## 然後設置環境變數,為了連接安全,建議使用--login-path的方式進行登錄,我這裡使用的是gdb1登錄。

echo "alias mlogin='mysql --login-path=gdb1 --tee /Great/logs/client/\$(date +%Y-%m-%d_%H-%M-%S).log'" >> ~/.bashrc; source ~/.bashrc

[#15#root@Great81 /Great/logs/client 20:48:53]15 echo "alias mlogin='mysql --login-path=gdb1 --tee /Great/logs/client/$(date +\"%Y-%m-%d_%H-%M\").log'" >> ~/.bashrc; source ~/.bashrc

## 通過設置的alias登錄資料庫

[#16#root@Great81 /Great/logs/client 20:49:43]16 mlogin 
Logging to file '/Great/logs/client/2022-11-16_20-49.log'
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 916482
Great

Copyright (c) 2000, 2020, 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 tables from tpcc;
+------------------+
| Tables_in_tpcc   |
+------------------+
| bmsql_config     |
| bmsql_customer   |
| bmsql_district   |
| bmsql_history    |
| bmsql_item       |
| bmsql_new_order  |
| bmsql_oorder     |
| bmsql_order_line |
| bmsql_stock      |
| bmsql_warehouse  |
| datatypes1       |
| datatypes10      |
| datatypes11      |
| datatypes2       |
| datatypes3       |
| datatypes4       |
| datatypes5       |
| datatypes6       |
| datatypes7       |
| datatypes8       |
| datatypes9       |
+------------------+
21 rows in set (0.00 sec)

mysql>

我們發現指定的日誌目錄中,已經有了日誌文件,並且記錄了所有執行的SQL及輸出結果

[#9#root@Great81 ~ 20:51:43]9 cd /Great/logs/client/
[#10#root@Great81 /Great/logs/client 20:51:48]10 ll
總用量 8
-rw-r--r-- 1 root root  627 11月 16 20:48 2022-11-16_20-48.log
-rw-r--r-- 1 root root 3214 11月 16 20:50 2022-11-16_20-49.log
[#11#root@Great81 /Great/logs/client 20:51:48]11

notee(\t)

取消\T設置,不再記錄操作信息到日誌文件中。

use(\u)

切換當前連接的database。

warnings(\W)

在執行完SQL語句後,立即顯示warning信息,不需要再手動執行show warnings;了。

nowarnings(\w)

在執行完SQL語句後,不立即顯示warning信息,需要手動執行show warnings;才會顯示warning信息。

resetconnection(\x)

以新連接的狀態重新連接到伺服器,並且進行一些信息的清理及複位,不需要再次進行許可權驗證。主要影響如下信息:

  1. 回滾所有活動的事務,並重置自動提交模式。
  2. 所有DML鎖均已釋放。
  3. 所有TEMPORARY table 均已關閉(並刪除)。
  4. 會話系統變數將重新初始化。
  5. 用戶變數設置丟失。
  6. 準備好的語句被釋放。
  7. HANDLER關閉。
  8. LAST_INSERT_ID 置為 0。
  9. 用 GET_LOCK 釋放。

可以參考8.0.26的代碼libmysql.cc中4429~4444行

int STDCALL mysql_reset_connection(MYSQL *mysql) {
  DBUG_TRACE;
  if (simple_command(mysql, COM_RESET_CONNECTION, nullptr, 0, 0))
    return 1;
  else {
    mysql_detach_stmt_list(&mysql->stmts, "mysql_reset_connection");
    /* reset some of the members in mysql */
    mysql->insert_id = 0;
    mysql->affected_rows = ~(uint64_t)0;
    free_old_query(mysql);
    mysql->status = MYSQL_STATUS_READY;
    mysql_extension_bind_free(MYSQL_EXTENSION_PTR(mysql));
    return 0;
  }
}

query_attributes

通過query_attributes var1 value1 var2 value2來設置變數,然後通過mysql_query_attribute_string('var1')返回變數值value1,目前來看,並沒有發現特殊的使用方法,畢竟我們也可以通過set @var1='value1'來設置。

使用體驗

mysql Client Commands在某些場景下,可以極大的提高我們的操作效率,相對於完整的命令ego、pager、edit等,我更喜歡使用他們的簡寫命令\G、\P、\e,因為有時候完整命令不確定如何正確使用,會導致不生效,但是簡寫命令,是一定會生效的。

參考文章

MySQL 8.0 Reference Manual 4.5.1.2 mysql Client Commands

MySQL 8.0 Reference Manual 9.6 Query Attributes


Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過前面8篇文章的學習,我們已經學會了docker的安裝、docker常用的命令已經docker鏡像修改後提交的遠程鏡像倉庫及提交到公司的私服倉庫中。接下來,我們再來學學Docker另外一個重要的東西-容器數據捲。 我們先來看看一個場景:我們有多個docker容器需要使用到同一個數據,比如說A服務和 ...
  • Kibana 是用於在 Elasticsearch 中可視化數據的強大工具,是一種免費及開放的分析和可視化工具,可通過基於瀏覽器的界面輕鬆搜索,可視化和探索大量數據。本文主要包括 Kibana 的簡介及安裝;文中所使用到的軟體版本:Elasticsearch 8.5.1、Kibana 8.5.1、C ...
  • JZ43 整數中1出現的次數(從1到n整數中1出現的次數) 描述 輸入一個整數 n ,求 1~n 這 n 個整數的十進位表示中 1 出現的次數 例如, 1~13 中包含 1 的數字有 1 、 10 、 11 、 12 、 13 因此共出現 6 次 思路:暴力統計法 遍歷1到n的每個數字,然後對每個數 ...
  • 您好,我是@馬哥python說,一枚10年程式猿。 一、爬取目標 之前,我分享過一些B站的爬蟲: 【Python爬蟲案例】用Python爬取李子柒B站視頻數據 【Python爬蟲案例】用python爬嗶哩嗶哩搜索結果 【爬蟲+情感判定+Top10高頻詞+詞雲圖】"谷愛凌"熱門彈幕python輿情分析 ...
  • WebApiClient 介面註冊與選項 1 配置文件中配置HttpApiOptions選項 配置示例 "IUserApi": { "HttpHost": "http://www.webappiclient.com/", "UseParameterPropertyValidate": false, ...
  • less,more,vi 命令是 Linux 下查看文檔和日誌比較常用的命令。在使用不是那麼頻繁時,可能會忘記如何快速移動游標。為了增強記憶,這次就來一起過一下。 首先 less 命令,官方幫助我們用 less --help 可以查詢,條目還是比較多的。這裡只看比較常用的(命令區分大小寫): 用 e ...
  • Linux NGINX NGINX:engine X ,2002年開發,分為社區版和商業版(nginx plus ) 社區版:分為主線版(開發版,奇數),穩定版(偶數) Nginx官網:http://nginx.org NGINX的兩大功能:web伺服器、反向代理伺服器 NGINX和APACHE一樣 ...
  • 第二十六章 管理事務處理 本章介紹什麼是事務處理以及如何利用COMMIT和ROLLBACK語句來管理事務處理 事務處理 並非所有資料庫引擎都支持事務處理 常用的InnoDB支持 事務處理可以用來維護資料庫的完整性,它保證成批的MySQL操作要麼完全執行,要麼完全不執行。 例如給系統添加訂單的過程利用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...