1. 程式人生 > >MySQL 5.6.37源碼編譯安裝

MySQL 5.6.37源碼編譯安裝

-c ear 支持 AS copy sts linux make grep

MySQL 5.6.37 編譯安裝

什麽是數據庫?

簡單的說,數據庫(database)就是一個存放數據的倉庫,這個倉庫是按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯系)來組織、存儲的,我們可以通過數據提供的多種方法來管理數據庫裏的數據。

數據庫的種類

按照早起的數據庫理論,比較流行的數據庫模型有三種,分別為層次式數據庫、網絡式數據庫和關系型數據庫,而在當今的互聯網中,最常用的數據庫模型主要是兩種,即關系型數據庫和非關系型數據庫。

什麽是關系型數據庫?

關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。例如老男孩教育某一期的學生關系就是一個二元關系。在關系數據庫中,對數據的操作幾乎全部建立在一個或多個關系表格上,通過對這些關系的表格分類、合並、連接或選取等運算來實現數據的管理。
關系型數據庫誕生距今已有40多年了,從理論產生發展到顯示產品,例如:大家最常見的mysql和oracle數據庫,oracle在數據庫領域裏上升到了霸主地位,形成每年高達數百億美元的龐大產業市場,而mysql也是不容忽視的數據庫,以至於被oracle重金收購。

- 二維表格
- 市場占有量較大的為MySQL、oracle數據庫,互聯網運維最常用的就是MySQL。
- 通過SQL結構化查詢語言來存取、管理數據。
- 在保持數據一致性方面很強。ACID理論。

- 關系型數據庫的關系有:一對多,一對一,多對多。

什麽是非關系型數據庫?

非關系型數據庫也被稱為nosql數據庫,請註意,nosql的本意是"not only sql",指的是非關系型數據庫,而不是"NO SQL"的意思(沒有sql語句?),因此,nosql的產生並不是要徹底的否定關系型數據庫,而是作為傳統關系型數據庫的一個有效補充。Nosql數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。

- nosql不是否定關系數據庫,而是作為關系數據庫的一個重要補充。
- nosql為了高性能、高並發而生,忽略影響高性能、高並發的功能。
- nosql典型產品memcached(純內存)、rcdis(持久化緩存),mongodb

非關系型數據庫的分類:

- 鍵值存儲數據庫,典型的數據庫有:memcached、redis等
- 列存儲數據庫,典型的數據庫有:cassandra、hbase等
- 面向文檔數據庫,典型的數據庫有:mongodb等

選擇MySQL數據庫的原因

  - MySQL性能卓越,服務穩定。很少出現異常宕機。
  - MySQL開放源代碼且無版權制約,自主性及使用成本低。
  - MySQL歷史悠久,社區及用戶非常活躍,遇到問題,可以尋求幫助。
  - MySQL軟件體積小,安裝使用簡單,並且易於文虎,安裝及維護成本低。
  - MySQL品牌效應,使得企業無需考慮就直接用之,LAMP,LEMP流行架構
  - MySQL支持多種操作系統,提供多種API接口,支持多種開發語言,特別對流行的PHP語言有很好的的支持。

企業使用MySQL數據庫的一些建議:

  - 穩定版:選擇開源的社區版的穩定版GA版本。
  - 產品線:可以選擇5.1或5.5.互聯網公司主流5.5,其次是5.1和5.6
  - 選擇MySQL數據庫GA版發布後6個月以上的GA版本。
  - 要選擇前後幾個月沒有大的bug修復的版本,而不是大量修復bug的集中版本。
  - 最好 較長時間沒有更新發布的版本。
  - 要考慮開發人員開發程序使用的版本是否兼容你選的版本。
  - 作為內部開發測試數據庫環境,跑大概3-6個月的時間。
  - 優先企業非核心業務采用新版本的數據庫GA版本軟件。
  - 向DBA高手請教,或者在及技術氛圍好的群裏和大家一起交流,使用真正的高手們用過的GA版本產品。
  - 經過上述工序之後,若沒有重要的功能BUG或性能瓶頸,則可以開始考慮作為任何業務數據服務的後端數據庫軟件。

