九周四次课

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

相关文章
相关标签/搜索