Linux基础(day39)
时间:2022-04-27
本文章向大家介绍Linux基础(day39),主要内容包括11.1 LAMP架构介绍、11.2 MySQL、MariaDB介绍、11.3/11.4/11.5 MySQL安装、扩展、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
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再交给用户。
- PHP和MySQL交互数据的操作、行为,称为 动态请求。
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是需要花钱的
- 小型机是一个 “超级” 计算机,这个 “超级” 是相比较于你的电脑,比如:有超过几百个CPU,有超过 上T 的内存,这些配置去运行oracle
- oracle通常会装在小型机上,小型机和linux不同,叫做 Unix ,操作系统是unix,是收费的
- sun公司主要做Java
-
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常见安装包
- rpm包——>直接yum安装即可
- 源码包——>
- 二进制免编译包——>这种包相当于是在发布之前,先在一台linux服务器上做了编译,编译完之后,把编译完成的文件重新安排放到一个目录下去,然后在打包压缩,最后再发布
- 优势:我们不用花更多的时间去配置、去编译,直接拿来就可以使用,这和rpm包有点类似,但rpm包定义不能所安装的路径,默认安装在usr下面;而二进制免编译包可以放到一个目录下
- 二进制免编译包,是在其他服务器、Linux平台上编译的,也是可以在centos上使用
- 若想追求极致的性能,那最好自己去编译
安装MySQL
- 所有的源码包,需要的资源放在 /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]#
- 查询平台是多少位的
- 二进制的包是区分平台的,是32位,还是64位的
- 查看平台,用 uname -a 命令查看
- x86_64就是64位平台的
- i686 i586 就是32位平台的
- centos7以64位平台为主,但也有32位的版本,32位的版本是基于64位的基础上又一次编译的
- 查看平台,用 uname -a 命令查看
- 二进制的包是区分平台的,是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]#
- 并去下载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]#
- 下载完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
解压文件过程
- 移动目录,并修改名字
[root@hf-01 mysql]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
[root@hf-01 mysql]#
- 进入到 /usr/local/mysql 目录下
[root@hf-01 src]# cd !$
cd /usr/local/mysql
[root@hf-01 mysql]#
- 进入到 /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]#
- 创建MySQL的用户,useradd mysql
[root@hf-01 mysql]# useradd mysql
[root@hf-01 mysql]#
- 创建 /data/ 目录,若已存在,则可省略
[root@hf-01 mysql]# mkdir /data/
[root@hf-01 mysql]#
- 使用./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]#
- 这时候会看到出现一个提示,缺少Dumper模块
- 从字面意义上分析,它是说 Perl modules,(因为这属于一个Perl脚本),所以在初始化的时候,依赖于Perl
- Perl、python和PHP三种比较流行的三种脚本语言
- 解决思路
- 思路,在缺少模块,缺少包,那就去安装,在安装的不知道包和模块的名称,就去模糊搜索
- 模糊搜索yum list |grep perl |grep -i dumper
- -i 忽略大小写
- 模糊搜索yum list |grep perl |grep -i dumper
[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]#
- 会看到列出的一些包,只需安装perl-Data-Dumper包即可——>若是不知道装哪些包,可以所有的包都安装上
[root@hf-01 mysql]# yum install -y perl-Data-Dumper
- 然后再次初始化
[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]#
- 在初始化完成后,如何去判断初始化成功!两种方法:
- 方法一:看安装过程中,是否有两个OK
- 方法二:执行echo $?
- 若是0 ,则表示运行成功
[root@hf-01 mysql]# echo $?
141
[root@hf-01 mysql]#
- 这时会看到执行失败,是因为缺少 libaio 这个包,只需要再去安装下,即可
[root@hf-01 mysql]# yum install -y libaio
- 这时,再去执行echo $? 就会返回结果为0 ,表示初始化成功
[root@hf-01 mysql]# echo $?
0
- 初始化完成,下面就是拷贝配置文件和启动脚本
- 配置文件在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]#
- 这里会看到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]#
- 若是直接使用自带的 /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 也注释掉
- 拷贝文件到 /etc/init.d/mysqld 中
[root@hf-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
- 自定义启动脚本
- 第一步,先把脚本放到/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
然后保存退出
- 修改权限,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]#
- 若想开机启动,需要将它加入到系统服务列表中去
[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]#
- 假如有一天,没有把启动的脚本放到/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]#
- 关闭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 杀进程,这样非常有可能丢数据,还会损坏你的表。
扩展
- 主成分分析降维(MNIST数据集)
- Android 使用dagger2进行依赖注入(基础篇)
- Html小知识总结
- 如何训练一个性能不错的深度神经网络
- 使用AndroidStudio编译NDK的方法及错误解决方案
- 计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
- linux(centos)搭建SVN服务器
- 简单的Hibernate入门简介
- 思梦PHP-阿里大鱼手机验证码
- IIS 安装 pydio
- 面试机器学习、大数据岗位时遇到的各种问题
- ThinkPHP连续签到小案例
- Windows环境配置Apache+Mysql+PHP
- 如何使用Retrofit获取服务器返回来的JSON字符串
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法