Linux基礎(day39)

11.1 LAMP架構介紹

LAMP架構介紹

  • LAMP架構包含了 Linux+Apache(httpd)+MySQL+PHP ,簡稱LAMP
    • Linux是操做系統,好比centos,Ubuntu都是linux操做系統
    • Apache提供web服務軟件,其真正名字爲 httpd,習慣稱之爲Apache
    • MySQL存儲軟件,存的是數據、字符串,不是圖片
    • PHP是腳本語言,和shell類似,但比shell複雜,PHP是由 C語言 開發的,一般用於作網站(主要);
      • 目前因爲移動網絡的影響,PHP如今不怎麼受歡迎 (PHP由C語言開發的)
  • PHP網站
    • Google、淘寶、百度、51cto博客、猿課論壇
  • 三個角色能夠在一臺機器上,也能夠分開——> httpd 和 PHP 要在一塊兒

httpd、PHP、MySQL工做原理

  • httpd、PHP、MySQL三者是如何工做的?

輸入圖片說明

  • Apache和PHP是一個總體,由於PHP是以一個模塊的形式和Apache結合在一塊兒,可是Apache不能直接和MySQL去鏈接,只能經過PHP這個模塊去MySQL中提取數據,拿到數據後,PHP把這個結果交給Apache,Apache再交給用戶。html

  • PHP和MySQL交互數據的操做、行爲,稱爲 動態請求。python

11.2 MySQL、MariaDB介紹

MySQL/Mariadb介紹

  • MySQL是一個關係型數據庫,由mysql ab公司開發,mysql在2008年被sun公司收購(10億刀),2009年sun公司被oracle公司收購(74億刀)
    • sun公司主要作Java
      • 在後期後學到jdk,jdk 就是由 sun 公司開發的
    • oracle公司,專門作數據庫的,都是比較大型的,好比銀行等金融企業
      • oracle一般會裝在小型機上,小型機和linux不一樣,叫作 Unix ,操做系統是unix,是收費的
        • 小型機是一個 「超級」 計算機,這個 「超級」 是相比較於你的電腦,好比:有超過幾百個CPU,有超過 上T 的內存,這些配置去運行oracle
          • unix系統很穩定,oracle是一個商業公司,安裝oracle是須要花錢的
  • MySQL官網
    • 最新版本5.7GA/8.0DMR
  • MySQL5.6變化比較大,5.7性能上有很大提高
  • Mariadb爲MySQL的一個分支,官網,最新版本10.2
  • MariaDB主要由SkySQL公司(現改名爲MariaDB公司)維護,SkySQL公司由MySQL原做者帶領大部分原班人馬創立.
  • Mariadb5.5版本對應MySQL的5.5,Mariadb10.0對應MySQL5.6
  • Community 社區版本——>開源的版本,無償使用
  • Enterprise 企業版
  • GA(Generally Available)指通用版本,在生產環境中用的——>已經很穩定的版本,通常下載也是GA版本
  • DMR(Development Milestone Release)開發里程碑發佈版
  • RC(Release Candidate)發行候選版本
  • Beta開放測試版本
  • Alpha內部測試版本

11.3/11.4/11.5 MySQL安裝

MySQL目錄概要

  • MySQL的幾個經常使用安裝包:rpm、源碼、二進制免編譯
  • cd /usr/local/src //切換到下載源碼包的目錄
  • wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  • tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz //解壓
  • mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql //更名,並放到/usr/local/mysql
  • cd /usr/local/mysql //進入到該目錄下
  • useradd mysql //建立一個mysql用戶
  • mkdir /data/ //建立一個目錄,是爲了存放mysql的數據,把數據目錄放到這個目錄下
  • ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql //初始化,所謂初始化就是要生成/data/mysql ,由於mysql要想啓動,首先要有一個自帶的庫,自帶的庫叫mysql
  • cp support-files/my-default.cnf /etc/my.cnf //
  • cp support-files/mysql.server /etc/init.d/mysqld //
  • vi /etc/init.d/mysqld // -定義basedir和datadir //
  • /etc/init.d/mysqld start //

