對於碼農一族來講,新入手電腦後,工具安裝,環境搭建是爲必備功課。環境搭很差工具裝不全,後續的工做開展那就會有至關多的痛點,也會耗去至關多的時間和精力。近日,博主在安裝 Mysql 數據庫的過程當中,一番探究,發現平日裏最基本的操做,也有不少值得總結的地方,爲免於時間的重複性浪費,因而有了如下的內容分享。先來問問你本身,平時安裝數據庫的時候,都嘗試過哪幾種方式?博主稍微一探究,發現還真很多,好比 Windows 上能夠程序安裝也能夠解壓免安裝使用;Linux系統能夠用 Yum安裝,二進制文件安裝,源碼編譯安裝等;更還有一些方式,好比安裝虛擬機的時候能夠選擇 MySQL做爲預裝軟件安裝同虛擬機一塊兒安裝,再好比世界上最好的語言 PHP 中有phpStudy 程序集成包,安裝該包以後也就順帶安裝上了MySQL服務,等等。經過簡單的發散,你會發現,雖然都是以安裝同一種工具爲目的,可是技術的實現方式卻有N多種,因此,騷年們,技術路上永遠不要侷限在會某種技術,而是要儘量多的尋找替代方案、更優方案,否則出去裝逼都沒點逼數,這怎麼行!由於平時經常使用的就是 Windows 和 Linux 這兩種操做系統,因此博主就來總結下在這兩種系統下的Mysql的幾種常見的安裝方式。(下載入口)php
根據上面的連接入口,進入官網下載頁面後,找到下圖中對應的下載位置 。程序安裝版是官網推薦的安裝版本,點擊 推薦下載區域 連接到安裝版下載頁,選擇對應的安裝包,點擊下載,在新界面不用登陸或註冊,直接點擊開始下載便可,下載完安裝程序後執行安裝程序就行。這種安裝方式有點傻瓜式的,是不少初學者最開始接觸的安裝方式,博主也是第一次學習數據庫的時候安裝過一次,後面發現有免安裝的方式後,就基本再也不使用此種安裝方式了,由於這種方式一旦沒有安裝成功或者要卸載的話還要刪註冊表之類的比較麻煩,因此我的不是特別喜歡這種方式,這裏就再也不演示,看官能夠百度下其餘網友的分享教程自行嘗試——html
這就是比較綠色的版本了,下載流程如上圖,與 msi 版相似,無需多言。雖然看起來很簡單,但布衣博主在一番折騰後仍是發現,因爲版本迭代(MySQL在 5.7.x 後就直接跳躍式的以大版本 8.x.x 的方式發佈),MySQL 的不一樣版本解壓安裝是很不同的,因此博主特地下載了三個不一樣的大版原本比較:mysql
從三個版本 zip 包的解壓目錄結構能夠看到很大的區別,其實只有 5.6.x 版本才稱得上是真正的綠色版,解壓後運行 bin 目錄下的 mysqld.exe ,你就能夠從任務管理器中找到 mysql 的進程了,也能直接經過客戶端工具鏈接數據庫(默認 root 用戶,密碼爲空),而 5.7.x 和 8.0.x 版本並不包含默認配置文件,也不能直接mysqld.exe 啓動使用。不過,沒有默認文件也無所謂,由於 mysql 服務本就是按照默認參數來運行的,沒法直接運行的真正緣由是缺乏數據目錄 data (若是要自定義默認值文件名也是能夠更改的),這是 mysql 的數據目錄,沒有數據目錄 mysql 服務就沒法啓動,執行mysqld.exe 命令窗只是一閃而過,服務進程也徹底起不來。這裏不是說你新建一個 data 目錄就能夠,目錄不用你本身建,只須要以管理員權限運行cmd 在 bin 目錄下執行 初始化數據目錄的 命令 mysqld --initialize (會隨機生成密碼,命令後跟 --console 就能夠看到生成的密碼信息)或 mysqld --initialize-insecure( 免密) 便可自動生成數據目錄。數據目錄初始化後再執行 mysqld.exe 便可啓動 mysql服務了。尤爲說明, mysqld --initialize 生成的隨機密碼是被標記爲已過時的過時密碼,客戶端工具是沒法用過時命令登陸的,只能用命令行先登陸進行密碼修改後才能進行額外操做,修改密碼命令爲:alter user 'root'@'localhost' identified by '新密碼'; 下圖爲部分操做示例:linux
再來講說布衣博主的不爽吧。針對網上大多數的教程中一上來就不講原因的說要安裝服務,並且還強調用管理員身份,還要配置什麼 my.ini文件等等,人云亦云,千篇一概,但就是不講那樣作的原因,博主真心以爲方——這寫博客都不動腦子不用走心的嗎?而按照本文上面的演示,明明就是開箱即用的操做啊,幹嗎還要要畫蛇添足呢? 爲此,博主要在這裏根據官網來解釋一下不少教程中無理由的操做。算法
① 爲何要安裝爲 Windows 服務且要求管理員身份 ?sql
官方解釋中有這樣的話:在Windows上,運行MySQL的推薦方法是將其添加爲Windows服務,以便在Windows系統啓動和中止時自動啓動和中止。。。一般,要將MySQL添加到Windows服務,您應該使用具備管理員權限的賬戶登陸。爲避免衝突,建議從命令行執行添加或刪除服務操前先關閉已經在運行的MySQL"服務"程序。簡單來講就是爲了方便服務開機自啓,你能夠經過 mysqld -install 將mysql 安裝爲系統服務。數據庫
② 配置文件 my.ini或者my.cnf 是必需要有的嗎?windows
官方文檔是這樣表述的:從MySQL 5.7.18開始,my-default.ini
再也不包含在分發包中或由分發包安裝...若是沒有配置文件,服務器只會以其默認設置啓動。安全
Linux做爲文件系統,Linux系統因爲衍生版本比較多,不一樣版有各自適用的包管理工具(如 rpm,apt 等)和壓縮包格式,本文不作大而全的歸納,只選取經常使用的紅帽係爲例,介紹兩種最經常使用的安裝方式方式。bash
① 環境說明:CenOS 6.5 + MySQL 8;
② 請確保安裝環境乾淨,若是以前有安裝過MySQL或MariaDB,檢查是否相應的配置文件存在,如/etc/my.cnf文件或/etc/mysql目錄,刪除之;
預編譯過的二進制文件其實就是對應了Windows上的壓縮文件,去下載頁面選擇 Linux Generic 這個預編譯的二進制通用版本下載,結合官網的安裝文檔並經博主反覆實踐,遂有如下流程說明:
# 查看本身系統的預編譯環境是否匹配要下載的二進制編譯文件版本
rpm -qa glibc
# 解壓二進制文件到/usr/local目錄(官方推薦的目錄),若是由於系統差別不能解壓xz格式文件,請嘗試其它方式 如 xz -d xx.tar.xz tar -xvf mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz
# 解壓後包名很長,有些教程說更名,這裏推薦軟連接的方式,這樣保留了帶版本號目錄名便於查看和升級 ln -s mysql-8.0.15-linux-glibc2.12-x86_64 mysql # 爲了服務器的安全性,最好爲 mysql 服務新建單獨的用戶和組,並設置用戶禁止登錄 groupadd mysql useradd -r -g mysql -s /bin/false mysql
# 建立mysql-files目錄,按照官方說法,是爲了做爲 secure_file_priv系統變量的值,使得導入和導出操做限制爲特定目錄
mkdir mysql-files
# 將mysql-files目錄的用戶權限更改成mysql用戶 mysql組 chown mysql.mysql mysql-files # 執行初始化操做,正常狀況下你會打印中找到隨機生成的一個臨時口令用來首次登陸 bin/mysqld --initialize --user=mysql
---------------執行完上訴動做就算安裝好了,如下爲可選當也頗有必要的操做---------------------------------
# 把啓動腳本放到開機啓動目錄
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 添加環境變量,這須要修改 /etc/profile(全局)或用戶目錄下的 .bash_profile 文件
echo 'export PATH=$PATH:/usr/local/mysql/bin'>>/etc/profile
source /etc/profile
① 安裝包下載的時候旁邊會有一個MD5下載簽名,有什麼用?
這主要是用來作文件校驗的,一般網絡傳輸都有丟包或者包來源不明存在被惡意篡改的狀況,拿到二進制包後能夠執行 md5sum+包名(其它算法如 sha1 校驗相似)命令對 包內容的完整性作校驗
② 爲何沒看到你用配置文件?
本着約定大於配置的原則,沒有特地強調個性化配置,若是想要顯示的指定配置文件,按照官網文檔,MySQL服務器會在啓動時會默認去尋找 /etc/my.cnf
或 /etc/mysql/my.cnf 文件(參見文末經常使用配置信息),請在此文件位置建立你的配置信息,也可在啓動時經過命令參數指定要加載的配置文件。
環境說明:CentOS 7 + MySQL 8;
這種安裝方式應該是最簡單的,缺點就是不能自定義安裝的目錄,並且要求服務器必須能能訪問公網或者說內網有搭建專門的yum倉庫。本博只以公網爲例講述,先去下載頁根據本身系統位數和內核版本選擇yum存儲庫,複製存儲庫連接地址,開始yum安裝——
# 在線下載 mysql 的 yum 存儲庫文件到本地
wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
# 查看 rpm 文件中的庫信息(可選操做)
rpm -qpl mysql80-community-release-el7-2.noarch.rpm
# 安裝 yum 存儲庫的 rpm 包
rpm -ivh mysql80-community-release-el7-2.noarch.rpm
# yum 安裝
yum -y install mysql-community-server
# 首次啓動數據庫,會初始化服務
systemctl start mysqld
# 設置開機自啓動
systemctl enable mysqld
# 查看隨機生成的密碼用來登陸
cat /var/log/mysqld.log
探究的過程當中遇到各類各樣的問題,有的解決了,持續更新到下文,有些尚有疑惑待探究;也誠摯歡迎博友留言提出問題或提供更好的解決方案,互助共享,技術之源!
① 臨時密碼登陸並重置密碼後命令行的方式能夠登陸並進行相應操做,可是客戶端工具仍是沒法鏈接,爲何?
這主要是針對 8.0.x 的版本。由於最新版本將密碼的認證插件由以前的 mysql_native_password 改爲了 caching-sha2-password,而不少鏈接工具對新版的兼容每每是滯後的,因此就出現了命令行能登陸數據庫可是客戶端工具卻沒法登陸的狀況。這種狀況 網上有不一樣的解決方案,好比升級客戶端插件,但最簡單通行的作法是使用命令 alter user ‘root’@’localhost’ identified with mysql_native_password by ‘新密碼’; 將用戶密碼的認證插件降級爲低版本的 mysql_native_password 模式便可——
② yum安裝中 wget yum存儲庫可能會報證書名不符或權限不足,沒法下載,按照提示去掉證書校驗並用超級管理員或臨時授予超管權限便可下載(以下圖)
附:配置文件(my.ini或my.cnf)信息:
[mysql] 命令行登陸默認設置
# 設置客戶端默認字符集
default-character-set=utf8
# 客戶端套接字 socket=/tmp/mysql.sock
#客戶端工具鏈接的默認設置
[client] 客戶端登陸默認設置 port=3306 [mysqld] 數據庫服務默認設置 # 設置服務端口 port = 3306
# 服務端套接字
socket=/tmp/mysql.sock
# 安裝基礎目錄,根據具體位置填寫 basedir= /usr/local/mysql # 數據庫數據目錄,根據具體位置填寫 datadir= /usr/local/mysql/data # 容許最大鏈接數 max_connections=20 # 服務器默認字符集 character-set-server=utf8 # 建立新表時將使用的默認存儲引擎 default-storage-engine=INNODB #綁定監聽地址 不寫或0.0.0.0(接收全部的IPv4請求)或 * (默認值,接收全部IPv4 或 IPv6請求)都表示容許遠程訪問,若是想禁止遠程訪問,可設置爲本機回送地址127.0.0.1 bind-address = 0.0.0.0 #容許鏈接失敗次數,防攻擊使用,默認 100 max_connect_errors=10 #跳過權限表加載,忘記密碼且安全性要求不高的狀況下使用,若是要求安全的修改密碼,請採用另外的方式,參見:https://www.cnblogs.com/ivictor/p/9243259.html #skip-grant-tables