利用 docker 还原数据库
Docker 安装 MySQLdocker pull mysql
查找Docker Hub上的mysql镜像
#docker search mysql
http://i2.运维网.com/images/blog/201809/17/8a8c70f6b33dae52ca35b65227cadd86.png
拉取官方的镜像,标签为5.7.23
# docker pull mysql:5.7.23
http://i2.运维网.com/images/blog/201809/17/5e923542622dfb49a50f654ca6d905d0.png
等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql
# docker images
http://i2.运维网.com/images/blog/201809/17/9750fbdb1a9a2ff6c886577a0d3c395f.png
首先,创建目录mysql,用于存放后面的相关东西。
runoob@runoob:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf~/mysql/sql
http://i2.运维网.com/images/blog/201809/17/4fd020768f94b77bfba05febcceee7eb.png
查看老数据库版本号
# mysql --version
http://i2.运维网.com/images/blog/201809/17/c39c8d0f9a157f18a087a967c8530c97.png
将数据库导出sql文件格式
#mysql -e "show databases;" -uroot -p123456 | grep -Ev "Database|titan|information_schema|well_order" | xargs mysqldump -uroot -p123456 --databases > mysql_dump2.sql
http://i2.运维网.com/images/blog/201809/17/5ac5b097b6f5dc7f3d0f734e2e7116d5.png
因为数据库里有个库特别大,所以将库过虑掉,grep -Ev "Database|titan|information_schema|well_order,就是将以上三个库过虑掉
将备份好的数据拷贝到刚才创建好的目录下/mysql/sql
# scp mysql_dump2.sql root@192.168.22.7:/root/mysql/sql
http://i2.运维网.com/images/blog/201809/17/bcc4078f1e43bad79e66723ea6f844c3.png
使用mysql镜像运行容器
# docker run --name mysql -p 3306:3306 --privileged=true -v /root/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -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
http://i2.运维网.com/images/blog/201809/17/6d4ce44a8929f205d732343174150b58.png
说明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 。
-v /root/mysql/conf/mysqld.cnf :将mysql配置文件挂载到docker容器里 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
--privileged=true在docker run时给该容器加权限
注意:如果没加权限的话会报错:Permission denied
挂载配置文件的路径要与容器里的路径一致。
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
#bind-address = 127.0.0.1
security risks
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
http://i2.运维网.com/images/blog/201809/19/658b4e7137ea1bc8d767ce123ffe7ebd.png
因为把宿主机的一个目录挂载到容器中的一个目录,当访问容器中的这个目录时,无法访问目录,权限拒绝。该问题通常在centos7下出现。或者一个容器启动成功后,里面的服务无法成功访问。
页:
[1]