相关推荐recommended
基于docker容器部署MySQL数据库
作者:mmseoamin日期:2024-01-30

一,概要.... 2

二,环境准备.... 3

2.1,docker部署.... 3

三,使用docker部署mysql 6

3.1、创建数据存放目录.... 6

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

3.3、Docker安装MySQL. 6

3.4、自定义配置.... 7

四,MySQL简单的配置.... 9

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

4.2、mysql登录.... 9

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

4.4,验证Navicat远程连接MySQL. 10

五,数据库的导出备份.... 11

5.1,数据库备份.... 11

5.2,数据库还原.... 12

六,MySQL常用简单命令   13

一,概要

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

    基于docker容器部署MySQL数据库,第1张

    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容器部署MySQL数据库,第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 --privileged=true \

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

    -e MYSQL_ROOT_PASSWORD=123456 \

    mysql

    注意:若不加字段--privileged=true可能会报权限错误,报错信息如下图所示:

    基于docker容器部署MySQL数据库,第3张

     

    基于docker容器部署MySQL数据库,第4张

    基于docker容器部署MySQL数据库,第5张

    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

    基于docker容器部署MySQL数据库,第6张

    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 \

    -v --privileged=true \

    -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

    基于docker容器部署MySQL数据库,第7张

    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

    基于docker容器部署MySQL数据库,第8张

    基于docker容器部署MySQL数据库,第9张

    五,数据库的导出备份

    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

    基于docker容器部署MySQL数据库,第10张

    # 导出到指定路径下为

       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:/上传路径 /路径/文件名