1. 程式人生 > >centos7 docker 安裝 mysql5.7.24 匯入11G的sql

centos7 docker 安裝 mysql5.7.24 匯入11G的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了

 

[[email protected] ~]# docker exec -it mysql5_7_24 bash
[email protected]:/# 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
[email protected]:/# 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 -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新增規則,修改掛載目錄的許可權