先在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:\Windows\system32>mysqldump -uroot -p idsource -e --max_allowed_packet=1048576 --net_buffer_length=16384 >C:\nova_work_document\novaold_mysqldb_backup\idsource20190212.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:\nova_work_document\novaold_mysqldb_backup\idsource20190212.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(导入数据库表)

centos7 docker 安装 mysql5.7.24 导入12G的sql的更多相关文章

  1. centos7用docker安装mysql5.7.24后配置主从

    1)使用docker安装完成mysql5.7.24,我规划的是3台: 192.168.0.170(Master) 192.168.0.169(Slave) 192.168.0.168(Slave) 2 ...

  2. CentOS7编译安装MySQL5.7.24

    目录 安装依赖 安装boost 编译安装MySQL 配置 登录MySQL,修改密码 安装依赖 (1)cmake是新版MySQL的编译工具 sudo yum install gcc gcc-c++ pc ...

  3. centos7下安装mysql5.7.24

    第一步:下载rpm包 sudo wget http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-rel ...

  4. CentOS7利用docker安装MySQL5.7

    CentOS7利用docker安装MySQL5.7 前提条件 centos7 且内核版本高于3.10, 可通过以下命令查看内核版本 uname -r 利用yum 安装docker 安装一些必要的系统工 ...

  5. [ 原创 ] Centos7.6安装Mysql5.7

    https://blog.csdn.net/shj_php/article/details/86712408 CentOS7下安装MySQL5.7安装与配置(YUM) http://blog.csdn ...

  6. [转]阿里云CentOS 7.1使用yum安装MySql5.6.24

    阿里云CentOS 7.1使用yum安装MySql5.6.24 作者:vfhky | 时间:2015-06-25 09:43 | 分类:web 在前面两篇文章<2015博客升级记(四):Cent ...

  7. centos7下配置mysql5.7.24主从复制

    前置条件 准备两台服务器(可以是虚拟机),系统为centos7 此处演示的两台服务器:192.168.8.134.192.168.8.135 第一步:安装mysql5.7.24 先在两台服务器上安装m ...

  8. 在 CentOS7 上安装 MySQL5.7

    在 CentOS7 上安装 MySQL5.7 1 通过 SecureCRT 连接到阿里云 CentOS7 服务器: 2 进入到目录 /usr/local/ 中: cd /usr/local/ 3 创建 ...

  9. centos7编译安装MySQL5.7.9

    title: centos7编译安装MySQL5.7.9 date: 2016-05-12 16:20:17 tags: --- Centos7编译安装mysql5.7.9 mysql5.7有更好的性 ...

随机推荐

  1. quarz入门案例

    介绍 Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度.   核心概念  Quartz ...

  2. 改变函数中的 this 指向——神奇的call,apply和bind及其应用

    在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...

  3. Super Jumping! Jumping! Jumping(最大递增子序列的和)

    Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...

  4. 用Golang为Python编写模块

    Go里面需要显示的引入C模块, 让编译器支持生成动态链接库, 并且在代码中可以使用C语言的数据类型,这个至关重要. Calling Go code from Python code 摘取一个最简单例子 ...

  5. Catalan数计算及应用

    Catalan数列是非常奇妙的一列数字,因为很多问题的解就是一个Catalan数.知道了这一规律,很多看似复杂的问题便可迎刃而解.那么什么是Catalan数,什么样的问题的解是Catalan数呢? 1 ...

  6. IDEA MAVEN 1.8无效的源发行版

    最近想将自己在IDEA上开发的MAVEN项目切换到JDK1.8版本上,结果IDEA报1.8无效的源发行版.下面说一下自己的解决方案: 1.pom文件 <build> <plugins ...

  7. 关于recv的返回值

    通常recv有几种返回值 1.==0 表示收到FIN包, 因为FIN包,是状态为标记为FIN的空包,没有携带数据,所以recv的长度为0 2.>0 表示收到了数据, 但是有没有收完,是不知道的 ...

  8. 18-printf(*)的输出格式

    #include <bits/stdc++.h> using namespace std; int main(){ for(int i = 0; i < 26; i++){ cout ...

  9. git 的使用方法

    git 的使用有3个主要步骤: 1.1 工作区域操作: 在自己的git账号下构建一个工作目录, 并往工作目录里添加文件内容(cp /root/data/VIP_Amount_prediction/* ...

  10. 卡2-SLAM

    ---恢复内容开始--- 1.下载 首先需要从github上Git以下两个包: git clonehttps://github.com/ros-perception/open_karto(开源的kar ...