同福

使用mysql:5.7-debian镜像部署MySQL数据库服务

介绍

介绍

前面福哥已经带着大家学会了搭建PHP的运行环境了,今天我们来搭建一个数据库服务。福哥推荐使用MySQL数据库,它有着简单、轻便、速度快、维护容易的特点。MySQL提供了免费的社区版本,大家可以免费使用MySQL数据库开发自己的web应用。

今天福哥就带着大家使用mysql:5.7-debian基础镜像来搭建MySQL数据库环境。

环境

镜像版本
mysql:5.7-debian
操作系统CentOS 7 x86_64 2009
服务器TFCentOS7x64
IP192.168.168.68
端口3306

安装

Dockerfile

基础镜像

福哥选择的是mysql:5.7-debian这个基础镜像,这个镜像是基于debian系统的。

https://hub.docker.com/_/mysql/tags?page=1&name=5.7-debian

home/topic/2023/0404/09/a4d7382273daca6aab9a82534f8d40f5.png

现在hub.docker.com依然打不开,大家就选这个版本吧!

拉取镜像mysql:5.7-debian,添加到registry.tongfu.net:5000私有仓库里面。

docker pull mysql:5.7-debian
docker tag mysql:5.7-debian registry.tongfu.net:5000/mysql:5.7-debian
docker rmi mysql:5.7-debian
docker images | grep mysql

home/topic/2023/0727/22/4f1f7fdd5756c54ac233fc460eb86ffe.png

创建镜像目录

创建镜像目录tfmysql5并切换到tfmysql5目录下面。

mkdir /tongfu.net/data/dockerfile/tfmysql5
cd /tongfu.net/data/dockerfile/tfmysql5

home/topic/2023/0727/22/52406fb072f6c29797230f972717ba39.png

依赖镜像

第一行写上依赖镜像mysql:5.7-debian。

FROM registry.tongfu.net:5000/mysql:5.7-debian

维护者信息

这个是福哥写的维护者信息。

# for MAINTAINER
MAINTAINER Author: Andy Bogate
MAINTAINER Email: tongfu@tongfu.net
MAINTAINER Home page: https://tongfu.net
MAINTAINER Datetime: 2023/04/02
MAINTAINER Version: v1.0

配置文件

mysqld.cnf

mysqld.cnf的存放目录是/etc/mysql/mysql.conf.d/,默认的mysqld.cnf里面只有一些基本的配置项。如果我们想要设置更多的MySQL服务器参数,可以将这个文件拷贝出来进行编辑,最后再通过Dockerfile打包到镜像里面。

启动临时容器,从容器里复制mysqld.cnf出来放到镜像目录下。

docker run -tid --name ttt -h ttt -e MYSQL_ROOT_PASSWORD=abcdef registry.tongfu.net:5000/mysql:5.7-debian
docker cp ttt:/etc/mysql/mysql.conf.d/mysqld.cnf mysqld.cnf
docker rm -f ttt

home/topic/2023/0727/22/1d80040cf96b30b39b3e280d32d36d70.png

福哥设置了server-id和binlog日志相关参数,可以用来作为主节点使用;福哥还设置了环境变量,因为默认的参数性能释放比较保守;福哥针对innodb的默认参数进行了优化,提高性能。

福哥还设置了sql_mode参数,默认的sql_mode比较严格,一般的SQL会执行不了。

server-id = 202307181
log-bin = tfmysql-bin
max_binlog_size = 256M
expire_logs_days = 6

max_allowed_packet = 128M
max_connections = 100
max_connect_errors = 1000
key_buffer_size = 8M
table_open_cache = 256
open_files_limit = 65535
query_cache_size = 0
tmp_table_size = 8M
thread_cache_size = 8
read_buffer_size = 128K
sort_buffer_size = 256K
join_buffer_size = 128K

myisam_max_sort_file_size = 1G
myisam_sort_buffer_size = 8M

innodb_flush_log_at_trx_commit = 2 # 0 - no writen, 1 - writen everytimes, 2 - writen per second
innodb_log_buffer_size = 2M
innodb_buffer_pool_size = 32M
innodb_log_file_size = 16M
innodb_thread_concurrency = 4

sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

