0


基于docker容器部署MySQL数据库

一,概要

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对 PHP 有很好的支持,PHP 是很适合用于 Web 程序开发。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • \MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

二,环境准备

2.1,docker部署

安装docker的前提条件:

  1. .必须是64位CPU架构的计算机,Docker目前不支持32位CPU;

  2. .运行Linux3.8或更高版本内核,CentOS时内核必不小于3.10;

  3. .内核必须支持一种合适的存储驱动,可以是Device Manager、AUFS、vfs、btrfs、以及默认的驱动Device Mapper中的一个;

  4. .内核必须支持并开启cgroup和命名空间namespace功能。

使用下面的命令来查看centos的内核版本

uname –r

2.1.1 yum 部署docker

#注意: 这里是首次安装, 之前安装过的要先卸载旧版本的包哦!!!

更新yum包, 确保最新

yum update

卸载旧版本docker,新机器可以忽略

sudo yum remove docker \

            docker-common \

            docker-selinux \

            docker-engine

安装需要的依赖软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum docker 源

//官方镜像

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

//阿里镜像

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装DockerCE

sudo yum install docker-ce

2.1.2 脚本安装

脚本安装(多用于测试和开发环境)

$ curl -fsSL https://get.docker.com -o get-docker.sh

$ sudo sh get-docker.sh

2.2 配置镜像加速器

以阿里云镜像加速器为例

注意:每个阿里云账户所持有镜像加速器均不同

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://**20l7s9.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

三,使用docker部署mysql

3.1、创建数据存放目录

注意:这是数据库数据存放目录,保障下次重新安装数据不丢失

mkdir -p /data/mysql/data

chmod 777 /data/mysql/data

cd /data/mysql/data

3.2、创建bridge网络并指定IP区间

注意:多容器IP访问必备

#创建自定义网络

docker network create --driver bridge --subnet 172.0.0.0/16 ****

#查看已存在网络

docker network ls

3.3、Docker安装MySQL

端口:3306,初始密码:123456

数据存放目录:/dat/mysql/data

#创建mysql容器

此处以虚拟机部署安装为例,省略指定网络,IP

sudo docker run -d -p 3306:3306 \

--name mysql \

-v /data/mysql/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=123456 \

mysql

3.4、自定义配置

3.4.1、创建配置存放映射目录

mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf

chmod -R 755 /data/mysql/

3.4.2、将 MySQL 容器里的配置文件复制到该路径

docker cp mysql:/etc/mysql/my.cnf /data/mysql/conf

3.4.3、删除 MySQL 容器

docker rm -f mysql

3.4.4,重新创建MySQL容器

#重新创建MySQL容器将数据,日志,配置文件映射到本机

docker run -p 3306:3306 --name mysql8 --restart always \

-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \

-v /data/mysql/logs:/logs \

-v /data/mysql/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.31

3.4.5、编辑配置文件

vim /data/mysql/conf/my.cnf

最大连接数

max_connections=10000

设置默认时区

default-time_zone='+8:00'

#重启 MySQL 容器

docker restart mysql

四,MySQL简单的配置

4.1、在容器 mysql 中开启一个交互模式的终端

进入docker容器中

docker exec -it mysql /bin/bash

4.2、mysql登录

mysql -u root –p

4.3、给予远程用户所有表所有权限

GRANT ALL ON . TO 'root'@'%';

更改加密规则

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;

远程访问

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

刷新权限

flush privileges;

退出

exit

4.4,验证Navicat远程连接MySQL

五,数据库的导出备份

5.1,数据库备份

#进入容器

docker exec -it 【容器ID】 /bin/bash

或者

docker exec -it 【容器ID】 bash

数据库导出 (docker 进入容器之后操作)

常用

导出整个数据库(包括数据库中的数据)

mysqldump -u username -p 数据库 > 数据库.sql

导出数据库结构(不含数据)

mysqldump -u username -p -d 数据库 > 数据库.sql

导出数据库中的某张数据表(包含数据)

mysqldump -u username -p 数据库 表 > 表.sql

导出到指定文件路径下

查看容器映射卷也就是挂载文件夹的地方(容器中的/var/lib/mysql路径会挂载到linux的某个目录下面,下面命令查看)

docker inspect name/id | grep Mounts -A 20

导出到指定路径下为

mysqldump -R -uroot -p 数据库 > /var/lib/mysql/数据库_bak.sql

/var/lib/mysql/ 为容器中的路径,执行上面的命令之后查看该路径下面是否有数据库_bak.sql生成

相应的在Linux本地系统挂载路径下同样生成 数据库_bak.sql

备份完成之后退出容器

5.2,数据库还原

导入数据库(docker 进入容器之后操作)

mysql -uroot -p

use 【数据库名称】;

source 【sql文件】# 此处source 数据库的存放路径为Linux系统本地挂载MySQL的路径

例:source /data/MySQL/data/数据库.sql

导入数据到数据库

mysql -uroot -D数据库名

导入数据到数据库中得某个表

mysql -uroot -D数据库名 表名

六,MySQL常用简单命令

删除mysql命令

docker rm mysql

强制删除mysql容器

docker rm -f mysql

删除mysql镜像

docker rmi mysql

查看docker镜像

docker images

查看运行中容器

docker ps

查看所有容器

docker ps -a

删除容器

docker rm 容器ID或者容器名称

导出整个数据库(包括数据库中的数据)

mysqldump -u username -p 数据库 > 数据库.sql

导出数据库结构(不含数据)

mysqldump -u username -p -d 数据库 > 数据库.sql

导出数据库中的某张数据表(包含数据)

mysqldump -u username -p 数据库 表 > 表.sql

导出数据库中的某张数据表的表结构(不含数据)

mysqldump -u username -p -d 数据库 表 > 表.sql

恢复数据

mysql -uroot -p 【数据库名称】 < 【sql文件】

docker 中的文件拷贝 (docker容器中的文件copy到本地文件)

docker cp 【容器ID】:【容器目录】【目标目录】

传文件进docker指定路径

执行下面命令上传文件到容器中的镜像的指定位置

docker cp /本地路径/文件名 容器ID or name:/上传路径

从docker传文件到实体机

同理,如果我们需要将docker中的文件传输到实体机上,我们只需要将之前的cp命令方向反过来

docker cp 容器ID:/上传路径 /路径/文件名

标签: 数据库 mysql docker

本文转载自: https://blog.csdn.net/qq_52497256/article/details/128870731
版权归原作者 派大星的头脑 所有, 如有侵权,请联系我们删除。

“基于docker容器部署MySQL数据库”的评论:

还没有评论