九週四次課

11.1LAMP架構介紹python

11.211.2 MySQL、MariaDB介紹mysql

11.3/11.4/11.5 MySQL安裝linux

11.1LAMP架構介紹git

  • 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再交給用戶。web

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

11.211.2 MySQL、MariaDB介紹shell

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官網 www.mysql.com
    • 最新版本5.7GA/8.0DMR
  • MySQL5.6變化比較大,5.7性能上有很大提高
  • Mariadb爲MySQL的一個分支,官網www.mariadb.com,最新版本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安裝便可vim

  2. 源碼包——>centos

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

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

安裝MySQL

  1. 全部的源碼包,須要的資源放在 /usr/local/src/ ,切換到該目錄下

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# ls

httpd-2.2.34 httpd-2.2.34.tar.gz
[root@localhost src]# 

    2.查詢平臺是多少位的

  • 二進制的包是區分平臺的,是32位,仍是64位的
    • 查看平臺,用 uname -a 命令查看
      • x86_64就是64位平臺的
      • i686 i586 就是32位平臺的
    • centos7以64位平臺爲主,但也有32位的版本,32位的版本是基於64位的基礎上又一次編譯的

[root@localhost src]# uname -a        //查看平臺,是多少位的
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost src]# 

    3.並去下載MySQL包,地址連接,直接wget下載MySQL 5.6版本便可

