• centos7 docker 安装 mysql5.7.24 导入12G的sql


    先在CentOS7里面安装docker

    Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本

    uname -r

    3.10.0-514.el7.x86_64

    1、初步安装和启动docker
    yum update -y
    yum -y install docker
    systemctl start docker


    2、设置镜像
    vi /etc/docker/daemon.json

    {
    "registry-mirrors": ["https://aj2rgad5.mirror.aliyuncs.com"]
    }

    加速器地址可以在阿里云找到


    3、开放管理端口映射
    vi /lib/systemd/system/docker.service

    将第11行的ExecStart=/usr/bin/dockerd,替换为:

    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654

    2375是管理端口,7654是备用端口

    在~/.bashrc中写入docker管理端口

    export DOCKER_HOST=tcp://0.0.0.0:2375

    source ~/.bashrc


    4、重启docker
    systemctl daemon-reload
    systemctl restart docker.service


    5、测试docker是否正常安装和运行
    docker run hello-world

    6、查看结果
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    安装好docker后安装mysql

    安装
    1、拉取镜像(这里使用5.7.24版本)

    docker pull mysql:5.7.24

    2、启动

    # 创建了一个名为mysql5_7_24的MySQL数据库服务器容器实例
    docker run --name mysql5_7_24 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24


    命令说明:

    -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
    -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
    其他命令
    访问容器
    docker exec -it mysql5_7_24 bash

    进入容器内部,我们就可以登录到mysql了

    [root@localhost ~]# docker exec -it mysql5_7_24 bash
    root@95a0cd6077a0:/# ls
    bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
    root@95a0cd6077a0:/# mysql -uroot -p
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 7
    Server version: 5.7.24 MySQL Community Server (GPL)

    Copyright (c) 2000, 2018, 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 |
    | novadb |
    | performance_schema |
    | sys |
    +--------------------+
    5 rows in set (0.00 sec)

    mysql>


    查看日志
    docker logs -f mysql5_7_24

    进入终端
    docker exec -it mysql5_7_24 mysql -uroot -proot

    使用自定义MySQL配置文件
    默认情况下,MySQL的启动配置文件是/etc/mysql/my.cnf,而/etc/mysql/conf.d目录下的存在任何.cnf格式的文件时,都会使用该文件中配置项替换默认配置。
    因此,如果要使用自定义配置,可以在宿主机创建一个配置文件,然后在创建容器时通过-v参数,以数据卷的方式将自定义配置挂载到mysql容器的/etc/mysql/conf.d目录下。

    例:

    docker run --name mysql5_7_24 -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24

    以上示例会启动一个名为mysql5_7_24的MySQL服务器容器,该文件启动时会同时使用/usr/local/mysql/conf/my.cnf中的配置

    注:如果使用到mysql主从配置,那么在mysql 5.7版本中不要使用挂载配置文件的方式,可以采用宿主机拷贝替换容器中的/etc/mysql/my.cnf文件,因为博主发现挂载配置文件开启log-bin没有生效,在这块遇到了坑,如果谁有更好的方法可以给博主留言

    数据存储
    在使用mysql镜像创建MySQL容器时,数据库数据存储可能会有以下两种方式:
    1).数据卷容器:使用Docker默认的数据管理方式来管理数据库的数据存储,在这种方式下,数据库文件会被写入数据库的内部。这种方式对于用户非常简单,缺点是很在宿主机上找到所存储的数据。

    2).外部数据卷:在宿主机创建一个数据目录,再将数据目录挂载到容器内部。这种方式可以很方便的在宿主机上找到并进行数据管理,但需要确保数据目录的存在。

    当使用外部数据卷时,例:

    docker run --name mysql5_7_24 -p 3306:3306 -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24

    表示将宿主机的/usr/local/mysql/data目录挂载到容器内的/var/lib/mysql目录

    日志存储
    同理,我们也可以将日志挂载到宿主机上,例:

    docker run --name mysql5_7_24 -p 3306:3306 -v /usr/local/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24

    表示将宿主机的/usr/local/mysql/log目录挂载到容器内的/var/log/mysql目录

    那么总结起来同时挂载配置、数据卷、日志的命令为:

    docker run --name mysql5_7_24 -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24

    我安装的时候直接指定的my.cnf配置文件也是可以的如下

    docker run --name mysql5_7_24 -p 3306:3306 -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24

    其中的 -- privileged=true

    是我启动mysql的时候发现mysql启动不了,通过 docker logs命令查看,发现提示信息是:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied

    于是,解决方法有这么三个:

    1. 在docker run中加入 --privileged=true  给容器加上特定权限
    2. 关闭selinux
    3. 在selinux添加规则,修改挂载目录的权限

    下面开始导入nova.sql,这个文件一共12G

    有时候会发现虽然很小的sql文件,在source导入数据库的时候也会很慢。这时候我们可以来修改一些mysql的数据库的配置来加快source导入的速度。

    编辑/usr/local/mysql/conf/my.cnf加入如下内容

    [mysqld]
    interactive_timeout = 120
    wait_timeout = 120
    max_allowed_packet = 32M

    1.查看变量 innodb_flush_log_at_trx_commit的值

    SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit' ;
    2.查询结果如果是1的话,将其修改成0

    SET GLOBAL innodb_flush_log_at_trx_commit =0;
    3.这时候再source,会发现速度快了很多,在结束后记得把这个变量重新设置成1

    SET GLOBAL innodb_flush_log_at_trx_commit =1;

    通过docker stop 和docker start来重启mysql的容器使得配置生效

    想要更快的提高source导入的速度需要在执行mysqldump的时候加 -e 参数使得生成的sql脚步是批量入库方式

    source导入速度慢的解决办法:

    假设要讲A数据库的数据导入到B数据库

    1、首先确定目标库(B)的参数值,登录数据库B,执行以下命令

    mysql>show variables like 'max_allowed_packet';
    mysql>show variables like 'net_buffer_length';

    2、根据参数值,在A数据库中使用mysqldump命令,如:

    C:Windowssystem32>mysqldump -uroot -p idsource -e --max_allowed_packet=1048576 --net_buffer_length=16384 >C: ova_work_document ovaold_mysqldb_backupidsource20190212.sql

    -e 使用包括几个VALUES列表的多行INSERT语法;
    --max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
    --net_buffer_length=XXX  TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。

    注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。

    3、登录数据库B,执行source命令导入

     use idsource;

    source C: ova_work_document ovaold_mysqldb_backupidsource20190212.sql

    一、主机与docker容器之间数据导入、导出

    从主机复制到容器

    sudo docker cp host_path containerID:container_path
    从容器复制到主机

    sudo docker cp containerID:container_path host_path
    二、mysql source导入*.sql文件

    进入数据库容器

    docker exec -it containerID bash
    数据库导入

    mysql -h localhost -u root -p(进入mysql下面)
    create database abc;(创建数据库)
    show databases;(就可看到所有已经存在的数据库,以及刚刚创建的数据库abc)
    use abc;(进入abc数据库下面)
    show tables;(产看abc数据库下面的所有表,空的)
    source /root/test.sql(导入数据库表)
    show tables;(查看abc数据库下面的所有表,就可以看到表了)
    desc pollution;(查看表结构设计)
    select * from pollution;
    exit(或者ctrl + c)退出mysql

    比如执行 docker cp /root/nova.sql 95a0cd6077a0:/opt/

    把文件拷贝到容器后在mysql中执行

    use novadb;(进入abc数据库下面)
    show tables;(产看abc数据库下面的所有表,空的)
    source /opt/nova.sql(导入数据库表)

  • 相关阅读:
    sql 将某列转换成一个字符串 for xml path用法
    IAsyncResult 接口异步 和 匿名委托
    存储过程和sql语句的优缺点
    ADO.net中常用的对象有哪些?分别描述一下。
    ASP.Net页面生命周期
    请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
    .net常用的传值的方法
    SQL列合并
    程序员的情书!
    程序员的表达!
  • 原文地址:https://www.cnblogs.com/xiaohanlin/p/10012730.html
Copyright © 2020-2023  润新知