MySQL常見安裝包

  1. rpm包——>直接yum安裝便可mysql

  2. 源碼包——>linux

  3. 二進制免編譯包——>這種包至關因而在發佈以前,先在一臺linux服務器上作了編譯,編譯完以後,把編譯完成的文件從新安排放到一個目錄下去,而後在打包壓縮,最後再發布git

    • 優點:咱們不用花更多的時間去配置、去編譯,直接拿來就可使用,這和rpm包有點相似,但rpm包定義不能所安裝的路徑,默認安裝在usr下面;而二進制免編譯包能夠放到一個目錄下
    • 二進制免編譯包,是在其餘服務器、Linux平臺上編譯的,也是能夠在centos上使用
      • 若想追求極致的性能,那最好本身去編譯

安裝MySQL

  1. 全部的源碼包,須要的資源放在 /usr/local/src/ ,切換到該目錄下
[root@hf-01 ~]# cd /usr/local/src/
[root@hf-01 src]# ls
httpd-2.2.34  httpd-2.2.34.tar.gz
[root@hf-01 src]#
  1. 查詢平臺是多少位的
    • 二進制的包是區分平臺的,是32位,仍是64位的
      • 查看平臺,用 uname -a 命令查看
        • x86_64就是64位平臺的
        • i686 i586 就是32位平臺的
      • centos7以64位平臺爲主,但也有32位的版本,32位的版本是基於64位的基礎上又一次編譯的
[root@hf-01 src]# uname -a    //查看平臺,是多少位的
Linux hf-01 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@hf-01 src]#
  1. 並去下載MySQL包,地址連接,直接wget下載MySQL 5.6版本便可
[root@hf-01 src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
--2017-12-12 04:39:17--  http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
正在解析主機 mirrors.sohu.com (mirrors.sohu.com)... 221.236.12.140
正在鏈接 mirrors.sohu.com (mirrors.sohu.com)|221.236.12.140|:80... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:314581668 (300M) [application/octet-stream]
正在保存至: 「mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz」

100%[==============================================>] 314,581,668  560KB/s 用時 9m 41s 

2017-12-12 04:49:03 (529 KB/s) - 已保存 「mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz」 [314581668/314581668])

[root@hf-01 src]#
  1. 下載完MySQL安裝包後,首先須要解壓
[root@hf-01 src]# ls
mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
[root@hf-01 src]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

解壓文件過程
  1. 移動目錄,並修更名字
[root@hf-01 mysql]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
[root@hf-01 mysql]#
  1. 進入到 /usr/local/mysql 目錄下
[root@hf-01 src]# cd !$
cd /usr/local/mysql
[root@hf-01 mysql]#
  1. 進入到 /usr/local/mysql 目錄下,首先 ls命令 去查看下目錄中是否存在
[root@hf-01 mysql]# ls
bin  COPYING  data  docs  include  lib  man  mysql-test  README  scripts  share  sql-bench  support-files
[root@hf-01 mysql]#
  1. 建立MySQL的用戶,useradd mysql
[root@hf-01 mysql]# useradd mysql
[root@hf-01 mysql]#
  1. 建立 /data/ 目錄,若已存在,則可省略
[root@hf-01 mysql]# mkdir /data/
[root@hf-01 mysql]#
  1. 使用./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 初始化
