bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

mysql怎么修復配置,mysql 優化配置

面試官:MySQL權限表損壞導致無法啟動怎么辦?

一、背景

成都創新互聯公司致力于網站建設、網站設計,成都網站設計,集團網站建設等服務標準化,推過標準化降低中小企業的建站的成本,并持續提升建站的定制化服務水平進行質量交付,讓企業網站從市場競爭中脫穎而出。 選擇成都創新互聯公司,就選擇了安全、穩定、美觀的網站建設服務!

近期,公司RDS云產品的MySQL Server版本進行升級,由目前使用的5.7.26版本升級到最新版本5.7.31;升級后測試同學發現:在MySQL創建用戶后,5.7.31版本重新啟動集群會出現啟動失敗的現象;而5.7.26版本在相同測試場景下是正常啟動的。這到底是為什么呢?

二、問題復現

2.1 實驗環境

2.2 操作步驟

按照測試同學的測試步驟,首先創建一個用戶:

然后關閉mysqld;這里需要介紹一下,我們集群的關閉方式是如下方式:

這種方式的內部實現類似于kill -9模式。所以我在線下環境使用kill -9的方式來復現,操作如下:

然后重啟mysqld,操作如下:

此時問題復現了,mysqld啟動失敗,我們查看了下error日志,信息如下:

根據報錯信息可以看出:MySQL的權限系統表發生了損壞,導致了mysqld啟動失敗;由于在MySQL 5.7及其之前版本該表是MyISAM引擎,且該引擎不支持事務,所以在mysqld異常崩潰會導致該類型引擎表的損壞;但在mysqld啟動時是有參數控制MyISAM引擎的恢復模式,且該參數在我們產品中也配置到了my.cnf中,如下所示:

2.3 參數解析

對于該參數的官方文檔的解釋如下:

設置MyISAM存儲引擎恢復模式。選項值是OFF、DEFAULT、BACKUP、FORCE或QUICK的值的任意組合。如果指定多個值,請用逗號分隔。指定不帶參數的選項與指定DEFAULT相同,指定顯式值" "將禁用恢復(與OFF值相同)。如果啟用了恢復,則mysqld每次打開MyISAM表時,都會檢查該表是否標記為已崩潰或未正確關閉。(只有在禁用外部鎖定的情況下運行,最后一個選項才起作用。)在這種情況下,mysqld在表上運行檢查。如果表已損壞,mysqld將嘗試對其進行修復。

服務器自動修復表之前,它將有關修復的注釋寫到錯誤日志中。如果您希望能夠在無需用戶干預的情況下從大多數問題中恢復,則應使用選項BACKUP,FORCE。即使某些行將被刪除,這也會強制修復表,但是它將舊的數據文件保留為備份,以便您以后可以檢查發生了什么。

全局變量,只讀變量,默認為OFF。

三、問題修復

這類MySQL用戶表損耗的問題解決方式也是有多種,我這里列舉其中一種:

(1)my.cnf中的[mysqld]標簽下添加skip_grant_tables,啟動時跳過加載系統字典。

(2)重啟mysqld,然后修復mysql schema下的所有表。

(3)在[mysqld]標簽下注釋或刪除掉skip_grant_tables,然后重啟mysqld。

此時mysqld是可以正常啟動的,無異常。

四、深入排查

在產品化中,以上修復方式很不優雅,只是作為臨時的解決方案;并且也存在一些令人疑惑的點:

帶著這些疑問,我們繼續排查出現該現象的原因;此時Google也沒有找到一些有效的信息,那么只能通過MySQL源代碼來尋找一些答案。

首先需要下載mysql 5.7.31版本的源代碼,并搭建mysql debug環境;具體步驟可以自動Google搜索一下,本文就不再贅述了。

在源代碼中搜索一下關鍵詞,用于打斷點的位置,然后進行調試:

定位到相關代碼,大概是sql/mysqld.cc的4958行,且存在if條件判斷,此時我們開始調試:

通過以上調試信息,可以判斷出acl_init函數返回的值為真;此時我們查看該函數的代碼 (sql/auth/sql_auth_cache.cc:1365):

根據該函數的注釋發現:該函數是初始化負責用戶/數據庫級特權檢查的結構,并從mysql schema中的表中為其加載特權信息;且return值為1代表的是初始化權限失敗。

此后開始逐步調試,觀察return相關信息,當調試到lock_table_names函數時,我們發現在Phase 3時return值為true,且根據代碼注釋發現true代表是Failure;具體代碼如下(sql/sql_base.cc:5549):

調試信息如下:

可以看到flags的值為0,而MYSQL_OPEN_SKIP_SCOPED_MDL_LOCK為宏定義值0x1000,與flags的值 做按位與操作,結果自然也是0,當然MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY也是如此;need_global_read_lock_protection是bool類型值,代表是否需要全局讀鎖的保護,這個值是在table- mdl_request.type不為MDL_SHARED_READ_ONLY發生改變;check_readonly函數相關信息 下面概述。

此時也查看了下MySQL 5.7.26版本代碼作為對比,發現lock_table_names函數下的Phase 3后的部分代 碼是在5.7.29版本后新增的。如果是git clone的MySQL代碼可以用git blame命令查詢文件變化的信息:

