Windows下MySQL 5.7.17壓縮版安裝過程的坑

幺蛾子,原來好端端的MySQL突然間不能用了。於是重新下載了最新的MySQL 5.7.17 Community 壓縮版 for Windows 64-bit:

Download MySQL Community Server

然後解壓到安裝目錄(如C:ProgMySQL)。接下來複制my-default.ini為my.ini,修改my.ini如下:

[mysql]ndefault-character-set=utf8mb4nn[mysqld]nbasedir = C:ProgMySQLndatadir = C:ProgMySQLdatanport = 3306nmax_connections=200ncharacter-set-server=utf8mb4ncollation-server=utf8mb4_general_cindefault-storage-engine=INNODBnjoin_buffer_size = 128Mnsort_buffer_size = 2Mnread_rnd_buffer_size = 2M nsql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESn

之後用「管理員身份」打開cmd——「管理員身份」這很重要,進入安裝目錄安裝MySQL服務:

C:ProgMySQLbin>mysqld installnService successfully installed.n

然後啟動MySQL服務:

net start mysqln

剛開始以為就這麼簡單,可是幺蛾子的卻報錯了:

如果是通過Windows系統的「服務」啟動,則提示:

問題出得實在是心塞不已,查了許久,原來是:

If you installed MySQL using the Noinstall package, you may need to initialize the data directory:

  • Windows distributions prior to MySQL 5.7.7 include a data directory with a set of preinitialized accounts in the mysql database.

  • As of 5.7.7, Windows installation operations performed using the nNoinstall package do not include a data directory. To initialize the ndata directory, use the instructions at Section 2.10.1.1, 「Initializing the Data Directory Manually Using mysqld」.

具體可參考這兩個鏈接:

  • 2.3.5.4 Initializing the Data Directory
  • 2.10.1.1 Initializing the Data Directory Manually Using mysqld

原因找到了,那我們來手動Initialize Data Directory一下啊:

mysqld --defaults-file=C:ProgMySQLmy.ini --initialize-insecuren

然後依次:

net start mysqlnmysql -u root -pn

熟悉的mysql>應該就出來了。

希望對遇到類似坑的人有所幫助,究其原因就是5.7.7及以後的壓縮包版本,更改為需要手動Initialize Data Directory了。

技無一招鮮,坑要一路填。

我的環境:

  • Windows 10 64-bit
  • MySQL Community Server 5.7.17 for Windows (x86, 64-bit), ZIP Archive

---------------(分割線,以上MySQL 5.7.17就算安裝完畢了。)---------------

最後手賤,搞個SQLAlchemy測試MySQL:

"""SQLAlchemy操作MySQL測試"""nnfrom sqlalchemy import create_engine, Table, Column, Integer, MetaDatanfrom sqlalchemy.dialects.mysql import CHARnfrom sqlalchemy.sql import selectnnENGINE = create_engine(mysql+pymysql://root:@127.0.0.1:3306/test?charset=utf8mb4)nnCONN = ENGINE.connect()nnUSERINFO = Table(userinfo,n MetaData(),n Column(id, Integer, primary_key=True, autoincrement=True),n Column(name, CHAR(24, charset=utf8mb4)),n mysql_charset=utf8mb4)nnUSER = select([USERINFO])nnRESULT = CONN.execute(USER)nnfor row in RESULT:n print(row.name)nnRESULT.close()nCONN.close()n

結果發現輸出結果的同時有個報警:

Warning: (1366, "Incorrect string value: xD6xD0xB9xFAxB1xEA... for column VARIABLE_VALUE at row 480")

這是怎麼回事呢?要說各種字符集設置都檢查n次,應該沒啥問題了......

無數次思考、試驗中,發現了啥?發現了啥?發現只要show variables like %charac%;一下,就會出來一個告警!

再來看看這個這個Warning:

不正是它嗎?MySQL的Bug莫不是?!OMG!

好吧!重回MySQL 5.6.35!

告警不見了!

接著重新建庫、建表,測試程序:

這下OK了,最終還是兜了一圈回到了MySQL 5.6.35。

安靜地寫Python,沒人吵,也不像前端撕來撕去的——歲月靜好、Python靜好。

最後贊一下Visual Studio Code:

我的博客:2gua.info/

推薦閱讀:

優秀開源項目kombu源碼分析之registry和entrypoint
Python從零開始系列連載(14)——Python程序的基本控制流程(中)
你真的了解Python中的日期時間處理嗎?
Beautiful Soup實踐
[11] Python條件判斷語句(二)

TAG:MySQL | Python | 软件 |