源代碼安裝 MySQL 5.6.28

来源:http://www.cnblogs.com/liuning8023/archive/2016/02/03/5179409.html
-Advertisement-
Play Games

本文內容 創建 MySQL 用戶和組 解壓 MySQL 源代碼包 生成配置安裝文件 編譯和安裝 MySQL 配置文件 創建 MySQL 授權表 授權 啟動 MySQL 驗證安裝 設置訪問許可權 MySQL 開機自動啟動 最近做項目,出了一個事:之前我是用 Oracle 的,如果在 Windows 環境


本文內容

  • 創建 MySQL 用戶和組
  • 解壓 MySQL 源代碼包
  • 生成配置安裝文件
  • 編譯和安裝
  • MySQL 配置文件
  • 創建 MySQL 授權表
  • MySQL 目錄授權
  • 啟動 MySQL
  • 驗證 MySQL 安裝
  • 設置 MySQL 訪問許可權
  • MySQL 開機自動啟動
  • 設置環境變數
  • 參考資料

最近做項目,之前我是用 Oracle 的,如果在 Windows 環境,無論是安裝,還是配置,都很容易;Linux 環境沒試過,剛畢業時的那個公司,是 Linux 環境。一般等到開發的時候,資料庫早按完了,這活輪不到開發乾。現在,跳槽後,公司用 MySQL~遇到兩個問題:

  • 1,對一個包含二進位欄位的表,開發環境和測試環境的性能差異巨大,都是虛擬機。開發環境,Windows 平臺,執行 INSERT 很快,幾毫秒的事;而測試環境,Linux 平臺,執行 INSERT 慢到有點說不過去了,幾十毫秒,差距將近 30 倍。如果是 Oracle,前期的話,即便什麼不做,也很快;

網上有些人告訴我,應該查看一下機器的負載,比如,磁碟、IO 等,我倒是想,也不是產品環境,不至於差異這麼大吧,並且一直就沒快過~

  • 2,產品環境,70W 數據,執行 SELECT * FROM T1 WHERE FLAG=0 ORDER BY ID ASC,如果不為 FLAG 欄位建索引,執行時間都快 1 秒啦。這要是在 Oracle 上,絕對不可能發生~

這促使我自己在 Linux 上安裝 MySQL 源代碼。沒事時,練習、研究一下~

用源代碼方式安裝的好處是,編譯時,可以針對自己的硬體環境。只是安裝相比 RPM 要麻煩點,不過“會者不難,難者不會”,多練練就好了~

期間,最開始用的是 RPM 包,挺容易,嘗試了 Percona 和社區版,最後,又用源代碼安裝了一遍~

本文是以 MySQL 源代碼方式進行安裝。參考眾多資料,折騰好幾天,總算安上了~如果安裝時,缺少必要的包,就用 yum 安裝,比如 cmake、perl 等~

創建 MySQL 用戶和組


這步的目的,是執行 mysql_install_db 創建 MySQL 授權表,以及啟動 MySQL 時,都需要指定用戶名。所以,它是第一步。

  • 第一步:為以後的 MySQL 服務 mysqld 增加一個登錄的用戶和組,用戶名和組名均為“mysql”。如果用了其他名稱,在後面的操作中也要替換。
[root@vcyber usr]# groupadd mysql
 
[root@vcyber usr]# useradd -g mysql mysql

解壓 MySQL 源代碼包


假設你把 MySQL 源代碼包放在 /usr/local/src 目錄下。

  • 第二步:解壓 mysql 軟體包。
[root@vcyber /]# cd /usr/local/src
 
[root@vcyber src]# ls
 
mysql-5.6.28.tar.gz
 
[root@vcyber src]# tar zxf mysql-5.6.28.tar.gz
 
[root@vcyber src]# ls
 
mysql-5.6.28  mysql-5.6.28.tar.gz
 
[root@vcyber src]#

此時,會看見一個新目錄 mysql-5.6.28。

其中,解壓時,-x 為解壓;-z 為包有gzip屬性;-f 為使用檔案名字。當然,也可以用 -v 顯示解壓過程。

生成配置安裝文件


以下兩步任選其一,MySQL 早期版本,提供 Configure 文件以便在編譯安裝前進行配置;但在高版本已不提供該文件,而是採用 cmake。

假設,MySQL 安裝到 /usr/local/mysql 下。

  • 第三步:
    • 使用“Configure”命令配置安裝需要的系統環境,並生成安裝配置文件

[root@vcyber mysql-5.6.28]# ./configure \
> --prefix=/usr/local/mysql \
> --with-extra-charsets=all

如果採用 cmake 就跳過這步。

    • 使用“cmake”配置安裝需要的系統環境,並生成安裝配置文件