[root@hf-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper
[root@hf-01 mysql]#
  1. 這時候會看到出現一個提示,缺乏Dumper模塊
    • 從字面意義上分析,它是說 Perl modules,(由於這屬於一個Perl腳本),因此在初始化的時候,依賴於Perl
    • Perl、python和PHP三種比較流行的三種腳本語言
  2. 解決思路
  • 思路,在缺乏模塊,缺乏包,那就去安裝,在安裝的不知道包和模塊的名稱,就去模糊搜索
    • 模糊搜索yum list |grep perl |grep -i dumper
      • -i 忽略大小寫
[root@hf-01 mysql]# yum list |grep perl |grep -i dumper
perl-Data-Dumper.x86_64                    2.145-3.el7                 base     
perl-XML-Dumper.noarch                     0.81-17.el7                 base     
[root@hf-01 mysql]#
  1. 會看到列出的一些包,只需安裝perl-Data-Dumper包便可——>如果不知道裝哪些包,能夠全部的包都安裝上
[root@hf-01 mysql]# yum install -y perl-Data-Dumper
  1. 而後再次初始化
[root@hf-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
[root@hf-01 mysql]#
  1. 在初始化完成後,如何去判斷初始化成功!兩種方法:
    • 方法一:看安裝過程當中,是否有兩個OK
    • 方法二:執行echo $?
      • 如果0 ,則表示運行成功
[root@hf-01 mysql]# echo $?
141
[root@hf-01 mysql]#
  1. 這時會看到執行失敗,是由於缺乏 libaio 這個包,只須要再去安裝下,便可
[root@hf-01 mysql]# yum install -y libaio
  1. 這時,再去執行echo $? 就會返回結果爲0 ,表示初始化成功
[root@hf-01 mysql]# echo $?
0
  1. 初始化完成,下面就是拷貝配置文件和啓動腳本
    • 配置文件在support-files/my-default.cnf
    • mysql配置文件叫/my.cnf,並放在/etc目錄下
      • 若想放在其餘目錄下,就須要在啓動的時候作一個指定,否則就會默認去/etc/my.cnf
[root@hf-01 mysql]# ls support-files/my-default.cnf
support-files/my-default.cnf            //mysql的模板配置文件

[root@hf-01 mysql]# ls /etc/my.cnf
/etc/my.cnf            //mysql的配置文件就叫作my.cnf,並且固定放在 /etc下
[root@hf-01 mysql]#
  1. 這裏會看到centos7系統中,默認安裝了mariadb-libs包,或者是以前安裝包連帶着安裝的mariadb-libs包,因此在這裏會生成/etc/my.cnf
[root@hf-01 mysql]# rpm -qf /etc/my.cnf        
mariadb-libs-5.5.52-1.el7.x86_64
[root@hf-01 mysql]#
  1. 如果直接使用自帶的 /etc/my.cnf 文件,但須要修改其中的配置文件
  • 在 [mysqld] 中
    • 把datadir=/var/lib/mysql 改爲 datadir=/data/mysql
    • 把socket=/var/lib/mysql/mysql.sock 改爲 socket=/tmp/mysql.sock
  • 在 [mysqld_safe] 中
    • 在log-error行和pid-file行前面 加 # ,把它們註釋掉
  • 在 !includedir /etc/my.cnf.d 也註釋掉
  1. 拷貝文件到 /etc/init.d/mysqld 中
[root@hf-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
  1. 自定義啓動腳本
    • 第一步,先把腳本放到/etc/init.d/mysqld
    • 第二步,把 /etc/init.d/mysqld 文件作一個編輯
      • basedir=/usr/local/mysql //指定你的程序目錄,放到/usr/local/mysql 下
      • datadir=/data/mysql //定義到/data/mysql
[root@hf-01 mysql]# vim /etc/init.d/mysqld        //編譯配置文件

把 basedir=/usr/local/mysql        //指定你的程序目錄,放到/usr/local/mysql 下
把 datadir=/data/mysql                 //定義到/data/mysql
而後保存退出
  1. 修改權限,755權限——>默認是755權限,修改權限命令 chmod
[root@hf-01 mysql]# ls -l /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10902 12月 13 06:23 /etc/init.d/mysqld
[root@hf-01 mysql]#
  1. 若想開機啓動,須要將它加入到系統服務列表中去
[root@hf-01 mysql]# chkconfig --add mysqld 
[root@hf-01 mysql]# chkconfig --list

注意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      若是您想列出 systemd 服務,請執行 'systemctl list-unit-files'。
      欲查看對特定 target 啓用的服務請執行
      'systemctl list-dependencies [target]'。

mysqld         	0:關	1:關	2:開	3:開	4:開	5:開	6:關
netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關
[root@hf-01 mysql]#
  • 這裏會看到mysqld中的2 ,3 ,4,5 服務都是開放的,下次就直接開機啓動了
  • 或者可使用命令,將mysqld服務啓動起來 /etc/init.d/mysqld start 或 service mysqld start
    • SUCCESS表示進程啓動成功了
[root@hf-01 mysql]# service mysqld start
Starting MySQL.. SUCCESS! 
[root@hf-01 mysql]# ps aux |grep mysql        //查看進程
root      2643  0.0  0.1  11772  1572 pts/0    S    06:33   0:00 /bin/sh /u
mysql     2752  2.1 44.6 973552 451004 pts/0   Sl   06:33   0:01 /usr/localysql --log-error=/data/mysql/hf-01.err --pid-file=/data/mysql/hf-01.pid
root      2781  0.0  0.0 112672   984 pts/0    R+   06:35   0:00 grep --col
[root@hf-01 mysql]# netstat -lntp        //查看監聽的端口,3306端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1430/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1192/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1430/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      2752/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1192/sshd           
[root@hf-01 mysql]#
  1. 假若有一天,沒有把啓動的腳本放到/etc/init.d 下,或者根本沒有這樣的啓動腳本去拷貝,可使用如下方法去啓動
啓動方法:
[root@hf-01 mysql]# service mysqld stop    //首先先停掉mysqld服務
Shutting down MySQL.. SUCCESS! 
[root@hf-01 mysql]# !ps        //查看mysqld進程是否還在
ps aux |grep mysql
root      2814  0.0  0.0 112672   984 pts/0    R+   06:45   0:00 grep --color=auto mysql
[root@hf-01 mysql]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &    //命令行的方式啓動,先指定配置文件所在路徑,而後指定user用戶,指定datadir(這個datadir也能夠在my.cnf 文件中去定義的),再加一個& 符號,丟到後臺去
[1] 2910
[root@hf-01 mysql]# 171213 06:54:55 mysqld_safe Logging to '/data/mysql/hf-01.err'.
171213 06:54:55 mysqld_safe Starting mysqld daemon with databases from /data/mysql

[root@hf-01 mysql]# !ps        //查看進程是否啓動成功
ps aux |grep mysql
root      2910  0.0  0.1 113268  1608 pts/0    S    06:54   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
mysql     3006 11.0 44.6 973552 451328 pts/0   Sl   06:54   0:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/hf-01.err --pid-file=/data/mysql/hf-01.pid
root      3029  0.0  0.0 112672   984 pts/0    R+   06:55   0:00 grep --color=auto mysql
[root@hf-01 mysql]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1430/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1192/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1430/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      3006/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1192/sshd           
[root@hf-01 mysql]#
  1. 關閉mysqld服務
  • 如果服務的形式,能夠直接/etc/init.d/mysqld stop
  • 如果命令行形式的,killall mysqld
    • killall命令,還算一個比較安全殺進程的命令——>萬不得已的狀況下,再去使用 kill命令
    • 安裝killall包——>yum install -y psmisc
[root@hf-01 mysql]# killall mysqld
[root@hf-01 mysql]# 171213 07:22:21 mysqld_safe mysqld from pid file /data/mysql/hf-01.pid ended

[1]+  完成                  /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
[root@hf-01 mysql]# !ps
ps aux |grep mysql
root      3075  0.0  0.0 112672   984 pts/0    R+   07:22   0:00 grep --color=auto mysql
[root@hf-01 mysql]#
  • mysql經常使用的兩種引擎
    • innodb引擎,比較大,和oracle相似
    • myisam引擎,存儲空間、存儲量都比較小

kill和killall區別

  • mysql在實時的讀寫數據,寫的速度很快,有可能寫入的數據保存在內存裏(緩存中),若是這部分緩存並無同步到磁盤裏去,而直接去kill 掉,就意味着你的數據丟失,而使用killall 命令,則會先中止當前的寫讀操做,而後把沒有完成寫入到磁盤裏的數據在慢慢寫入到磁盤裏去,直到寫完以後纔會把進程殺死。
    • 這就意味着若是未來有一天mysqld的進程始終殺不死,等待一分鐘仍是沒有殺死,那說明你的數據量很大,它正在慢慢的寫入到磁盤到磁盤裏去,這個時候不要強制的使用 kill 9 殺進程,這樣很是有可能丟數據,還會損壞你的表。

擴展

  1. mysql5.5源碼編譯安裝web

  2. mysql5.7二進制包安裝(變化較大)sql

相關文章
相關標籤/搜索