在docker中安裝mysql資料庫
安裝Docker環境(CentOS 7.4)
step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Step 2: 新增軟體源資訊
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
Step 4: 開啟Docker服務
sudo service docker start
通常我們使用Docker的時候都是使用的root,官方說法如下:
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it with sudo. For this reason, docker daemon always runs as the root user. To avoid having to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.
下面是使用非root使用者操作的步驟:
建立docker組
sudo groupadd docker
將當前使用者加入docker組
sudo gpasswd -a ${USER} docker
重新啟動docker服務
sudo systemctl restart docker
修改/var/run/docker.sock許可權
sudo chmod a+rw /var/run/docker.sock
Step 5: 下載Mysql官方映象
執行
docker pull mysql:5.7
下載mysql5.7官方映象,用docker images檢視已下載的映象列表。 初始化Mysql服務 配置資料庫引數
Step 6:修改init.sh檔案,配置說明:
#!/bin/bash
command=`docker ps |grep mysql`
if [[ "$command" == "" ]];then
echo "strting mysql..."
docker start mysql
else
echo "mysql is starting !"
fi
➜ mysql ./start.sh
mysql is starting !
➜ mysql cat init.sh
#!/bin/bash
# 在Docker容器中初始化mysql服務
# 映象名稱
IMAGE=$1
# 容器名稱
INSTANCE_NAME=mysql
# Mysql資料檔案存放路徑,預設為當前shell檔案所在目錄
HOME=$(cd `dirname $0`; pwd)
#資料儲存目錄
DATA_DIR="$HOME/data"
#資料儲存目錄
CONF_DIR="$HOME/conf"
#資料庫名
DATABASE=swqdb
#使用者名稱
USER=swq
#使用者密碼
PASSWORD=swq#2018
# ROOT密碼
ROOT_PASSWORD=swq#2018
#建立data資料夾
mkdir data conf
DOCKER_PARAM="-v $CONF_DIR:/etc/mysql/conf.d -v $DATA_DIR:/var/lib/mysql"
MYSQL_PARAM="-e MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD -e MYSQL_DATABASE=$DATABASE -e MYSQL_USER=$USER -e MYSQL_PASSWORD=$PASSWORD"
MYSQL_VARS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
docker run -p 3306:3306 --name $INSTANCE_NAME $DOCKER_PARAM --user 1000:1000 $MYSQL_PARAM -d $IMAGE $MYSQL_VARS
Step 7: 初始化服務
建立Mysql目錄
sudo mkdir -p /data/mysql
在mysql目錄建立init.sh檔案(見上)
docker run -p 3306:3306 --name $INSTANCE_NAME $DOCKER_PARAM --user 1000:1000 $MYSQL_PARAM -d $IMAGE $MYSQL_VARS
中的--user 1000:1000
是當前使用者的uid和gid,因為docker容器內部預設是使用root賬戶,該命令可以使對映的資料夾擁有者為當前操作使用者.
Step 8: 執行初始化指令碼
./init.sh mysql:5.7
執行完上述命令後mysql服務初始化完成,並自動啟動,建立了一個名為mysql資料檔案存放於/data/mysql/data目錄,服務埠號3306,建立了預設資料庫qiyuesuodb,預設使用者qiyuesuo初始密碼qiyuesuo#2018。 Mysql服務管理
啟動服務:docker start mysql
停止服務:docker stop mysql
登入資料庫:mysql -h 127.0.0.1 -uswq -pswq#2018
清除資料:停止mysql服務,cd至mysql目錄,sudo rm -rf ./data
刪除data資料夾,然後再啟動服務即可。
其他指令碼
#!/bin/bash
#說明
#1.先使用者確認是否刪除
#2.使用者確認後刪除容器和data目錄
echo -n "This operation will completely remove mysql and mysql data , continue? [y/n] "
read opt
if [[ $opt == y ]];then
echo "removing mysql..."
docker rm -f mysql
echo "removing mysql data..."
rm -rf data conf
echo "All of mysql data are removed! "
elif [[ $opt == n ]];then
echo "Exiting..."
else
echo "Please input y or n!"
echo "Exiting..."
fi
#獲取當前日期
echo "建立備份資料夾..."
ls_date=`date +%Y%m%d`
mkdir backup$ls_date
echo "備份資料庫配置和資料..."
cp -r ./conf ./backup$ls_date
cp -r ./data ./backup$ls_date
echo "備份完成.."