可以使用MySQL的“雙向數據管道”機制實現。雙向數據管道是一種實現MySQL中讀取和寫入數據的技術,可以實現mysqlc端讀取web端數據的功能,又能實現web端寫入mysqlc端數據的功能。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:國際域名空間、虛擬空間、營銷軟件、網站建設、鐘山網站維護、網站推廣。
mysqlcheck 是 MySQL 自帶的一個工具,作用就是保養 表,其實就是檢查,分析,修復和優化了。下面來介紹 mysqlcheck 工具的簡單使用,官方文檔在這里
以下的例子都是基于 MySQL 5.6 版本運行狀態下(mysqlcheck是個在線工具), 不同的存儲引擎對于這個命令的支持程度不同(指的是 check, repair, analyze, optimize),下面內容偏于操作,主要基于 innodb 引擎。
提示:OPTIMIZE 在大表時候可能會消耗很多時間,不清楚原理情況下請謹慎使用!!! innodb 一般不用 OPTIMIZE,請參見 Using MySQL OPTIMIZE tables? For InnoDB? Stop
檢查特定的表
注意在shell中執行,不是在mysql的交互環境下
如果應用中提示某個表壞了,使用下面的命令來檢查。
$ mysqlcheck -c newmandela order -uroot -pEnter password:
newmandela.order
OK
newmandela 是庫名, order是表名,還需要輸入用戶名和密碼
檢查一個庫中的所有表
$ mysqlcheck -c newmandela -uroot -p
Enter password:
newmandela.account OK
newmandela.alarm OK
newmandela.alarm_settings OK
newmandela.auth_group OK
newmandela.auth_group_permissions OK
newmandela.auth_permission OK...
MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客戶端中用來設置讀取超時時間的參數。在 MySQL 的官方文檔中,該參數的描述是這樣的:
MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.
也就是說在需要的時候,實際的超時時間會是設定值的 3 倍。但是實際測試后發現實際的超時時間和設置的超時時間一致。
而具體什么時候發生三倍超時,在文檔中沒有找到。所以對 MySQL 5.7.20 的源碼進行了一些分析。
使用 GDB 調試代碼找了實際與 mysql server 通信的代碼,如下:
其中 vio_read() 函數中,使用 recv 和 poll 來讀取報文和做讀取超時。net_should_retry() 函數只有在發生 EINTR 時才會返回 true。從這段代碼來看是符合測試結果的,并沒有對讀取進行三次重試。只有在讀取操作被系統中斷打斷時才會重試,但是這個重試并沒有次數限制。
從上面代碼的分析可以看出,代碼的邏輯和文檔的描述不符。于是在一頓搜索后,找到了一個 MySQL 的 BUG(Bug #31163)。該 BUG 報告了在?MySQL?5.0 中,MySQL c api 讀取的實際超時時間是設置的三倍,與現有文檔描述相符。于是對 MySQL 5.0.96 的代碼又進行分析。
同樣使用 GDB 找到了通信部分的代碼。這次找到了重試三次的代碼,如下:
這個版本的 MySQL api 的讀寫超時是直接使用的 setsockopt 設置的。第一次循環,在 A 點發生了第一次超時(雖然注釋寫的非阻塞,但是客戶端的連接始終是阻塞模式的)。然后在 B 點將該 socket 設置為阻塞模式,C 點這里重置 retry 次數。由于設置了 alarm 第二次以后的循環會直接進入 D 點的這個分支,并且判斷循環次數。作為客戶端時net-retry_count 始終是 1,所以重試了兩次,共計進行了 3 次 vioread 后從 E 點退出函數。
由上面的分析可知,MySQL 文檔對于該參數的描述已經過時,現在的 MYSQL_OPT_READ_TIMEOUT 并不會出現三倍超時的問題。而 Bug #31163 中的處理結果也是將文檔中該參數的描述更新為實際讀取超時時間是設定時間的三倍。也許是 MySQL 的維護者們在后續版本更新時忘記更新文檔吧。
調用mysql數據庫API。
去官網下載mysql c API庫文件,然后安裝一下,每個調用數據庫的函數都有相關解釋,直接參照函數解釋進行編程就行了。
注意編寫makefile的時候把相關依賴庫加入
分享名稱:怎么使用mysqlc 怎么使用nfc刷門禁卡
當前地址:http://vcdvsql.cn/article12/doieggc.html
成都網站建設公司_創新互聯,為您提供做網站、ChatGPT、網頁設計公司、云服務器、網站排名、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