利用 docker 還原數據庫
docker pull mysql
查找Docker Hub上的mysql鏡像
[root@iZbp15ynf8pjgvcr486szaZ ~]#docker search mysql
拉取官方的鏡像,標簽為5.7.23
[root@iZbp15ynf8pjgvcr486szaZ ~]# docker pull mysql:5.7.23
等待下載完成後,我們就可以在本地鏡像列表裏查到REPOSITORY為mysql
[root@localhost ~]# docker images
首先,創建目錄mysql,用於存放後面的相關東西。
runoob@runoob:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf ~/mysql/sql
查看老數據庫版本號
[root@iZbp15ynf8pjgvcr486szaZ ~]# mysql --version
將數據庫導出sql文件格式
[root@iZbp15ynf8pjgvcr486szaZ ~]#mysql -e "show databases;" -uroot -p123456 | grep -Ev "Database|titan|information_schema|well_order" | xargs mysqldump -uroot -p123456 --databases > mysql_dump2.sql
因為數據庫裏有個庫特別大,所以將庫過慮掉,grep -Ev "Database|titan|information_schema|well_order,就是將以上三個庫過慮掉
將備份好的數據拷貝到剛才創建好的目錄下/mysql/sql
[root@iZbp15ynf8pjgvcr486szaZ ~]# scp mysql_dump2.sql [email protected]:/root/mysql/sql
使用mysql鏡像運行容器
[root@localhost ~]# docker run --name mysql -p 3306:3306 --privileged=true -v /root/mysql/sql:/docker-entrypoint-initdb.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7.23
說明docker運行成功
命令說明:
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。
-v /root/mysql/sql:/docker-entrypoint-initdb.d 將備份好的數據庫文件存放在此,docker啟動進會讀取些文件的內容,並將數據庫還原到docker
-v /root/mysql/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。
--privileged=true 在docker run時給該容器加權限
註意:如果沒加權限的話會報錯:Permission denied
因為把宿主機的一個目錄掛載到容器中的一個目錄,當訪問容器中的這個目錄時,無法訪問目錄,權限拒絕。該問題通常在centos7下出現。或者一個容器啟動成功後,裏面的服務無法成功訪問。
利用 docker 還原數據庫