安裝環境準備

主機名 IP z主機說明
docker-1 192.168.56.11 MySQL主服務器
docker-2 192.168.56.12 MySQL從服務器

實驗環境檢查

[root@docker-1 src]# ip a   #查看IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:dd:9e:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.11/24 brd 192.168.56.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fedd:9ed9/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:dd:9e:e3 brd ff:ff:ff:ff:ff:ff
[root@docker-1 src]# 
[root@docker-1 src]# cat /etc/redhat-release    #查看系統版本
CentOS Linux release 7.3.1611 (Core) 
[root@docker-1 src]#
[root@docker-1 src]# hostname   #查看主機名
docker-1
[root@docker-1 src]#
[root@docker-1 ~]# ntpdate time1.alyun.com  #同步時間、docker-2也需要同步

軟件準備

[root@docker-1 etc]# cd /usr/local/
[root@docker-1 src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz  #下載MySQL的源碼包
[root@docker-1 src]# tar xf mysql-5.6.37.tar.gz #將下載的源碼包解壓到本地
[root@docker-1 src]# ll
total 31452
drwxr-xr-x 34 7161 31415     4096 Sep 16 11:38 mysql-5.6.37
-rw-r--r--  1 root root  32200158 Jun  2 23:54 mysql-5.6.37.tar.gz
[root@docker-1 mysql-5.6.37]# id mysql  #檢查系統是否存在mysql用戶
id: mysql: no such user     #如果不存在則創建mysql用戶
[root@docker-1 mysql-5.6.37]# groupadd -g 550 mysql 
[root@docker-1 mysql-5.6.37]# useradd -g mysql -u 550 mysql
[root@docker-1 mysql-5.6.37]# id mysql
uid=550(mysql) gid=550(mysql) groups=550(mysql)

安裝編譯前的依賴

[root@docker-1 mysql-5.6.37]# yum install cmake autoconf wget gcc-c++ gcc ncurses-devel -y
[root@docker-1 src]# cd mysql-5.6.37/ 
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1  -DMYSQL_UNIX_ADDR=/var/run/mysql/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all  -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci

執行完cmake之後、執行make和make install 整個過程時間較長、請稍等!

編譯參數詳解

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   #安裝路徑 
-DMYSQL_DATADIR=/usr/local/mysql/data \     #數據文件存放地
-DSYSCONFDIR=/etc \         #配置文件my.cnf存放地  
-DWITH_MYISAM_STORAGE_ENGINE=1 \    #支持MyIASM引擎  
-DWITH_INNOBASE_STORAGE_ENGINE=1 \  #支持InnoDB引擎    
-DWITH_MEMORY_STORAGE_ENGINE=1  \   #支持Memory引擎    
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysqld.sock \  #連接數據庫socket路徑   
-DMYSQL_TCP_PORT=3306 \     #數據庫端口號  
-DENABLED_LOCAL_INFILE=1 \  #允許從本地導入數據    
-DWITH_PARTITION_STORAGE_ENGINE=1 \ #安裝支持數據庫分區  
-DEXTRA_CHARSETS=all  \     #安裝所有的字符集    
-DDEFAULT_CHARSET=utf8  \   #默認字符  
-DDEFAULT_COLLATION=utf8_general_ci  

[root@docker-1 local]# cd /usr/local/mysql [root@docker-1 mysql]# ll #編譯後的文件 total 48 drwxr-xr-x 2 root root 4096 Sep 16 12:17 bin -rw-r--r-- 1 root root 17987 Jun 3 01:42 COPYING drwxr-xr-x 3 root root 17 Sep 16 12:17 data drwxr-xr-x 2 root root 52 Sep 16 12:17 docs drwxr-xr-x 3 root root 4096 Sep 16 12:17 include drwxr-xr-x 3 root root 4096 Sep 16 12:17 lib drwxr-xr-x 4 root root 28 Sep 16 12:17 man drwxr-xr-x 10 root root 4096 Sep 16 12:17 mysql-test -rw-r--r-- 1 root root 2496 Jun 3 01:42 README drwxr-xr-x 2 root root 29 Sep 16 12:17 scripts drwxr-xr-x 28 root root 4096 Sep 16 12:17 share drwxr-xr-x 4 root root 4096 Sep 16 12:17 sql-bench drwxr-xr-x 2 root root 130 Sep 16 12:17 support-files [root@docker-1 mysql]# chown -R mysql.mysql * #對當前目錄授權

數據庫初始化

初始化之前需要修改my.cnf文件、內容如下:
[root@docker-1 src]# less /etc/my.cnf
[mysql]
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
skip-grant-tables
explicit_defaults_for_timestamp=true
skip-name-resolve
port = 3306
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql
max_connections = 200
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid
!includedir /etc/my.cnf.d
[root@docker-1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --no-defaults   #開始初始化

此時MySQL還是啟動不了、還需要做些後續操作
[root@docker-1 mysql]# cp ./support-files/mysql.server /etc/init.d/mysql #拷貝啟動文件
[root@docker-1 mysql]# chmod +x /etc/init.d/mysql 
[root@docker-1 mysql]# /etc/init.d/mysql start  #啟動報錯了
Starting MySQL.Logging to ‘/var/log/mysql/mysql.log‘.
170916 12:28:00 mysqld_safe Directory ‘/var/lib/mysql‘ for UNIX socket file don‘t exists.
 ERROR! The server quit without updating PID file (/var/run/mysql/mysql.pid).
[root@docker-1 mysql]# mkdir /var/lib/mysql
[root@docker-1 mysql]# mkdir /var/log/mysql/ -p
[root@docker-1 mysql]# chown -R mysql.mysql /var/log/mysql
[root@docker-1 mysql]# mkdir /var/run/mysql
[root@docker-1 mysql]# chown mysql /var/run/mysql
[root@docker-1 mysql]# chown -R mysql.mysql /var/lib/mysql/
[root@docker-1 mysql]# /etc/init.d/mysql start  #再次啟動
Starting MySQL. SUCCESS!    #成功
[root@docker-1 mysql]#
[root@docker-1 mysql]# ps aux|grep mysql    #查看mysql進程
root      49621  0.0  0.0 107904   660 pts/1    S+   12:30   0:00 tailf /var/log/mysql/mysql.log
root      50215  0.0  0.0 113268  1588 pts/0    S    12:31   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/var/run/mysql/mysql.pid
mysql     50464  1.5 11.8 1307016 457068 pts/0  Sl   12:31   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql/mysql.log --pid-file=/var/run/mysql/mysql.pid --socket=/var/lib/mysql/mysql.sock --port=3306
root      50489  0.0  0.0 112660   964 pts/0    R+   12:32   0:00 grep --color=auto mysql
[root@docker-1 bin]# vim /etc/profile.d/mysql.sh    #設置mysql環境變量
export PATH=/usr/local/mysql/bin:$PATH
[root@docker-1 bin]# source /etc/profile
 #修改數據庫密碼
/usr/local/mysql/bin/mysqladmin -u root password ‘new-password‘  
/usr/local/mysql/bin/mysqladmin -u root -h 192.168.56.11 password ‘new-password‘
#登錄數據庫
[root@docker-1 ~]# mysql -uroot -p -h127.0.0.1
Enter password:     #輸入設置的密碼
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.37 Source distribution

Copyright (c) 2000, 2017, 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.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

希望本文能夠幫助到你 ^_^

MySQL 5.6.37源碼編譯安裝