home/topic/2023/0727/23/3c593ca85c1417e25a375fcd1155a978.png在创建新的镜像的时候把mysqld.cnf配置文件拷贝进去。

# mysqld.cnf
COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

创建镜像

使用下面的命令创建tfmysql:5.7-1.0.0镜像。

docker build -f Dockerfile \
-t registry.tongfu.net:5000/tfmysql:5.7-1.0.0 ./

home/topic/2023/0727/22/6cf970ec921be20ce6f6a7829491ac38.png

查看镜像

看看tfmysql:5.7-1.0.0镜像。

docker images | grep tfmysql

home/topic/2023/0727/22/4ac0da11d3af5f2ae4926a4dd2d7db77.png

启动MySQL

MySQL数据目录

在宿主机建立一个用来存放MySQL数据的目录,它将被映射到容器的MySQL数据目录上面。

mkdir -p /tongfu.net/data/docker/data/tfmysql
chown 999.999 /tongfu.net/data/docker/data/tfmysql

启动容器

使用下面的命令基于tfmysql:5.7-1.0.0镜像启动一个容器,将3306端口映射到宿主机上面,将/var/lib/mysql这个mysql数据目录映射到前面建立的目录上面。

docker run -tid \
--name tfmysql \
-h tfmysql \
-p 3306:3306 \
-v /tongfu.net/data/docker/data/tfmysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=abcdef \
registry.tongfu.net:5000/tfmysql:5.7-1.0.0

home/topic/2023/0727/22/d8c678a82df47f41ae7f9b08c5028f9a.png

安装Workbench

下载

Workbench是一款官方的免费的用于管理MySQL数据库的软件,既然是官方的,还是免费的,用它挺好!

https://dev.mysql.com/downloads/workbench/

home/topic/2023/0727/22/81eda6c525dea435270cd84f6bc0fcae.png

安装

启动安装包,一路“Next”就可以了!

home/topic/2023/0727/22/0fbbebcbc119432cd3de88349a8f70ae.pnghome/topic/2023/0727/22/fa3d92492f89e9bdfcde20bc9559b070.png

home/topic/2023/0727/22/8b6fd45ffdc74ecd5b060f970adc721c.pnghome/topic/2023/0727/22/239ef5d49239c004043b6f9329ce7476.pnghome/topic/2023/0727/22/b5b67647175d94dac4753263082938f0.pnghome/topic/2023/0727/22/0fa7437f06a0d6a0f3aae23160c22d35.png

安装完成了,这个就是Workbench的主界面了!
home/topic/2023/0727/22/af4ad3c106731e3cc034ceb1b9318759.png

MySQL基本操作

登录MySQL

使用下面的命令登录MySQL服务器。

docker exec -ti tfmysql mysql -uroot -pabcdef

home/topic/2023/0727/22/eda94b99be320b27f1b6b04bf2817d0d.png

创建数据库

创建一个数据库tfmysql,数据编码utf8mb4。

create database tfmysql default charset utf8mb4;

home/topic/2023/0727/23/c01bb000e52c6fbcb8b058a5f00d8c25.png

切换数据库

切换到新创建的数据库tfmysql里面。

use tfmysql

home/topic/2023/0727/23/6ecc122cf75969be7fb96c12410920f6.png

创建数据表

在tfmysql数据库里面创建一个数据表user,设置字段userId、userName,userPwd、createDT、updateDT、lastLoginDT。

CREATE TABLE user (
    userId INT NOT NULL AUTO_INCREMENT,
    userName VARCHAR(45) NOT NULL,
    userPwd CHAR(32) NOT NULL,
    createDT DATETIME,
    updateDT DATETIME,
    lastLoginDT DATETIME,
    PRIMARY KEY (userId),
    KEY u_userName (userName)
);

home/topic/2023/0727/23/2b66a0c23ebcbfc296bae5c8758d0670.png

Workbench操作MySQL

创建连接

按照福哥写的参数添加一个连接,点击“Test Connection”测试连接是否正常。

home/topic/2023/0727/23/59825f6129905ff488a4925fac4afc2e.png

这时输入tfmysql的密码,勾选“Save password in vault”把密码保存起来。
home/topic/2023/0727/23/3adc47d18ee6acfea6385bbb78598e21.png

