Docker下搭建mariadb/mysql数据库及配置phpmyadmin

mariadb与mysql的关系是啥?

Mysql自从被收购后,mysql的核心创始人之一担心mysql以后会变成收费软件,故开发了mariadb数据库。Mariadb基本都是对标mysql的,所以他们的参数、用法基本是一致的。当然,时至今日,mysql依然还是免费的,选择哪个就自由决定啦。

mariadb

Docker下搭建mariadb/mysql数据库

由于官方的mariadb和mysql都没有使用alpine作为基础操作系统的镜像,故这里就没有带alpine的tag啦。

这里我以mariadb为例,如果想搭mysql的话,将下面所有的mariadb替换成mysql就可以了。

1、创建需要的目录

mkdir -p /data/mariadb/db

2、创建mariadb容器

docker run -d --name mariadb -v /data/mariadb/conf:/etc/mysql -v /data/mariadb/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=ppp123 --restart=always --network=br0 mariadb

# 由于数据库要求MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD,MYSQL_RANDOM_ROOT_PASSWORD必须选一个,所以这里我选择设置密码ppp123

# 数据库由于也加入到br0网络中,故这里也无需端口映射

# 第一个-v是映射数据库配置文件,第二个-v是映射数据存储文件目录

3、至此数据库就搭建好了

mysdl

安装数据库管理软件phpmyadmin

数据库虽然装好了,但是命令行的模式,管理起来很不直观,那就装个phpmyadmin吧。Phpmyadmin是可视化的管理界面,比命令行看着直观多了。

虽然phpmyadmin也有docker镜像,但我感觉完全没必要吧,直接到phpmyadmin官网下载后解压到网站目录下就好了。

cd /data/website/web

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip

# wget是下载软件的命令

unzip phpMyAdmin-5.2.0-all-languages.zip

# unzip是解压压缩包

mv phpMyAdmin-5.2.0-all-languages pma

# mv是重命名目录名称

vi pma/libraries/config.default.php

填入

$cfg['Servers'][$i]['host'] = 'mariadb'; # mariadb就数据库的容器名称

$cfg['Servers'][$i]['port'] = '3306'; # 3306是数据库默认监听的端口

2、访问http://xxx/pma/ 就可以使用phpmyadmin了,然后用phpmyadmin来设置数据库,既安全,又明了。

3、有时候,phpmyadmin会提示缺少插件,少什么我们就装什么好了。比如phpmyadmin提示缺少mysqli插件,那我们就:

docker exec -it php71 sh

# exec 是进入容器的命令

# -it 是显示交互界面,没这个就无法输入命令

# php71 是容器名称

# sh 是进入容器后执行的命令,因为是alpine操作系统,所以用sh

cd /usr/local/bin

./docker-php-ext-install pdo_mysql mysqli

# 这个命令就是安装需要的插件,更多可以参考perl的说明

再重启PHP容器就好了

docker restart php71

至此,LNMP的几大件终于搭建完成,这也是互联网上非常普遍的搭建方式。

phpmyadmin

LNMP的服务原理和路径
1、当来了一个请求,首先nginx根据规则做判断,如果是该自己提供服务的,会直接返回(多用于图片、js、css等静态文件)。如果该PHP提供服务的,就把请求转交给PHP。

2、当PHP接受到nginx转交过来的请求时,如果不涉及到数据库,那PHP就做完事情将结果交回给nginx。如果PHP发现涉及到数据库,那就把请求交给数据库。

3、当数据库收到PHP转交过来的请求时,根据需求提供对应的数据,然后返回给PHP。

4、当所有请求都完成后,顺着原路返回,最后再回传给用户。这就完成了一次请求。


LNMP中的效率和速度差异

速度最快的是nginx,其次是PHP,最慢的是mariadb/mysql。所以,如果mariadb/mysql如果卡了,往往会导致整个请求都因为在等mariadb/mysql的结果而卡住,故就有了数据库优化一说。

当然,还有一个东西也会导致请求的卡顿,那就是硬盘的读写速度。不管是数据库,还是静态文件,毕竟都是存在硬盘上的,如果硬盘本身很慢,那不管怎么优化软件,其结果都势必会很慢(当然,一般的硬盘都是可以满足速度要求的)。

最后一个影响速度的就是网速了,这个大家都懂,就不细说了。


LNMP中P(PHP)存在的意义是什么?

可能有人有个疑问,那就是nginx给用户返回结果,数据库提供需要的数据,那中间的PHP存在的意义是什么呢?

我们都知道用户的请求千变万化,即便是同一个网站也会有很多不同的网址,稍大一点的网站可能都有上百万个不同的页面。虽然nginx是提供返回页面的,但其自身的灵活性还是比较低的,很难做到每个页面都是个性化的(当然这也不是nginx想做的事情)。因此,PHP就是做个性化这件事情的,其主要的工作就是让成千上万的页面都根据不同的需求展现不同的内容。


nginx可以不通过PHP而直接访问数据库吗?

答案是可以。不过可能得nginx编译数据库模块或者加载动态模块了。这个我们以后会说。

举报
评论 0