构建数据服务
本部分的目标是使用 golang database/sql 写出易于阅读、扩展和可维护的数据库服务。重点是掌握经典的 “entity - dao - service” 层次结构编程模型
一、安装数据库
golang 推荐的数据库是 postgresql ,中国程序员一般比较喜欢 mysql。
这里我们仅介绍用 docker 安装 mysql。
1.1 下载镜像
$ sudo docker pull mysql:5.7
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 5709795eeffa 13 days ago 408MB
docker pull
从 docker hub 仓库取名字为mysql:5.7
镜像。 镜像名称格式为仓库名:标签(tag)
默认 tag 是latest
docker images
本地仓库镜像列表
安装 docker centos 7 安装 Docker
1.2 启动 mysql 作为主机服务
主机服务(HOST Service)就是作为宿主机器的一个服务进程。
$ sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c55170cbf764 mysql:5.7 "docker-entrypoint..." 8 minutes ago Up 8 minutes 0.0.0.0:3306->3306/tcp mysql2
容器可以看作自带文件系统和网络环境的进程。
docker run
就是运行容器镜像文件系统内部的一个命令(CLI)。
- 参数 1 是镜像
mysql:5.7
; -p
是容器内部网络端口到主机端口的映射;--name
进程的名称, ID 是短唯一标识-e
设置进程(容器)的环境变量-d
后台运行
- 参数 1 是镜像
1.3 启动 mysql client 访问服务器
mysql 镜像已自带了命令行客户端,启动 client 的命令:
$ sudo docker run -it --net host mysql:5.7 "sh"
# mysql -h127.0.0.1 -P3306 -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
这里:
sudo docker run -it --rm --net host mysql:5.7 "sh"
启动了容器内 sh 进程。
-it
等价于-i -t
,表示使用当前 stdin 和 stdout 作为该进程的 io--rm
, 当该进程结束时,自动清理该容器的文件系统空间--net host
,表示容器使用当前主机的网络环境- 参数1 参数2,分别是镜像和在镜像中执行的命令
#
表示你处于容器的超级管理员的 shellmysql -h127.0.0.1 -P3306 -uroot -proot
mysql 客户端的命令
1.4 一些问题与注意事项
1、使用 –rm 的重要性
对于 mysql 服务器,由于没有使用 –rm 参数,我们创建的数据库会留在该进程(容器)的文件系统上。即使该进程停止,也不会清理这些文件,使用 sudo docker ps -a
可以查到这些容器的文件系统。
对于 mysql 客户端工具,由于没有值得保存的数据,所以需要进程结束后自动清理。
如果忘记加 --rm
选项,可使用 sudo docker rm $(sudo docker ps -a -q)
可以清理这些残留的文件。
2、如果服务器宕机
如果异常关闭机器,要重启 mysql ,请使用 sudo docker start ...
。
更多操作 一张图读懂 docker 命令
3、如果忘记使用 -it 选项
这时你无法与应用程序交互,请打开一个新的控制台,使用 docker kill
杀死进程
二、mysql 基本数据库操作
创建数据库 test : create datebase test;
注意以 ;
结束
查询数据库: show databases;
设定 test 为当前数据库: use test;
删除数据库 test: drop database test;
显示表: show tables;
显示表 userinfo 结构: describe userinfo
执行查询语句: sql statement;
测试:
创建数据库test,用户表userinfo,关联用户信息表userdetail。
create database test;
use test;
CREATE TABLE `userinfo` (