暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker部署Mysql数据库

软件工程实践领航营 2020-04-15
689
点击上方蓝色字关注我们!







关注后,回复“教程”,查看完整案例


01

下载mysql8.0镜像


下载mysql8.0的Docker镜像文件


查看镜像下载的镜像文件


02

启动mysql8.0容器


启动容器

docker run -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=admin123 -d mysql:8.0
备注:
-p 容器端口映射
--name 容器名称
-e 配置信息,配置root密码
-d 设置镜像名称

查看启动的容器信息

docker ps


03

修改Mysql中root密码



进入Mysql容器

docker exec -it mysql8.0 bash


进入MySQl数据库命令行

mysql -uroot -p


查询MySQL数据库中用户信息

select host,user,plugin,authentication_string from mysql.user;

如果这里存在2个root信息,可以删除host=%的用户。(%代表可以所有IP均可以访问,localhost代表只能本机访问数据库)


使用以下MySQL命令删除host=%的root用户

use mysql
DELETE FROM user where host='%';
flush privileges;


再次登录数据库,查看用户信息


使用MySQL命令修改root密码

ALTER user 'root'@'localhost' IDENTIFIED BY 'Admin123*';


04

创建ncov数据库



使用MySQl命令创建ncov数据库及相应的ncov用户,并设置了密码为123456

CREATE USER `ncov`@`%` IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON ncov.* TO 'ncov'@'%';
FLUSH PRIVILEGES;
create database ncov;


在本地开发机器,使用navicat客户端连接远程的MySQL数据库


使用ncov用户可以成功连接ncov数据库


使用root用户无法连接,因为root用户设置的只能在localhost本地访问


通过下面的SQL语句创建数据表

create table students(
id int(11not null auto_increment,
name varchar(20not null,
sex char(1default null,
add_time datetime default null ,
primary key(id)
)ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8;


在客户端执行SQL语句

通过下面的SQL语句插入数据

insert into students(name,sex,add_time) value ('李四','男',now());

在客户端执行SQL语句

数据插入成功


在MySQL容器中使用命令行访问数据库

use ncov;
show tables;
select * from students;


将当前的MySQL数据库容器删除(一会我们再创建一个容器,看看ncov数据库是否保留)

docker rm -f mysql8.0


在云服务器重启一个新的MySQL数据库容器


进入新的容器,查看数据库信息,看看ncov数据库是否还存在

docker exec -it mysql8.0 bash
mysql -uroot -p
show databases;

可以发现,如果容器删除,之前在容器中创建的数据库也不存在了。


05

Docker数据持久化


在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),通过docker run -v命令可以将数据卷挂载到对应的容器目录空间


针对MySQL数据库,希望数据库的配置文件和数据库数据文件不能随着C容器的结束而结束,因此需要找到MySQL的配置文件和数据文件的位置。


查看Mysql的配置文件位置


查看MySQL配置文件内容


查看数据文件内容

通过上面的分析,可以确定配置文件和数据文件的位置

  • 配置文件:/etc/mysql/my.cnf

  • 数据文件:/var/lib/mysql/


在宿主机上,创建MySQl配置文件和数据文件的挂载路径

mkdir -p /usr/local/mysql/conf
mkdir -p /usr/local/mysql/data


将Mysql配置文件拷贝到宿主机

docker cp mysql8.0:/etc/mysql/my.cnf usr/local/mysql/conf


删除容器

docker rm -f mysql8.0



启动新的Mysql8容器,使用数据卷(包含了MySQL的配置文件和数据文件)创建容器

docker run --name mysql8.0 \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin123 \
-v usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v usr/local/mysql/data:/var/lib/mysql \
-d mysql:8.0

这里指定了将宿主机上的/usr/local/mysql/conf/my.cnf绑定到容器的/etc/mysql/my.cnf(这个文件是MySQL的配置i文件),宿主机上的/usr/local/mysql/data 目录挂载到容器的/var/lib/mysql目录(这个目录是MySQl的数据目录)


查看数据卷绑定信息

docker inspect mysql8.0




进入容器中,通过MySQl命令创建ncov数据库(一会我们删除这个容器再新建一个容器看看数据卷能否实现持久化)

docker exec -it mysql8.0 bash
mysql -uroot -p
show databases;

create database ncov;
show databases;


创建完成ncov数据库后,删除这个容器

查看宿主机的/usr/local/mysql/data/目录内容

docker rm -f mysql8.0
ls /usr/local/mysql/data/

可以看到数据文件还存在


使用数据卷创建一个新的容器


进入容器,查看ncov数据库是否存在

可以看到,ncov数据库是存在的。


现在可以把root密码修改一下,禁止远程连接。设置一个可以远程连接的账号,只能操作ncov数据库。(步骤略)


现在我们再也不怕容器出问题导致数据丢失了。但是如果云服务器出问题,那么我们的数据也还是会丢失的,大家考虑一下怎么才能定期备份我们的数据呢?或者我们可否做一个主从同步的数据库?这些我们会在后面的章节中给大家介绍。



   



END





每天进步一点点



让我知道你在看

文章转载自软件工程实践领航营,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论