上述展示的信息中,最左側的列值為commit id為05824063和0405ebee,有興趣的同學可以詳細看下。

此功能解決的問題是 BUG#28438114: SET READ_ONLY=1 SOMETIMES DOESN'T BLOCK CONCURRENT DDL.;當然這個代碼的變更功能也在5.7 Release Notes中有所體現,如下所示( m/doc/relnotes/mysql/5.7/en/news-5-7-29.html ):

最后我們再查看下check_readonly函數,該函數是基于read_only和super_read_only狀態執行標準化檢查,是禁止(TRUE)還是允許(FALSE)操作。代碼如下(sql/auth/sql_authorization.cc:489):

此時第一反應就是去檢查my.cnf中是否包含read_only相關參數,檢查之后發現確實是使用了該參數, 如下:

此時注釋掉該參數,然后再次啟動mysqld,發現MyISAM表可以自動修復,且正常啟動;error log信息如下:

由于docker一些限制,我們在mysqld啟動會涉及兩次;所以解決該問題的方式為:第一次mysqld的啟動時先關閉read_only參數,第二次啟動時開啟read_only參數。之所以選擇默認開啟read_only參數, 是為了避免在mysqld啟動后,選主邏輯未完成時的保護措施;當然選主完成后,會自動對master執行 set global read_only=0 操作。

五、總結

六、附錄

調試的棧幀信息如下,有興趣的小伙伴可以研究下:

熟悉MySQL體系結構和innodb存儲引擎工作原理;以及MySQL備份恢復、復制、數據遷移等技術;專注于MySQL、MariaDB開源數據庫,喜好開源技術。

原文鏈接:

MySQL崩潰-修復損壞的innodb:innodb_force_recovery

Windows上安裝了XMAPP-controller之后間歇性出現MySQL無法啟動,查看日之后發現是innodb的報錯,報錯信息如下:

度娘上各種答案無法解決,后來直接看官方文檔,直接上解決方案:

踩坑指南 - - 操作配置前需要做這些操作:

1、配置my.cnf 配置innodb_force_recovery = 1 到 6 試到正確為止,重啟MySQL

2、導出數據腳本 mysqldump -uroot -p123456 test test.sql 導出SQL腳本。或者用Navicat將所有數據庫/表導入到其他服務器的數據庫中。 注意:這里的數據一定要備份成功。然后刪除原數據庫中的數據。

3、刪除ib_logfile0、ib_logfile1、ibdata1 備份MySQL數據目錄下的ib_logfile0、ib_logfile1、ibdata1三個文件,然后將這三個文件刪除

4、配置my.cnf 將my.cnf中innodb_force_recovery 這行配置刪除或者配置為innodb_force_recovery = 0,重啟MySQL服務

5、將數據導入MySQL數據庫 mysql -uroot -p123456 test test.sql;

或者用Navicat將備份的數據導入到數據庫中。 如果在導入數據過程中發生tablespace不存在的問題,請刪除data目錄相應database下的文件。

mysql下載老顯示重新配置

一、 下載MySQL 二、 安裝MySQL 三、 配置環境變量 解決MYSQL中安裝失敗之一 安裝失敗之starting the sever 第一種解決方法 :完全卸載mysql重新安裝 第二種解決方法:修改系統設置 一、 下載MySQL Mysql官網下載地址: MySQL :: Download MySQL Installer (Archived Versions) 二、 安裝MySQL 打開剛剛下載好的安裝包,開始安裝MySQL。 選擇I accept 然后點擊next進入下一步。 這里選擇是自定義安裝,所以直接選擇“Custom”,點擊“Next” “Developer Default”是開發者默認 “Server only”僅作為服務器安裝 “Clientonly”僅作為客戶端安裝 “Full”是完整安裝 “Custom”是自定義安裝 先選中“MySQL Server” 之后點擊下方的藍色“Advanced Options” 自定義安裝路徑和數據存放路徑,更改完成之后點擊“OK”注:雖說安裝在C盤也沒毛病,但是個人建議不要安裝到C盤,我安裝到了D盤 直接點擊“OK”注:這里因為選擇了我自己創建的路徑,故程序提示路徑已存在,是否要繼續 更改完成之后點擊“Next” 確認一下安裝路徑和數據存放路徑對不對,沒有問題的話就直接點擊Next 直接點擊“Yes” 先選中“MySQL Server5.7.31”,若電腦中沒有這個環境,會提示安裝“Microsoft Visual C++ 2013”環境,點擊“Execute” 勾選中之后點擊“Install” 安裝完成,點擊“Close” 看到這個對勾就說明這個環境安裝上了,直接點擊“Next” 直接點擊“Execute” 出現這個圖標就說明安裝成功了,直接點擊“Next” 直接點擊“Next” 直接點擊“Next” 選擇安裝類型個人學習研究的話選擇“Development Computer”則可以,我這里選擇是“Development Computer” Development Computer 適合個人開發學習使用的 Server Computer 是像主要用于像FTP,email,web服務器等等 Dedicated Computer 只用作MySQL服務器

文章標題:mysql怎么修復配置,mysql 優化配置
標題路徑:http://vcdvsql.cn/article38/heddsp.html

成都網站建設公司_創新互聯,為您提供響應式網站網站設計公司網站設計網站建設網站營銷網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名