[root@localhost src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

    4.下載完MySQL安裝包後,首先須要解壓

[root@localhost src]# ls
 httpd-2.2.34  httpd-2.2.34.tar.gz  mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

[root@tianqi-01 src]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

[root@tianqi-01 src]# ls
httpd-2.2.34  httpd-2.2.34.tar.gz  mysql-5.6.35-linux-glibc2.5-x86_64  mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
[root@tianqi-01 src]# 

    5.移動目錄,並修更名字

[root@localhost src]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

    6.進入到 /usr/local/mysql 目錄下

[root@localhost src]# cd !$
cd /usr/local/mysql
[root@localhost mysql]# 

    7.進入到 /usr/local/mysql 目錄下,首先 ls命令去查看下目錄中是否存在

[root@localhost mysql]# ls
bin  COPYING  data  docs  include  lib  man  mysql-test  README  scripts  share  sql-bench  support-files
[root@localhost mysql]# 

    8.建立MySQL的用戶,useradd mysql

[root@localhost mysql]# useradd mysql
[root@localhost mysql]# 

    9.建立 /data/ 目錄,若已存在,則可省略

[root@localhost mysql]# mkdir /data/
[root@localhost mysql]# 

    10.使用./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 初始化

[root@localhost 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

緣由:缺乏libaio庫文件 

解決方法:yum install -y libaio* 

[root@tianqi-01 mysql]# yum install -y libaio*

    11.這時候會看到出現一個提示,缺乏Dumper模塊

  • 從字面意義上分析,它是說 Perl modules,(由於這屬於一個Perl腳本),因此在初始化的時候,依賴於Perl
  • Perl、python和PHP三種比較流行的三種腳本語言

12.解決思路

  • 思路,在缺乏模塊,缺乏包,那就去安裝,在安裝的不知道包和模塊的名稱,就去模糊搜索
    • 模糊搜索yum list |grep perl |grep -i dumper
      • -i 忽略大小寫

[root@localhost 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@localhost mysql]# 

    13.會看到列出的一些包,只需安裝perl-Data-Dumper包便可——>如果不知道裝哪些包,能夠全部的包都安裝上

[root@localhost mysql]# yum install -y perl-Data-Dumper

    14.而後再次初始化

[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
Installing MySQL system tables...2018-02-07 05:41:11 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

    15.在初始化完成後,如何去判斷初始化成功!兩種方法:

  • 方法一:看安裝過程當中,是否有兩個OK
  • 方法二:執行echo $?
    • 如果0 ,則表示運行成功

[root@localhost mysql]# echo $?
0
[root@localhost mysql]# 

16.初始化完成,下面就是拷貝配置文件和啓動腳本

  • 配置文件在support-files/my-default.cnf
  • mysql配置文件叫/my.cnf,並放在/etc目錄下
    • 若想放在其餘目錄下,就須要在啓動的時候作一個指定,否則就會默認去/etc/my.cnf

[root@localhost mysql]# ls support-files/my-default.cnf    
support-files/my-default.cnf        //mysql的模板配置文件
[root@localhost mysql]# ls /etc/my.cnf
/etc/my.cnf                        //mysql的配置文件就叫作my.cnf,並且固定放在 /etc下
[root@localhost mysql]# 

    17.這裏會看到centos7系統中,默認安裝了mariadb-libs包,或者是以前安裝包連帶着安裝的mariadb-libs包,因此在這裏會生成/etc/my.cnf

[root@localhost mysql]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.56-2.el7.x86_64
[root@localhost mysql]# 

    18.如果直接使用自帶的 /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 也註釋掉

[root@localhost mysql]# vim !$
vim /etc/my.cnf

[mysqld]
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
#!includedir /etc/my.cnf.d

[root@localhost mysql]# ls
bin  COPYING  data  docs  include  lib  man  my.cnf  mysql-test  README  scripts  share  sql-bench  support-files
[root@localhost mysql]# 

    19.拷貝文件到 /etc/init.d/mysqld 中

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]# 

    20.自定義啓動腳本

  • 第一步,先把腳本放到/etc/init.d/mysqld
  • 第二步,把 /etc/init.d/mysqld 文件作一個編輯
    • basedir=/usr/local/mysql //指定你的程序目錄,放到/usr/local/mysql 下
    • datadir=/data/mysql //定義到/data/mysql

[root@localhost mysql]# vim /etc/init.d/mysqld

把 basedir=/usr/local/mysql     //指定你的程序目錄,放到/usr/local/mysql 下

把 datadir=/data/mysql     //定義到/data/mysql 而後保存退出

    21.修改權限,755權限——>默認是755權限,修改權限命令 chmod

[root@localhost mysql]# ll !$
ll /etc/init.d/mysqld
-rwxr-xr-x. 1 root root 10902 Feb  7 06:19 /etc/init.d/mysqld
[root@localhost mysql]# 

    22.若想開機啓動,須要將它加入到系統服務列表中去

[root@localhost mysql]# chkconfig --add mysqld 
[root@localhost mysql]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

mysqld             0:off    1:off    2:on    3:on    4:on    5:on    6:off
netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@localhost mysql]# 

  • 這裏會看到mysqld中的2 ,3 ,4,5 服務都是開放的,下次就直接開機啓動了
  • 或者可使用命令,將mysqld服務啓動起來 /etc/init.d/mysqld start 或 service mysqld start
    • SUCCESS表示進程啓動成功了

[root@localhost mysql]# service mysqld start
Starting MySQL.Logging to '/data/mysql/localhost.localdomain.err'.
..... SUCCESS! 

[root@localhost mysql]# ps aux | grep mysql        //查看進程
root       1192  0.0  0.1  11768  1572 pts/0    S    06:25   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysq/localhost.localdomain.pid
mysql      1327  9.0 45.1 973060 451004 pts/0   Sl   06:25   0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/localhost.localdomain.err --pid-file=/data/mysql/localhost.localdomain.pid --socket=/tmp/mysql.sock
root       1361  0.0  0.0 112660   968 pts/0    S+   06:26   0:00 grep --color=auto mysql
[root@localhost 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 0.0.0.0:22              0.0.0.0:*               LISTEN      895/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1001/master         
tcp6       0      0 :::22                   :::*                    LISTEN      895/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1001/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1327/mysqld         
[root@localhost mysql]# 

    23.假若有一天,沒有把啓動的腳本放到/etc/init.d 下,或者根本沒有這樣的啓動腳本去拷貝,可使用如下方法去啓動

[root@localhost mysql]# service mysqld stop        //首先先停掉mysqld服務
Shutting down MySQL.. SUCCESS! 
[root@localhost mysql]# !ps            //查看mysqld進程是否還在
ps aux | grep mysql
root       1390  0.0  0.0 112660   968 pts/0    R+   06:29   0:00 grep --color=auto mysql
[root@localhost mysql]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &        //命令行的方式啓動,先指定配置文件所在路徑,而後指定user用戶,指定datadir(這個datadir也能夠在my.cnf 文件中去定義的),再加一個& 符號,丟到後臺去
[1] 1391
[root@localhost mysql]# 180207 06:31:45 mysqld_safe Logging to '/data/mysql/localhost.localdomain.err'.
180207 06:31:45 mysqld_safe Starting mysqld daemon with databases from /data/mysql

[root@localhost mysql]# !ps        //查看進程是否啓動成功
ps aux | grep mysql
root       1391  0.0  0.1 113260  1580 pts/0    S    06:31   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
mysql      1514  0.3 44.9 973060 449752 pts/0   Sl   06:31   0:00 /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/localhost.localdomain.err --pid-file=/data/mysql/localhost.localdomain.pid --socket=/tmp/mysql.sock
root       1537  0.0  0.0 112660   968 pts/0    R+   06:33   0:00 grep --color=auto mysql
[root@localhost mysql]# !net        
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      895/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1001/master         
tcp6       0      0 :::22                   :::*                    LISTEN      895/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1001/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1514/mysqld         
[root@localhost mysql]# 

    24.關閉mysqld服務

  • 如果服務的形式,能夠直接/etc/init.d/mysqld stop
  • 如果命令行形式的,killall mysqld
    • killall命令,還算一個比較安全殺進程的命令——>萬不得已的狀況下,再去使用 kill命令
    • 安裝killall包——>yum install -y psmisc

[root@localhost mysql]# killall mysqld
[root@localhost mysql]# 180207 06:38:35 mysqld_safe mysqld from pid file /data/mysql/localhost.localdomain.pid ended

[1]+  Done                    /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql
[root@localhost mysql]# !ps
ps aux | grep mysql
root       1554  0.0  0.0 112660   972 pts/0    R+   06:39   0:00 grep --color=auto mysql
[root@localhost mysql]# 

  • mysql經常使用的兩種引擎
    • innodb引擎,比較大,和oracle相似
    • myisam引擎,存儲空間、存儲量都比較小

kill和killall區別

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

友情連接:阿銘Linux

相關文章
相關標籤/搜索