[root@vcyber mysql-5.6.28]# cmake \
> -DDEFAULT_CHARSET=utf8 
> -DDEFAULT_COLLATION=utf8_general_ci 
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DEXTRA_CHARSETS=all 

指定 MySQL 的安裝位置為“/usr/local/mysql”,以及採用的預設字元集等。

我在試驗時,如果不配置字元集的相關選項,在執行後面 mysql_install_db  那步時會報各種字元集錯誤。

cmake 具體參數,參看 MySQL Source-Configuration Options

編譯和安裝


編譯和安裝很簡單。

  • 第四步:使用“make”命令編譯源代碼文件,並生成安裝文件,再用“make install”命令安裝。
[root@vcyber mysql-5.6.28]# make && make install
或是編譯與安裝分開執行:
[root@vcyber mysql-5.6.28]# make 
[root@vcyber mysql-5.6.28]# make install

自此,MySQL 就會安裝到 /usr/local/mysql 下。

MySQL 配置文件


  • 第五步:創建 MySQL 資料庫伺服器的配置文件,可以使用源代碼包 support-files 目錄中的 my-default.cnf 文件作為模板,將其複製到 /etc/ 目錄下,重命名為“my.cnf”文件。
[root@vcyber /]# cd /usr/local/src/mysql-5.6.28
[root@vcyber mysql-5.6.28]# cp support-files/my-default.cnf  /etc/my.cnf

並用 vi /etc/my.cnf 修改該配置文件,內容如下。

[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
sock = /tmp/mysql.sock

模板文件不只是源代碼中有,安裝目錄中也有。

創建 MySQL 授權表


  • 第六步:如果還沒安裝過 MySQL,必須創建 MySQL 授權表。進入安裝目錄(/usr/local/mysql)下,執行 bin 目錄下的 mysql_install_db 腳本,初始化 MySQL 資料庫的授權表,其中,存儲了伺服器訪問允許。

當 MySQL 發生故障或需要新加一個 mysql 實例時,需要初始化 mysql 資料庫。使用 --help 可以查看支持的選項。

[root@vcyber mysql]# cd /usr/local/mysql
 
root@vcyber mysql]# scripts/mysql_install_db --user=mysql
 
Installing MySQL system tables...2016-02-02 02:42:33 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-02-02 02:42:33 0 [Note] ./bin/mysqld (mysqld 5.6.28) starting as process 28034 ...
2016-02-02 02:42:33 28034 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-02-02 02:42:33 28034 [Note] InnoDB: The InnoDB memory heap is disabled
2016-02-02 02:42:33 28034 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-02-02 02:42:33 28034 [Note] InnoDB: Memory barrier is not used
2016-02-02 02:42:33 28034 [Note] InnoDB: Compressed tables use zlib 1.2.3
2016-02-02 02:42:33 28034 [Note] InnoDB: Using Linux native AIO
2016-02-02 02:42:33 28034 [Note] InnoDB: Using CPU crc32 instructions
2016-02-02 02:42:34 28034 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-02-02 02:42:34 28034 [Note] InnoDB: Completed initialization of buffer pool
2016-02-02 02:42:34 28034 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
 
……
 

如果用 root 用戶運行上面的命令,應該使用 --user 選項,選項的值應與你在第一步為運行伺服器所創建的登錄賬戶(本例是 mysql 用戶)相同。如果用 mysql 用戶登錄,運行上面命令,可以忽略 --user 選項。

mysql_install_db 創建 MySQL 授權表後,需要手動重新啟動伺服器。

如果執行這步時報錯,說明你的第三步有問題。

MySQL 目錄授權


  • 第七步:將 MySQL 安裝目錄 bin 目錄下執行文件的所有權改為 root 用戶,數據目錄的所有權改為運行 mysqld 程式的 mysql 用戶。如果現在位於安裝目錄(/usr/local/mysql)下,命令行如下。
