本文內容 創建 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
+--------------------------------------------------------+----------------------------------------------------------------------------------+