8月29日上课内容(MySQL第二天)
(一)课前回顾(30分钟)
前言:
特别提示:mariadb默认的字符集不是utf8, 因此,在数据库中插入中文的时候显示的是????的乱码
解决方法:在my.cnf配置文件中添加如下几个指令
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
init_connect='SET NAMES utf8'
[mysql]
default-character-set=utf8
重启mariadb,在重新创建数据库,但是之前乱码的数据库无法修复了
如何修改表名:rename table yhy1 to yhy2;
总结昨天的知识点
(二)安装phpMyAdmin
前言:phpMyAdmin是一款实用PHP开发的web图形化MySQL数据操作工具。开发者必备
在centos 7上安装phpMyAdmin图形化工具
第一步:
安装服务:
yum install -y httpd php php-mysql mariadb-server
yum install -y php-mbstring php-mcrypt
编辑httpd的主配置文件, 在DirectoryIndex 后面加上 index.php,为了让php页面作为首要文件被访问
DirectoryIndex index.php index.html
第二步:
启动mariadb
运行 mysql_secure_installation 给root设置密码
第三步:
cd /var/www/html
unzip phpMyAdmin-4.0.10.20-all-languages.zip
ln -sv phpMyAdmin-4.0.10.20-all-languages admin
cd admin
mv config.sample.inc.php config.inc.php
vi config.inc.php, 修改如下配置
$cfg['blowfish_secret'] = 'a8b7c6d'
$cfg['Servers'][$i]['controlhost'] = 'localhost'
$cfg['Servers'][$i]['controluser'] = 'root'
$cfg['Servers'][$i]['controlpass'] = '123456'
第四步:
启动服务
systemctl restart mariadb
systemctl restart httpd.service
第五步:
在浏览器访问
http://192.168.7.90/admin
(三)PHP以daemon方式独立运行
前言:上个星期上课已经说过,php以两种方式与httpd结合
第一种yum安装,php以嵌入的方式与httpd结合
第二种安装php-fpm,php以守护进程的方式独立运行,通过fastCGI与httpd结合
yum安装httpd和php-fpm
yum install -y httpd php-fpm php-mysql
确保在/etc/httpd/conf.modules.d/00-proxy.conf中httpd已经编译安装了proxy_fcgi_module模块如果httpd使用中心主机,编辑/etc/httpd/conf.d/fastcgi.conf
# 指定默认的主页面为index.php
DirectoryIndex index.php
#关闭正向代理请求
ProxyRequests OFF
# 通过fcgi协议将客户端的url 转发给php-fpm进程,$1为域名后面的存放在文件系统的php资源路径,这里使用127.0.0.1:9000表明httpd和php-fpm必须安装在同一台主机上。
ProxyPassMatch ^/(.*\.php)$ fcgi:
如果httpd使用虚拟主机,先删除/etc/httpd/conf.d/fastcgi.conf文件,再编辑/etc/httpd/conf.d/virtual_host.conf
DirectoryIndex index.php
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot /app/www
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/www/$1
<Directory "/app/www">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
注释中心主机
# DocumentRoot "/var/www/html"
创建虚拟主机的站点目录,在创建一个php的首页文件
mkdir -pv /app/www
vi index.php
如果是httpd和php-fpm不在同一台主机的话,那么需要修改 /etc/php-fpm.d/www.conf文件
listen = 0.0.0.0:9000
;listen.allowed_clients = 127.0.0.1
(四)编译安装LAMP架构(httpd、php、MySQL发布在三台不同的主机独立运行)
前言:编译安装:httpd-2.4、php-5.4,二进制安装Mariadb-5.5
如果是PHP作为httpd的模块编译安装,那么需要先安装httpd,再安装php。那么这就必须要求httpd和PHP安装在同一台主机上,这样系统资源争用较大,因此不考虑这种情况
如果httpd、php、MySQL 都不在同一台主机上,那么就没有安装顺序而言了,只是编译安装PHP的时候编译参数不同而已
那么接下来,我们将httpd、php、MySQL 编译在不同主机上,看看是如何操作的
编译安装httpd(192.168.23.8)
yum groupinstall -y "Development tools" "Server Platform Development"
yum install pcre-devel apr-devel apr-util-devel openssl-devel
tar xf httpd-2.4.25.tar
cd httpd-2.4.25
./configure --prefix=/usr/local/apache-2.4 --sysconfdir=/etc/httpd-2.4 --enable-so --enable-ssl --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-zlib --with-pcre --with-apr=/usr --with-apr-util=/usr --with-mpm=prefork
make -j 4 && make install
ln -sv /usr/local/apache-2.4 /usr/local/apache
vi /etc/profile.d/httpd.sh文件,添加如下代码
export PATH=/usr/local/apache/bin/:$PATH
. /etc/profile.d/httpd.sh
ln -sv /usr/local/apache/include /usr/include/httpd
apachectl start
vi /etc/rc.d/init.d/httpd-2.4 添加
#! /bin/bash
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
HTTPD_LANG=${HTTPD_LANG-"C"}
INITLOG_ARGS=""
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
status -p ${pidfile} $httpd > /dev/null
if [[ $? = 0 ]]; then
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
else
echo -n $"Stopping $prog: "
success
fi
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=6
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
LSB=1 killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
if [ $RETVAL -eq 7 ]; then
failure $"httpd shutdown"
fi
fi
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart|try-restart)
if status -p ${pidfile} $httpd >&/dev/null; then
stop
start
fi
;;
force-reload|reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
RETVAL=2
esac
exit $RETVAL
chmod +x /etc/rc.d/init.d/httpd-2.4
chkconfig --add /etc/rc.d/init.d/httpd-2.4
service httpd-2.4 start
Include /etc/httpd-2.4/extra/httpd-vhosts.conf
vi /etc/httpd-2.4/extra/httpd-vhosts.conf 添加如下内容
ServerName www.a.com
DocumentRoot /app/www
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.23.9:9000/app/www/$1
<directory <="" span="" style="box-sizing: border-box; outline: none !important;">"/app/www">
Options FollowSymLinks
AllowOverride None
Require all granted
mkdir -pv /app/www
vi /app/www/index.html 添加如下内容
"color: red">hello, i am static page
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
httpd -t
service httpd-2.4 restart
编译安装PHP-5.4.26(192.168.23.9)
yum groupinstall -y "Development tools" "Server Platform Development"
yum install -y libxml2-devel libmcrypt-devel bzip2-devel curl-devel openssl-devel pcre-devel
tar xf php-5.4.26.tar.bz2
cd php-5.4.26
./configure --prefix=/usr/local/php5.4 --with-mysql=mysqlnd --with-openssl --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-bz2 --with-curl --with-fpm-user=apache --with-fpm-group=apache
make -j 4
make install
ln -vs /usr/local/php5.4 /usr/local/php
vi /etc/profile.d/php.sh
export PATH=/usr/local/php/sbin:$PATH
. /etc/profile.d/php.sh
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
vi /usr/local/php/etc/php-fpm.conf 修改配置如下
listen = 0.0.0.0:9000
;listen.allowed_clients = 127.0.0.1
pid = run/php-fpm.pid
mkdir -pv /app/www
vi /app/www/index.php 添加php检查代码
(1)信号模式:
停止:kill -INT cat /usr/local/php/var/run/php-fpm.pid
重启:kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
(2)服务脚本模式(必须先确保在/usr/local/php/var/run/php-fpm.pid 中存在pid号)
cd /root/php-5.4.26
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
service php-fpm {start|stop|restart|reload}
service php-fpm start
使用二进制程序包安装Mariadb(192.168.23.10)
第一步:准备数据库目录
mkdir -pv /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data
第二步:安装二进制程序包
tar xf mariadb-5.5.54-linux-x86_64.tar -C /usr/local
cd /usr/local
ln -sv mariadb-5.5.54-linux-x86_64 mysql
cd /usr/local/mysql
chown -R root:mysql ./*
cp support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf 在mysqld下面添加如下指令
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON
scripts/mysql_install_db --user=mysql --datadir=/mydata/data
ll /mydata/data
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
第三步:启动服务
service mysqld start
第四步:将程序路径添加到环境变量
vi /etc/profile.d/mysqld.sh
export PATH=/usr/local/mysql/bin:$PATH
. /etc/profile.d/mysqld.sh
第五步:让root用户可以远程登入
mysql_secure_installation
第六步:给root用户授权远程可以登入
mysql -p123456
update mysql.user set host = '192.168.23.%' where host = '::1';
flush privileges;
全部编译安装完毕之后,将php服务器上的index.php代码修改为
<?php
$conn = mysql_connect('192.168.23.10','root','123456');
if ($conn)
echo "ok";
else
echo "false";
?>
(五)xcache(php加速器)
前言:
xcache 只能编译安装,rpm包安装没有效果
在epel源中,程序包为php-xcache编译安装xcache的方法
yum install php-devel -y下载xcache到/usr/local目录下,解压cd xcache-3.2.0phpize./configure --enable-xcache --with-php-config=/usr/bin/php-configmake && make installcp xcache.ini /etc/php.d/重启php-fpm 先通过php测试页面看看是否php-xcache作为扩展编译到了php程序,如果显示编译进去了,那么就通过ab工具测试,测试效果为原来的3倍多
(六)MySQL 编译安装
MySQL也可以编译安装哦
https://downloads.mariadb.org/
CentOS 7编译安装MariaDB
1:先定义语言环境
localectl list-locales 列出当前可以使用的语言环境localectl set-locale LANG=en_US.UTF-8 定义语言环境退出,重新登入一次 2:准备开发环境
yum groupinstall 'development tools' 'Server Platform Development'yum install -y ncurses-devel openssl-devel libevent-devel jemalloc-devel cmake 3:下载mariadb的源码包,解压之后
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-5.5.44 -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make -j 4 && make install
ln -sv /usr/local/mariadb-5.5.44 /usr/local/mysql
4:创建unit file 文件 /usr/lib/systemd/system/mariadb.service
[Unit]
Description=MariaDB database server
After=syslog.target
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --basedir=/usr/local/mysql
TimeoutSec=300
PrivateTmp=false
[Install]
WantedBy=multi-user.target
5:并且重新让系统读取unit file文件
systemctl daemon-reload
6:创建数据库文件目录,并且修改其属主和属组,拷贝配置文件到/etc/my.cnf, 在配置文件中添加datadir = /data/mysql ,初始化数据库文件目录
mkdir -pv /data/mysql
chown -R mysql.mysql /data/mysql/
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
编辑 /etc/my.cnf 文件,加入
datadir = /data/mysql
skip_name_resolve = ON
innodb_file_per_table = ON
cd /usr/local/mysql
chown -R root.mysql ./*
scripts/mysql_install_db --user=mysql --datadir=/data/mysql
systemctl start mariadb.service
(七)主键、唯一键、外键 以及 一对一查询,一对多查询(非常重要)
前言:
1: 什么叫键
数据库中的键(key)又称为关键字,是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。
2:唯一键
唯一键,即一个或者一组列,其中没有重复的记录。可以唯一标示一条记录。
3:主键
属于唯一键,是一个比较特殊的唯一键。区别在于主键不可为空。
4:外键
一张表外键的值一般来说是另一张表主键的值。因此,外键的存在使得表与表之间可以联系起来
1:如何创建主键、唯一键
第一种方式:
reate table yhy (id int not null primary key ,name varchar(250) unique key, age int);
第二种方式:这里同时也给大家演示了如何将多个字段合并起来创建一个键
create table yhy (id int, name varchar(250), age int, primary key(id), unique key(name, age));
2:如何创建外键(一定要搞懂)
先搞清楚几个概念,如果概念不搞清楚,请先不要动手
(1)给一张表创建外键的时候,必须要保证外键的值已经存在了。也就是说,一张表如果拥有外键,通常将其称为从表,而外键引用的那种表通常称为主表。
(2)那么,现在我们就搞清楚了什么是主表,什么是从表了。就像上图所示,person表叫做从表,part表叫做主表。因为person表中的part_id字段的值来自于part表中的nid字段的值。
(3)从表面上来看,有foreign key的表就叫从表,有primary key的表就叫主表。
(4)那么在创建表的时候,必须先创建主表,再创建从表
(5)那么在删除表的时候,必须先删除从表,再删除主表
(1)创建主表和从表
create table part (nid int, caption varchar(250), primary key(nid));
create table person (nid int, name varchar(250), email varchar(250), extra varchar(250), part_id int, foreign key(part_id) references part (nid));
(2)删除主表和从表
drop table person;
drop table part;
3:在搞懂了如何创建主表和从表之后,我们再来搞一搞如何创建多张主表,一张从表的模型(超级重要,一定要搞懂)
思路:先创建主表,再创建从表
create table woman (id int, name varchar(250), primary key(id));
create table man (id int, name varchar(250), primary key(id));
create table man_to_woman (nid int, man_id int, woman_id int, foreign key(man_id) references man (id), foreign key(woman_id) references woman (id));
4:在搞懂如何创建主从表的基础上,现在我们试着开始给已经创建的表插入数据
思路:先给主表插入数据,再给从表插入数据,
1:如何给part表、person表插入数据
insert into part values (1, '运维开发'), (2, 'HTML5全栈'), (3, 'python全栈'), (4, 'IOS移动端开发');
insert into person values (1, 'nike', '', '', 2), (2, 'jason', '', '', 1), (3, 'robbie', '', '', 2), (1, 'marry', '', '', 3), (1, 'jack', '', '', 1);
part表、person表内容如下
给woman表、man表、man_to_woman表插入数据,数据内容如下
insert into man values (1, '白子画'), (2, '檀梵'), (3, '太子');
insert into woman values (1, '花千骨'), (2, '紫熏'), (3, '秋水');
insert into man_to_woman values (1, 1, 1),(2, 2, 2),(3, 3, 1),(4, 3, 3),(5,1,2);
效果展示
5:连表查询
一对一连接查询:找到部门为HTML5全栈的所有人的姓名
select person.name, part.caption from person left join part on person.part_id=part.nid where part.caption='HTML5全栈';
一对多连接查询:找到与太子有关系的所有的女人
select woman.name from man_to_woman
left join man on man.id=man_to_woman.man_id
left join woman on woman.id=man_to_woman.woman_id
where man.name='太子';
(八)实战作业
前言: 以后这种实战作业会经常有,请务必认真对待
实战作业1
准备四台服务器,一台服务器作为脚本分发服务器,其余的三台分别是httpd,php,Mariadb,请写一个脚本,在脚本分发服务器上一键执行这个脚本,等待你的qq邮箱接受一个主题为"LAMP部署完毕"的邮件。此时,你在“全球开发者必备的浏览器”上,输入你的httpd服务器的IP,浏览器上即可显示WordPress程序的安装界面
硬性要求:
脚本里面请大量使用函数,将冗余代码进行封装
温馨提示:
所有的php测试代码可以先写好
实战作业2
1:结合LAMP架构心得,请写出大概400到800字的http请求原理,越详细越好
2:写好了之后,打字不过关的同志,每天中午把自己写的http请求原理作为打字练习,每天打半个小时。
温馨提示:可以将DNS的解析原理和LAMP的请求原理作为一次http请求的原理