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:\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(導入數據庫表)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM