天天看點

mysql8.0版本下服務無法以及啟動指令行mysqld –skip-grant-tables 失效,無法登陸的問題

服務無法啟動

如果在mysql的安裝路徑(C:\Program Files\MySQL\MySQL Server 8.0)中沒有配置檔案,則自己手動建立一個,檔案名為:my.ini

 在my.ini 檔案中 本人配置的如一下可運作選項:

# For advice on how to change settings please see

  # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

  # *** DO NOT EDIT THIS FILE. It’s a template which will be copied to the

  # *** default location during install, and will be replaced if you

  # *** upgrade to a newer version of MySQL.

  [client]

  #password = your_password

  port = 3306

  socket = /tmp/mysql.sock

  default-character-set=utf-8

  [mysqld]

  port = 3306

  basedir=“C:/Program Files/Mysql”

  # 設定mysql的安裝目錄

  datadir=“C:/Program Files/Mysql/data”

  # 設定mysql資料庫的資料的存放目錄,必須是data,或者是//xxx/data

  default-storage-engine=INNODB

  # 建立新表時将使用的預設存儲引擎

  socket = /tmp/mysql.sock

  sql-mode=“STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

  # SQL模式為strict模式

  #default-character-set=utf-8

  # 設定mysql伺服器的字元集

  #character-set-server=utf-8

  # 服務端使用的字元集預設為8比特編碼的latin1字元集

  max_connections=100

  # mysql伺服器支援的最大并發連接配接數(使用者數)。但總會預留其中的一個連接配接給管理者使用超級權限登入,即使連接配接數目達到最大限制。如果設定得過小而使用者比較多,會經常出現“Too many connections”錯誤。

  query_cache_size=0

  # 查詢緩存大小,用于緩存SELECT查詢結果。如果有許多傳回相同查詢結果的SELECT查詢,并且很少改變表,可以設定query_cache_size大于0,可以極大改善查詢效率。而如果表資料頻繁變化,就不要使用這個,會适得其反

  #table_cache=256

  # 這個參數在5.1.3之後的版本中叫做table_open_cache,用于設定table高速緩存的數量。由于每個用戶端連接配接都會至少通路一個表,是以此參數的值與 max_connections有關。當某一連接配接通路一個表時,MySQL會檢查目前已緩存表的數量。如果該表已經在緩存中打開,則會直接通路緩存中的表已加快查詢速度;如果該表未被緩存,則會将目前的表添加進緩存并進行查詢。在執行緩存操作之前,table_cache用于限制緩存表的最大數目:如果目前已經緩存的表未達到table_cache,則會将新表添加進來;若已經達到此值,MySQL将根據緩存表的最後查詢時間、查詢率等規則釋放之前的緩存。

  tmp_table_size=34M

  # 記憶體中的每個臨時表允許的最大大小。如果臨時表大小超過該值,臨時表将自動轉為基于磁盤的表(Disk Based Table)。

  thread_cache_size=8

  # 緩存的最大線程數。當用戶端連接配接斷開時,如果用戶端總連接配接數小于該值,則處理用戶端任務的線程放回緩存。在高并發情況下,如果該值設定得太小,就會有很多線程頻繁建立,線程建立的開銷會變大,查詢效率也會下降。一般來說如果在應用端有良好的多線程處理,這個參數對性能不會有太大的提高。

  #------------------------------MyISAM相關參數 begin------------------------------------------------

  myisam_max_sort_file_size=100G

  # mysql重建索引時允許使用的臨時檔案最大大小

  myisam_sort_buffer_size=68M

  key_buffer_size=54M

  # Key Buffer大小,用于緩存MyISAM表的索引塊。決定資料庫索引處理的速度(尤其是索引讀)

  read_buffer_size=64K

  # 用于對MyISAM表全表掃描時使用的緩沖區大小。針對每個線程進行配置設定(前提是進行了全表掃描)。進行排序查詢時,MySql會首先掃描一遍該緩沖,以避免磁盤搜尋,提高查詢速度,如果需要排序大量資料,可适當調高該值。但MySql會為每個客戶連接配接發放該緩沖空間,是以應盡量适當設定該值,以避免記憶體開銷過大。

  read_rnd_buffer_size=256K

  sort_buffer_size=256K

  # connection級參數(為每個線程配置),500個線程将消耗500*256K的sort_buffer_size。

  #------------------------------MyISAM相關參數 end------------------------------------------------

  #-------------------------------# InnoDB相關參數 begin ---------------------------------------

  innodb_additional_mem_pool_size=3M

  # InnoDB用于存儲中繼資料資訊的記憶體池大小,一般不需修改

  innodb_flush_log_at_trx_commit =1

  # 事務相關參數,如果值為1,則InnoDB在每次commit都會将事務日志寫入磁盤(磁盤IO消耗較大),這樣保證了完全的ACID特性。而如果設定為0,則表示事務日志寫入記憶體log和記憶體log寫入磁盤的頻率都為1次/秒。如果設為2則表示事務日志在每次commit都寫入記憶體log,但記憶體log寫入磁盤的頻率為1次/秒。

  innodb_log_buffer_size=2M

  # InnoDB日志資料緩沖大小,如果緩沖滿了,就會将緩沖中的日志資料寫入磁盤(flush)。由于一般至少都1秒鐘會寫一次磁盤,是以沒必要設定過大,即使是長事務。

  innodb_buffer_pool_size=105M

  # InnoDB使用緩沖池來緩存索引和行資料。該值設定的越大,則磁盤IO越少。一般将該值設為實體記憶體的80%。

  innodb_log_file_size=53M

  # 每一個InnoDB事務日志的大小。一般設為innodb_buffer_pool_size的25%到100%

  innodb_thread_concurrency=9

  # InnoDB核心最大并發線程數

  #-------------------------------# InnoDB相關參數 end ---------------------------------------

注意:datadir屬性後的data檔案夾,一定不要自己手動建立,本人嘗試手動建立會有問題,如果自己建立了可以删除掉,再執行後面的操作。

3 在mysql5.7以上版本中預設沒有一個data目錄,即沒有初始化服務。需要先初始化mysql才可以啟動服務,否則會報 “服務沒有報告任何錯誤”,啟動失敗。

解決方法:

a 進入mysql的bin目錄;

b 執行mysqld --initialize-insecure ,第一次執行的話,時間會久一些,執行結束後沒有輸出資訊,檢視bin的同級目錄下會多出一個data檔案夾,裡面一堆檔案。

4 再次執行net start mysql指令啟動服務,發現啟動成功!

指令行問題

1、管理者權限登陸cmd,不會使用管理者登陸的請搜尋cmd,搜尋結果右鍵。

2、指令行輸入:net stop mysql;然後提示。服務停止中 --> 服務已停止,如出現其他錯誤請百度。

這隻是一個示例,請在服務中檢視服務具體名稱,比如我的就是mysql80。

  服務不會打開的請 win+R --> services.msc --> 回車,找到mysql開頭的服務名。
           

3、由于mysqld –skip-grant-tables實測在mysql8.0中已失效,現使用mysqld --console --skip-grant-tables --shared-memory

4、另外開一個cmd,使用mysql直接無密登入。

繼續閱讀