连接测试成功了!
home/topic/2023/0727/23/cad451fb3a9ebaaef5a545a2295c3b76.png

点击“OK”完成连接的创建!
home/topic/2023/0727/23/053b8bbd53d08f09975dd647fbe022f2.png

进入tfmysql5这个连接,把界面布局改成这样!

home/topic/2023/0727/23/88f38ea6d8ba6f4f7547022fc637a07d.png

插入数据

在默认的窗口里面编写两条INSERT语句,向user数据表里插入两条数据。

INSERT INTO user (userName, userPwd, createDT) VALUES ('福哥', md5('abcdef'), now());
INSERT INTO user (userName, userPwd, createDT) VALUES ('鬼谷子叔叔', md5('abcdef'), now());

home/topic/2023/0727/23/fccc11815a7c0302f552a31564e4beae.png

查询数据

编写SELECT语句查询刚刚插入的两条数据。

SELECT * FROM user;

home/topic/2023/0727/23/0bfd330767ac0a739e6df9de083449e0.png

PHP操作MySQL

查询tfmysql容器IP地址

使用inspect命令查询tfmysql容器的IP地址,tfmysql的IP地址是172.17.0.3。

docker inspect tfmysql | grep IPAddress

home/topic/2023/0727/23/20135c1236e050de0b489d9c935160ef.png

tfmysql.php

在/tongfu.net/data/docker/data/tfphp/html/目录下面建立tfmysql.php程序文件,编写连接MySQL数据库的程序,这里面会用到刚刚查到的tfmysql容器的IP地址172.17.0.3。

<?php

header("Content-Type: text/html; charset=utf-8");

try{
    // 连接数据库
    $pdo = new \PDO("mysql:host=172.17.0.3;dbname=tfmysql", "root", "abcdef", [\PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8mb4"]);
    $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

    // 获取数据库列表
    $rs = $pdo->prepare("show databases");
    $rs->execute();
    $dbs = $rs->fetchAll(\PDO::FETCH_ASSOC);

    // 获取数据表列表
    $rs = $pdo->prepare("show tables");
    $rs->execute();
    $tables = $rs->fetchAll(\PDO::FETCH_ASSOC);

    // 获取数据表数据
    $rs = $pdo->prepare("select * from user");
    $rs->execute();
    $data = $rs->fetchAll(\PDO::FETCH_ASSOC);

    // 数据库
    echo "<table border=\"1\"><tbody>";
    echo "<tr><th>Database</th></tr>";
    foreach ($dbs as $db){
        echo "<tr><td>". $db['Database']. "</td>";
    }
    echo "</tbody></table>";

    // 数据表
    echo "<table border=\"1\"><tbody>";
    echo "<tr><th>Table</th></tr>";
    foreach ($tables as $table){
        echo "<tr><td>". $table['Tables_in_tfmysql']. "</td>";
    }
    echo "</tbody></table>";

    // 数据
    echo "<table border=\"1\"><tbody>";
    echo "<tr>";
    foreach ($data[0] as $field => $value){
        echo "<th>". $field. "</th>";
    }
    echo "</tr>";
    foreach ($data as $row){
        echo "<tr>";
        foreach ($row as $field => $value){
            echo "<td>". $value. "</td>";
        }
        echo "</tr>";
    }
    echo "</tbody></table>";
}
catch (\PDOException $e){
    echo $e->getMessage();
}

启动tfphp容器

因为福哥把TFCentOS7x64虚拟机重新启动了,所以之前启动的所有容器都停止了。现在我们要用到tfphp容器,通过下面的命令把它启动起来。

docker start tfphp

浏览器访问

打开浏览器访问http://192.168.168.68/tfmysql.php,可以看到MySQL的数据库信息。

home/topic/2023/0727/23/2384c4e39d71f665b648feb1bebb0f02.png

总结

今天福哥在TFCentOS7x64服务器上面通过Dockerfile创建了一个镜像tfmysql:5.7-1.0.0,并且通过这个新创建的镜像tfmysql:5.7-1.0.0启动了一个容器,这个镜像用来运行MySQL数据库服务。

后面福哥会教给大家使用各种编程语言去操作MySQL数据库的方法,敬请期待~