Post view

insoler網站在macOS High Sierra 10.13.6試安裝MySQL Community Server 8.0.12

雖然在今年04/20/2018就已經發表MySQL 8.0.11:

What's New in MySQL 8.0.11? Up to 2x Faster, Default to utf8mb

但其實我當時就有測試過,安裝好MySQL 8.0.11以後,竟然完全無法啟動MySQL!當然也就完全無法使用!更不可能從當時的MySQL 5.6.37直接升級到MySQL 8.0.11。

利用這次因為無法升級Web Server的Mac mini主機系統(主要的問題是海豚系統還不支援PHP 7),暫時只能繼續維持OS X El Capitan 10.11.6。只好山不轉路轉,換另外一個方式來進行。

我決定將擔任MySQL資料庫伺服器的Mac mini主機從OS X El Capitan 10.11.6升級到最新的macOS Mojave 10.14之前,先在備用的Mac mini Server主機安裝全新的、乾淨的macOS High Sierra 10.13.6,並測試一下目前最新版本的MySQL Community Server 8.0.12。

安裝MySQL Community Server 8.0.12

macOS的系統版本好像弄的很複雜,理由其實非常簡單!因為Oracle對MySQL Community Server伺服器,從MySQL的第一個版本發表以來,一直是只支援Linux,其次才是相容Windows。支援能力最差的當然就是Mac!

即使是最新的MySQL Community Server 8.0.12版本也不例外!Oracle官方在下載網頁上,有特別註明只有支援「macOS 10.13 (x86, 64-bit), DMG Archive」。如果你想要在macOS 10.11、10.12、最新的10.14上安裝MySQL 8.0.12的話,反正「MySQL Community」本來是免費的社群版,本來就沒有原廠支援!會遇到很多問題,不能使用也是理所當然!

為了避免遇到奇怪的問題,當然是按照Oracle官方的版本,下載MySQL 8.0.12的「macOS 10.13 (x86, 64-bit), DMG Archive」版本,而且只安裝在標準的「macOS 10.13」系統上(也就是非macOS Server版)。

可能是為了增強安全性,新的MySQL 8.0.12 Community預設是使用更強的加密連線方式。但是,我前面有提到,目前的海豚系統根本還不支援PHP 7,更不可能支援MySQL 8.0.1的增強加密連線方式!所以在安裝的時候,只能選第二個選項。

第一次試用MySQL 8.0.11的時候,竟然完全無法啟動MySQL!這次測試新的MySQL 8.0.12終於看到已經可以正常啟用!

你可以看到在系統設定裡面有2個綠燈,這個其實是非常糟糕的事情!Linux社群很顯然非常愛用「捷徑」!就算是老舊的MySQL 4、MySQL 5.6.37等任何版本,安裝好以後,會在電腦上看到2個MySQL檔案夾!

一個是叫做MySQL的捷徑,指向就在MySQL的捷徑旁邊,位於相同位置的MySQL 8.0.12檔案夾!任何版本都一樣,都會有這個問題!

如果是電腦上有安裝過舊的MySQL版本,還會看到舊的MySQL 5.6.37.bak這樣的檔案夾。如果你以為MySQL會自動幫你備份舊版,再升級到新的版本?那你就大錯特錯!

MySQL的安裝程式,就算是最新的MySQL 8.0.12也一樣,只會把舊的「MySQL 5.6.37」直接加上副檔名,更名為「MySQL 5.6.37.bak」然後安裝一個全新,裡面什麼資料都沒有的,甚至連使用者帳號都沒有,甚至連root帳號都是全新的MySQL!

要是你忘記事先備份資料庫,就急忙安裝MySQL 8.0.12的話,會發現下場悲慘!只會得到一個空空如也,什麼都沒有的全新MySQL!更加超級悲慘的事情還在後面!如果你想要按這個畫面上的「Uninstall」移除按鈕的話!

在Configuration組態設定頁面,全部都是安裝好的預設值,我沒有更改,也不想更改。因為完全使用標準設定,MySQL 8.0.12都無法正常運作的話,就絕對不是我的錯!

如果你不想要使用MySQL 8.0.12(最大的可能是根本不能用!),如果想要按下前面視窗畫面上的「Uninstall」移除按鈕的話,會看到這樣的畫面:

MySQL Uninstall自動清光整個「/usr/local/」檔案夾!

你可以點選「Also uninstall this preference pane, and lanuchd support files.」這個選項,在移除MySQL的時候順便移除系統面板上的MySQL圖示(其實這是放在macOS系統上的一個外掛程式,以便可以從macOS的系統控制面板來操作MySQL)。

MySQL 8.0.12會非常貼心的幫你移除系統面板上的MySQL圖示、剛剛安裝好的mysql捷徑與mysql-8.0.12的檔案夾,以及整個「/usr/local/」檔案夾的所有內容!

也就是說,你只要按「Uninstall」按鈕,MySQL 8.0.12就會把整個「/usr/local/」檔案夾,除了MySQL自己,還包括其他的所有檔案夾全部都刪除乾淨!而且無法復原!

