在上篇博客我们看了Redhat 7.7 系统上Docker的安装,本篇我们来看Docker上安装MySQL数据库。
Linux 7.7 安装 Docker
https://www.cndba.cn/dave/article/4100
1 启动Docker
[root@www.cndba.cn ~]# systemctl restart docker
[root@www.cndba.cn ~]# ps -ef|grep docker
root 46862 1 0 21:24 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 64034 9737 0 22:06 pts/1 00:00:00 grep --color=auto docker
[root@www.cndba.cn ~]#
2 安装MySQL
Docker上Mysql的官方文档如下:
https://hub.docker.com/_/mysql
我们这里直接安装。
2.1 搜索mysql 镜像
[root@www.cndba.cn ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9303 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3324 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 683 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 71
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 66
centurylink/mysql Image containing mysql. Optimized to be link… 61 [OK]
deitch/mysql-backup REPLACED! Please use http://hub.docker.com/r… 41 [OK]
bitnami/mysql Bitnami MySQL Docker Image 36 [OK]
tutum/mysql Base docker image to run a MySQL database se… 34
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 29 [OK]
prom/mysqld-exporter 27 [OK]
linuxserver/mysql A Mysql container, brought to you by LinuxSe… 24
centos/mysql-56-centos7 MySQL 5.6 SQL database server 19
circleci/mysql MySQL is a widely used, open-source relation… 19
mysql/mysql-router MySQL Router provides transparent routing be… 14
arey/mysql-client Run a MySQL client from a docker container 13 [OK]
databack/mysql-backup Back up mysql databases to... anywhere! 13
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6
fradelg/mysql-cron-backup MySQL/MariaDB database backup using cron tas… 5 [OK]
genschsa/mysql-employees MySQL Employee Sample Database 5 [OK]
devilbox/mysql Retagged MySQL, MariaDB and PerconaDB offici… 2
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 2 [OK]
jelastic/mysql An image of the MySQL database server mainta… 1
widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… 0 [OK]
monasca/mysql-init A minimal decoupled init container for mysql 0
[root@www.cndba.cn ~]#
2.2 下载mysql 镜像
可以直接从官网的docker源下载,但是速度很慢:
[root@www.cndba.cn ~]# docker pull mysql
Docker 配置国内源
下载最新版本的mysql镜像:
[root@www.cndba.cn mysql_docker]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
68ced04f60ab: Pull complete
f9748e016a5c: Pull complete
da54b038fed1: Pull complete
6895ec5eb2c0: Pull complete
111ba0647b87: Pull complete
c1dce60f2f1a: Pull complete
702ec598d0af: Pull complete
4aba2fcbe869: Pull complete
b26bbbd533e6: Pull complete
7bd100a66c55: Pull complete
74149336419a: Pull complete
145ea1f01648: Pull complete
Digest: sha256:4a30434ce03d2fa396d0414f075ad9ca9b0b578f14ea5685e24dcbf789450a2c
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
[root@www.cndba.cn mysql_docker]#
下载5.7 版本的mysql镜像:
[root@www.cndba.cn ~]# docker pull mysql:5.7
[root@www.cndba.cn ~]# docker pull mysql:8.0
8.0: Pulling from library/mysql
Digest: sha256:4a30434ce03d2fa396d0414f075ad9ca9b0b578f14ea5685e24dcbf789450a2c
Status: Downloaded newer image for mysql:8.0
docker.io/library/mysql:8.0
2.3 查看镜像
[root@www.cndba.cn mysql_docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb latest 37f5f0a258bf 7 days ago 356MB
mysql 5.7 84164b03fa2e 3 weeks ago 456MB
mysql 8.0 9b51d9275906 3 weeks ago 547MB
mysql latest 9b51d9275906 3 weeks ago 547MB
[root@www.cndba.cn mysql_docker]#
我们这里有4个镜像,因为mysql 最新版本就是8.0,所以latest和8.0 的 image ID 是一样的。
2.4 配置MySQL 数据卷并启动容器
数据卷用来将MySQL的数据直接存放到操作系统上。 这里我们先创建相关的存储目录。
[root@www.cndba.cn ~]# mkdir -p /opt/mysql_docker
[root@www.cndba.cn ~]# cd /opt/mysql_docker/
[root@www.cndba.cn mysql_docker]# echo $PWD
/opt/mysql_docker
[root@www.cndba.cn mysql_docker]#
在第一次启动容器时使用docker run命令,该命令会将镜像注册到Docker中,改命令可以指定相关参数,比如我们指定了对应的数据卷,这里可以指定绝对路径,也可以进入目录后使用$PWD变量。 注意我们这里使用的mysql:latest的镜像,即最新的8.0 的镜像。
[root@www.cndba.cn ~]# docker run --name mysqlserver -v /opt/mysql_docker/conf:/etc/mysql/conf.d -v /opt/mysql_docker/logs:/logs -v /opt/mysql_docker/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3306:3306 mysql:latest
34ad82852c64cd8fd93ef2af6c0cb827f57ada25c03884cfe0aabffc2946ee9a
[root@www.cndba.cn ~]#
容器目录在:/var/lib/docker/containers/,查看容器的文件:
[root@www.cndba.cn ~]# ll /var/lib/docker/containers/
total 0
drwx------ 4 root root 237 Mar 29 00:00 34ad82852c64cd8fd93ef2af6c0cb827f57ada25c03884cfe0aabffc2946ee9a
[root@www.cndba.cn ~]# ll /var/lib/docker/containers/34ad82852c64cd8fd93ef2af6c0cb827f57ada25c03884cfe0aabffc2946ee9a/
total 32
-rw-r----- 1 root root 6408 Mar 29 00:00 34ad82852c64cd8fd93ef2af6c0cb827f57ada25c03884cfe0aabffc2946ee9a-json.log
drwx------ 2 root root 6 Mar 29 00:00 checkpoints
-rw------- 1 root root 3574 Mar 29 00:00 config.v2.json
-rw-r--r-- 1 root root 1625 Mar 29 00:00 hostconfig.json
-rw-r--r-- 1 root root 13 Mar 29 00:00 hostname
-rw-r--r-- 1 root root 174 Mar 29 00:00 hosts
drwx------ 2 root root 6 Mar 29 00:00 mounts
-rw-r--r-- 1 root root 53 Mar 29 00:00 resolv.conf
-rw-r--r-- 1 root root 71 Mar 29 00:00 resolv.conf.hash
[root@www.cndba.cn ~]# ll /var/lib/docker/containers/34ad82852c64cd8fd93ef2af6c0cb827f57ada25c03884cfe0aabffc2946ee9a/mounts/
total 0
[root@www.cndba.cn ~]#
查看容器进程:
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34ad82852c64 mysql:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlserver
[root@www.cndba.cn ~]#
关闭docker中mysql容器
[root@www.cndba.cn ~]# docker stop mysqlserver
mysqlserver
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34ad82852c64 mysql:latest "docker-entrypoint.s…" 5 minutes ago Exited (0) 1 second ago mysqlserver
[root@www.cndba.cn ~]#
启动Docker中的容器:
[root@www.cndba.cn ~]# docker start mysqlserver
mysqlserver
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34ad82852c64 mysql:latest "docker-entrypoint.s…" 13 minutes ago Up 7 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlserver
[root@www.cndba.cn ~]#
[root@www.cndba.cn ~]# docker restart mysqlserver
mysqlserver
[root@www.cndba.cn ~]# docker restart 34ad82852c64
34ad82852c64
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34ad82852c64 mysql:latest "docker-entrypoint.s…" 14 minutes ago Up 1 second 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlserver
[root@www.cndba.cn ~]#
这里可以通过容器的名称或者容器ID来操作容器。
这里要注意docker run 和 docker start 的区别:
1.docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
2.docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
查看数据卷的文件:
[root@www.cndba.cn data]# pwd
/opt/mysql_docker/data
[root@www.cndba.cn data]# ls
auto.cnf binlog.000004 ca.pem ibdata1 #innodb_temp private_key.pem sys
binlog.000001 binlog.000005 client-cert.pem ib_logfile0 mysql public_key.pem undo_001
binlog.000002 binlog.index client-key.pem ib_logfile1 mysql.ibd server-cert.pem undo_002
binlog.000003 ca-key.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem
[root@www.cndba.cn data]#
2.5 查看Docker 容器的日志
[root@www.cndba.cn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34ad82852c64 mysql:latest "docker-entrypoint.s…" 18 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlserver
[root@www.cndba.cn ~]#
这里使用容器Name 和 容器ID 都可以,如下:
[root@www.cndba.cn ~]# docker logs -f --tail 10 mysqlserver
[root@www.cndba.cn ~]# docker logs -f --tail 10 34ad82852c64
2020-03-28T16:14:54.516835Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
2020-03-28 16:14:55+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-03-28 16:14:55+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-03-28 16:14:55+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-03-28T16:14:55.411666Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-03-28T16:14:55.411752Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 1
2020-03-28T16:14:55.671967Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-03-28T16:14:55.673093Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2020-03-28T16:14:55.684518Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.19' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
2020-03-28T16:14:55.851569Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
^C
[root@www.cndba.cn ~]#
2.6 登陆容器并连接MySQL
登录容器:
[root@www.cndba.cn ~]# docker exec -it mysqlserver bash
连接mysql:
root@34ad82852c64:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, 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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
2.7 开启远程访问限制
按如下命令操作,配置完成之后,就可以通过远程的工具(比如navicat)直接连接MySQL的容器了:
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>

注意这里连接的IP 地址是Docker 主机的IP地址,端口我们在docker run时做了映射,也是3306。 如果连接异常,可以查看容器的日志:
[root@www.cndba.cn ~]# docker logs mysqlserver
2.8 备份MySQL
在Docker 主机创建存放备份的目录:
[root@www.cndba.cn mysql_docker]# mkdir backup
[root@www.cndba.cn mysql_docker]# pwd
/opt/mysql_docker
[root@www.cndba.cn mysql_docker]# ls
backup conf data logs
[root@www.cndba.cn mysql_docker]#
执行备份:
[root@www.cndba.cn mysql_docker]# docker exec -it mysqlserver mysqldump --all-databases -uroot -p123456 > /opt/mysql_docker/backup/alldbs.sql
[root@www.cndba.cn mysql_docker]#
[root@www.cndba.cn mysql_docker]# pwd
/opt/mysql_docker
[root@www.cndba.cn mysql_docker]# ll backup/
total 3624
-rw-r--r-- 1 root root 3708512 Mar 29 00:37 alldbs.sql
[root@www.cndba.cn mysql_docker]# head backup/alldbs.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
-- MySQL dump 10.13 Distrib 8.0.19, for Linux (x86_64)
--
-- Host: localhost Database:
-- ------------------------------------------------------
-- Server version 8.0.19
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
[root@www.cndba.cn mysql_docker]#
2.9 恢复MYSQL
注意这里用的是-i 选项:
docker exec -i mysqlserver mysql sh -c ‘exec mysql -uroot -p123456’ < /opt/mysql_docker/backup/alldbs.sql
但是执行该命令的时候会报如下错误:
read unix @->/var/run/docker.sock: read: connection reset by peer
应该是某些步骤有问题,先不研究了。
当然,也可以通过navicat工具,进行图形化的备份恢复操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:Docker 配置国内源
- 下一篇:Docker 搭建私有仓库