[root@vcyber mysql-5.6.28]# cd /usr/local/mysql
[root@vcyber mysql]# pwd
/usr/local/mysql
[root@vcyber mysql]# chown -R root .
[root@vcyber mysql]# chown -R mysql data
[root@vcyber mysql]# chgrp -R mysql .
[root@vcyber mysql]# ls -l
total 180
drwxr-xr-x  2 root  mysql   4096 Feb  2 02:23 bin
-rw-r--r--  1 root  mysql  17987 Nov 16 17:38 COPYING
drwxr-xr-x  5 mysql mysql   4096 Feb  2 09:20 data
drwxr-xr-x  2 root  mysql   4096 Feb  2 02:23 docs
drwxr-xr-x  3 root  mysql   4096 Feb  2 02:23 include
-rw-r--r--  1 root  mysql 105684 Nov 16 18:45 INSTALL-BINARY
drwxr-xr-x  3 root  mysql   4096 Feb  2 02:23 lib
drwxr-xr-x  4 root  mysql   4096 Feb  1 08:45 man
-rw-r--r--  1 root  mysql    943 Feb  1 08:46 my.cnf
-rw-r--r--  1 root  mysql    943 Feb  2 02:42 my-new.cnf
drwxr-xr-x 10 root  mysql   4096 Feb  1 08:45 mysql-test
-rw-r--r--  1 root  mysql   2496 Nov 16 17:38 README
drwxr-xr-x  2 root  mysql   4096 Feb  1 08:45 scripts
drwxr-xr-x 28 root  mysql   4096 Feb  1 08:45 share
drwxr-xr-x  4 root  mysql   4096 Feb  1 08:45 sql-bench
drwxr-xr-x  2 root  mysql   4096 Feb  1 08:45 support-files
[root@vcyber mysql]#

註意第三列的變化。另外,

  • “chown –R root .”,將文件的所有屬性改為 root 用戶。註意那個點,表示所有文件;
  • “chown –R mysql data”,將數據目錄的所有屬性改為 mysql 用戶;
  • “chgrp –R mysql .”,將組屬性改為 mysql 組。註意那個點,表示所有文件。

啟動 MySQL


到目前為止,所有需要的東西都安裝完成,可以啟動 MySQL 服務了。

  • 第八步:啟動 MySQL。當然,你可以讓 MySQL 開機時自動運行,後面介紹。
[root@vcyber ~]# cd /usr/local/mysql
[root@vcyber mysql]# bin/mysqld_safe --user=mysql
[root@vcyber mysql]#

驗證 MySQL 安裝


下麵,驗證一下,MySQL 服務是否正常。

  • 第九步:MySQL 資料庫服務啟動後,查看一下它的埠 3306 是否打開,如果看到以下結果表明 MySQL 服務啟動成功了。
[root@vcyber mysql]# netstat -tnl | grep 3306
tcp        0      0 :::3306                     :::*                        LIST                                                                                                 EN
[root@vcyber mysql]#
  • 第十步:使用 mysqladmin 驗證伺服器是否運行中。以下命令提供了簡單的測試,檢查伺服器是否已經啟動並能響應連接。
[root@vcyber mysql]# pwd
/usr/local/mysql
[root@vcyber mysql]# bin/mysqladmin version
bin/mysqladmin  Ver 8.42 Distrib 5.6.28, for Linux on x86_64
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Server version          5.6.28
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 9 min 7 sec
 
Threads: 1  Questions: 9  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.016
[root@vcyber mysql]#
[root@vcyber mysql]# bin/mysqladmin variables
+--------------------------------------------------------+----------------------------------------------------------------------------------+
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在最火的android開發框架 簡單描述一下 這一篇簡單描述尋找控制項以及事件的使用 1.該方法可以不用寫setconteview @EActivity(R.layout.activity_main)public class MainActivity extends Activity { 2.尋找控
  • 1、eclipse關聯源碼 步驟一:自已百度下載相應版本的源碼,我這裡是4.2也就是API=17的版本。 步驟二:找到你安裝sdk的目錄, G:\Program Files\adt-bundle-windows-x86\sdk\platforms\android-4.2 步驟三:在這個目錄下新建一個
  • 通訊錄導航欄源碼: 1.activity 1 package com.anna.contact.activity; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 imp
  • iPhone中GPS定位如何使用 關鍵詞 1.info.plist配置授權描述 2.引入庫 3.CLLocationManager的使用 info.plist配置 在info.plist中根據情況加入以下兩個string類型配置項,並填寫描述 1.NSLocationAlwaysUsageDescr
  • 緣由: 平時工作,因為懶於動筆的原因,也沒註重技術和經驗的積累,導致之前曾經研究過的問題現在又忘記了,所以要慢慢註重積累,那麼就從寫作開始,談談對工作中碰到的問題進行整理和歸納。 我們都知道,在Android中,想處理事件傳遞,可以用Handler+MessageQueue+Message+Loop
  • STPopup 為 iPhone 和 iPad提供了 STPopupController UINavigationController 彈出的風格。 特性: Extend your view controller from UIViewController, build it in your fam
  • 筆記,listview視圖總結 1 public class HomeEduMoreAdapter extends BaseAdapter { 2 3 private final String TAG = "HomeEduMoreAdapter"; 4 5 private static final
  • 1 package com.gzcivil.utils; 2 3 /** 4 * 同StringBuffer 5 * 6 * @author Dragon 7 * @time 2013-3-1 8 */ 9 public class StrBuffer { 10 private StringBuff
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...