只能說,幸好我是在「測試用Mac mini Server」上進行測試。否則整個「/usr/local/」檔案夾的內容,竟然被MySQL 8.0.12全數刪除,你絕對會發瘋!

對於沒有用過macOS電腦的人來說,當然是不知道「/usr/local/」檔案夾的重要性。雖然在Windows上沒有類似的檔案夾。你可以想像,這是一個相當於「C:\Program Files」的檔案夾。

如果只是為了移除一個MySQL 8.0.12,想不到MySQL的「Uninstall」竟然順便把整個「C:\Program Files」檔案夾內容全部刪除,一個不剩!只剩下空白的「C:\Program Files」檔案夾,接下來你會面對什麼樣的問題?應該是會「氣死」「氣瘋」!

MySQL Workbench 8.0.12

已經很久都沒有升級的MySQL Workbench也從MySQL Workbench 6.3.10跳過7.0版,一口氣升級到相同的MySQL Workbench 8.0.12版本。

如果你常常使用MySQL Workbench 6.3.10的話,應該會跟我一樣完全不知道MySQL Workbench 8.0.12有什麼差別?我怎麼看都幾乎是完全一樣的東西!

你可以在這個視窗畫面看到我使用的版本是目前最新的MySQL Community Server 8.0.12,而且有連線成功(要連線成功,還需要更改my.cnf設定)。

無法匯入備份的資料庫檔案!

前面提到,不管是什麼版本,MySQL的安裝程式只會安裝一個全新,裡面什麼資料都沒有的,甚至連使用者帳號都沒有,甚至連root帳號都是全新的MySQL!

所以每次在安裝新的升級版本,甚至是MySQL 8.0.11升級到MySQL 8.0.12,或是MySQL 8.0.13(目前還未釋出)都必須像全新安裝一樣,重新建立user帳號(從PHP連接MySQL時,需要連線的帳號)、刪除危險的root帳號(因為每一台MySQL都會有),再用新的user帳號登入,然後匯入事前匯出、備份好的insoler.sql檔案。

想不到匯入資料庫的動作,竟然不到1秒就完成了!這絕對不是MySQL 8.0.12匯入速度超快無比!而是一開始就產生錯誤訊息,根本無法匯入在MySQL 5.6.37匯出的資料庫檔案!

錯誤訊息的內容是:

12:23:35 Restoring /Users/brentsu/Downloads/insoler.sql

Error executing task: 'ascii' codec can't decode byte 0xe3 in position 31: ordinal not in range(128)

Error executing task local variable 'p1' referenced before assignment

12:23:35 Import of /Users/brentsu/Downloads/insoler.sql has finished

我去Google搜尋一下,意外發現「Error executing task: 'ascii' codec can't decode byte」的錯誤,竟然是在28 Feb 2011 9:08就有人遇到的老舊問題!

Error executing task 'ascii' codec can't decode byte 0xe6 in position 2: ordinal

這個問題,竟然到目前的最新版本都沒有解決!MySQL很明顯真的是「我的資料庫玩具」!

無法在MySQL Workbench 8.0.12匯入備份的資料庫,這裡又只有預設的sys資料庫,可說是空空如也!擺明了MySQL Community Server 8.0.12是完全不能使用的「垃圾資料庫」!

如果你會想說根本沒人會用MySQL Workbench 8.0.12視窗介面來管理MySQL。這我也可以想像!不管是Linux還是Windows,幾乎都是使用命令列來管理MySQL。例如:

MySQL8.0.12安装及配置

我相信應該是可以在Windows 10正常安裝使用MySQL 8.0.12。雖然我極度不願意使用命令列,但是沒辦法在最新的MySQL Workbench 8.0.12匯入備份資料庫(改用舊版MySQL Workbench 6.3.10也一樣),唯一的辦法當然是只能打開終端機,輸入這樣的指令:

mysql insoler < insoler.sql

因為我已經在my.cnf設定好帳號、密碼,所以這裡不需要輸入使用者帳號、密碼,就可以匯入資料庫。雖然這樣可以匯入成功,但很不幸的,MySQL 8.0.12仍舊無法正常使用!因為會在MySQL自己的log記錄檔看到這樣的錯誤訊息:

2018-10-16T04:03:08.067171Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.12)  MySQL Community Server - GPL.

2018-10-16T04:03:19.448092Z 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.12) starting as process 2262

