签到成功

知道了

CNDBA社区CNDBA社区

Redhat 7.7 系统上 Docker 安装 MySQL

2020-03-29 01:10 3737 0 原创 Docker
作者: dave

在上篇博客我们看了Redhat 7.7 系统上Docker的安装,本篇我们来看Docker上安装MySQL数据库。

Linux 7.7 安装 Docker
https://www.cndba.cn/dave/article/4100

http://www.cndba.cn/cndba/dave/article/4102

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 配置国内源http://www.cndba.cn/cndba/dave/article/4102http://www.cndba.cn/cndba/dave/article/4102

https://www.cndba.cn/dave/article/4101

下载最新版本的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镜像:

http://www.cndba.cn/cndba/dave/article/4102

[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)。

http://www.cndba.cn/cndba/dave/article/4102

查看数据卷的文件:

[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

登录容器:http://www.cndba.cn/cndba/dave/article/4102http://www.cndba.cn/cndba/dave/article/4102

[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

但是执行该命令的时候会报如下错误:http://www.cndba.cn/cndba/dave/article/4102http://www.cndba.cn/cndba/dave/article/4102

read unix @->/var/run/docker.sock: read: connection reset by peer

应该是某些步骤有问题,先不研究了。

当然,也可以通过navicat工具,进行图形化的备份恢复操作。http://www.cndba.cn/cndba/dave/article/4102

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 645
    转载
  • 198
    评论
  • 访问:9627975次
  • 积分:4543
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