[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0

2018-10-16T04:03:22.457660Z 0 [System] [MY-010931] [Server] /usr/local/mysql/bin/mysqld: ready for connections. Version: '8.0.12'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server - GPL.

2018-10-16T04:03:22.671309Z 0 [Warning] [MY-011302] [Server] Plugin mysqlx reported: 'Failed at SSL configuration: "SSL context is not usable without certificate and private key"'

我不知道detected broken kqueue; not using與Plugin mysqlx reported: 'Failed at SSL configuration等問題要如何解決,反正無法在視窗介面的MySQL Workbench正常使用的版本,我就絕對不使用!我絕對不會因此屈服,勉為其難使用「命令列來管理MySQL」!

由於MySQL 8.0.12不再相容某些設定,所以在my.cnf必須移除query_cache的設定(前面加上#註解,或是直接刪除),而且要改用舊版的加密連線方式。

# query_cache_limit = 32M

# query_cache_size = 128M

# query_cache_type = 1

# log_warnings = 2

default_authentication_plugin = mysql_native_password

關於mysqld 5.7.17.local.err的錯誤訊息

雖然已經是2016年12月14日、2017年2月16日與2017年7月3日的事情,但還是順便公布一下當時我無法解決的錯誤訊息!

2016-12-14T02:36:12.873251Z 0 [Warning] File Descriptor 1024 exceeded FD_SETSIZE=1024

2016-12-14T02:42:13.146830Z 0 [Warning] File Descriptor 1024 exceeded FD_SETSIZE=1024

2016-12-14T02:42:38.167731Z 0 [Warning] File Descriptor 1024 exceeded FD_SETSIZE=1024

....(省略幾百個相同的錯誤訊息)

2016-12-14T02:54:13.606629Z 0 [Warning] File Descriptor 1025 exceeded FD_SETSIZE=1024

2016-12-14T02:54:18.611809Z 0 [Warning] File Descriptor 1025 exceeded FD_SETSIZE=1024

016-12-14T10:59:15.464344Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2016-12-14T10:59:15.464564Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.

2016-12-14T10:59:15.464579Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.

2016-12-14T10:59:15.469960Z 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql/data/ is case insensitive

2016-12-14T10:59:15.647671Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key

2016-12-14T11:08:08.910094Z 236 [Note] Access denied for user '_devicemgr'@'localhost' (using password: NO)

這是MySQL 5.7.17的錯誤訊息:

2017-02-15T22:11:45.471085Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2017-02-15T22:11:45.471262Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.

2017-02-15T22:11:45.473293Z 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.7.17) starting as process 69137 ...

2017-02-15T22:11:45.475136Z 0 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql/data/ is case insensitive

關於mysqld 5.6.35的查訊速度緩慢的問題

這是在MySQL 5.6.35版本遇到的資料庫查訊速度太慢,超過1秒以上,平均都要花費1.3秒左右的問題!

/usr/local/mysql/bin/mysqld, Version: 5.6.35 (MySQL Community Server (GPL)). started with:

Tcp port: 3306  Unix socket: /tmp/mysql.sock

Time                 Id Command    Argument

# Time: 170217 10:32:39

# Query_time: 1.335483  Lock_time: 0.000350 Rows_sent: 1  Rows_examined: 474884

use insoler;

SET timestamp=1487295159;

SELECT `bx_photos_main`.`ID` as `medID`, `bx_photos_main`.`Categories` as `Categories`, `bx_photos_main`.`Owner` as `medProfId`, `bx_photos_main`.`Title` as `medTitle`, `bx_photos_main`.`Uri` as `medUri`, `bx_photos_main`.`Desc` as `medDesc`, `bx_photos_main`.`Tags` as `medTags`, `bx_photos_main`.`Date` as `medDate`, `bx_photos_main`.`Views` as `medViews`, `bx_photos_main`.`Status` as `Approved`, `bx_photos_main`.`Featured` as `Featured`, `bx_photos_main`.`Rate` as `Rate`, `bx_photos_main`.`RateCount` as `RateCount`, `bx_photos_main`.`Ext` as `medExt`, `bx_photos_main`.`Size` as `medSize`, `bx_photos_main`.`Hash` as `Hash`,  COUNT(`share1`.`ID`) as `Count`,  `sys_albums`.`ID` as `albumId`, `sys_albums`.`Caption` as `albumCaption`, `sys_albums`.`Uri` as `albumUri`, `sys_albums`.`AllowAlbumView`, `sys_albums_objects`.`obj_order`

                     FROM `bx_photos_main`

                     LEFT JOIN `bx_photos_main` as `share1` USING (`Owner`)

                     

                INNER JOIN `sys_albums_objects` ON `sys_albums_objects`.`id_object`=`bx_photos_main`.`ID`

                INNER JOIN `sys_albums` ON (`sys_albums`.`ID`=`sys_albums_objects`.`id_album` AND `sys_albums`.`Type`='bx_photos')

            

                     WHERE `bx_photos_main`.`Uri`='14405226653176' GROUP BY `share1`.`Owner` LIMIT 1;

你不需要想辦法幫我解決這些問題,因為這已經是2016年12月14日的問題!我的解決辦法非常簡單,就是跳過有問題的MySQL版本不使用,繼續等待沒有問題的新版本!同樣的,這次的MySQL 8.0.12也一樣不能使用!只能繼續等待新的版本。由於13不是好的數字,猜想應該也有一堆問題。大概要等到MySQL 8.0.15以後,才能在macOS Mojave 10.14上正常使用。

蘇言霖 2018/10/20 0 1451
Comments
Order by: 
Per page:
 
  • There are no comments yet
Rate
0 votes
Post info
蘇言霖
「超級懶貓級」社群網站站長
2018/10/20 (2178 days ago)
Actions