一,概要.... 2
二,环境准备.... 3
2.1,docker部署.... 3
三,使用docker部署mysql 6
3.1、创建数据存放目录.... 6
3.2、创建bridge网络并指定IP区间.... 6
3.3、Docker安装MySQL. 6
3.4、自定义配置.... 7
四,MySQL简单的配置.... 9
4.1、在容器 mysql 中开启一个交互模式的终端.... 9
4.2、mysql登录.... 9
4.3、给予远程用户所有表所有权限.... 9
4.4,验证Navicat远程连接MySQL. 10
五,数据库的导出备份.... 11
5.1,数据库备份.... 11
5.2,数据库还原.... 12
六,MySQL常用简单命令 13
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
# 安装docker的前提条件:
1) .必须是64位CPU架构的计算机,Docker目前不支持32位CPU;
2) .运行Linux3.8或更高版本内核,CentOS时内核必不小于3.10;
3) .内核必须支持一种合适的存储驱动,可以是Device Manager、AUFS、vfs、btrfs、以及默认的驱动Device Mapper中的一个;
4) .内核必须支持并开启cgroup和命名空间namespace功能。
# 使用下面的命令来查看centos的内核版本
uname –r
2.1.1 yum 部署docker
#注意: 这里是首次安装, 之前安装过的要先卸载旧版本的包哦!!!
更新yum包, 确保最新
yum update
# 卸载旧版本docker,新机器可以忽略
sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine
# 安装需要的依赖软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum docker 源
//官方镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//阿里镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装DockerCE
sudo yum install docker-ce
2.1.2 脚本安装
脚本安装(多用于测试和开发环境)
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
# 以阿里云镜像加速器为例
注意:每个阿里云账户所持有镜像加速器均不同
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://**20l7s9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:这是数据库数据存放目录,保障下次重新安装数据不丢失
mkdir -p /data/mysql/data
chmod 777 /data/mysql/data
cd /data/mysql/data
注意:多容器IP访问必备
#创建自定义网络
docker network create --driver bridge --subnet 172.0.0.0/16 ****
#查看已存在网络
docker network ls
端口:3306,初始密码:123456
数据存放目录:/dat/mysql/data
#创建mysql容器
此处以虚拟机部署安装为例,省略指定网络,IP
sudo docker run -d -p 3306:3306 \
--name mysql --privileged=true \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
注意:若不加字段--privileged=true可能会报权限错误,报错信息如下图所示:
3.4.1、创建配置存放映射目录
mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf
chmod -R 755 /data/mysql/
3.4.2、将 MySQL 容器里的配置文件复制到该路径
docker cp mysql:/etc/mysql/my.cnf /data/mysql/conf
3.4.3、删除 MySQL 容器
docker rm -f mysql
3.4.4,重新创建MySQL容器
#重新创建MySQL容器将数据,日志,配置文件映射到本机
docker run -p 3306:3306 --name mysql8 --restart always \
-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /data/mysql/logs:/logs \
-v /data/mysql/data:/var/lib/mysql \
-v --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.31
3.4.5、编辑配置文件
vim /data/mysql/conf/my.cnf
# 最大连接数
max_connections=10000
# 设置默认时区
default-time_zone='+8:00'
#重启 MySQL 容器
docker restart mysql
进入docker容器中
docker exec -it mysql /bin/bash
mysql -u root –p
GRANT ALL ON *.* TO 'root'@'%';
# 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
# 远程访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
flush privileges;
# 退出
exit
#进入容器
docker exec -it 【容器ID】 /bin/bash
或者
docker exec -it 【容器ID】 bash
# 数据库导出 (docker 进入容器之后操作)
# 常用
# 导出整个数据库(包括数据库中的数据)
mysqldump -u username -p 数据库 > 数据库.sql
# 导出数据库结构(不含数据)
mysqldump -u username -p -d 数据库 > 数据库.sql
# 导出数据库中的某张数据表(包含数据)
mysqldump -u username -p 数据库 表 > 表.sql
导出到指定文件路径下
查看容器映射卷也就是挂载文件夹的地方(容器中的/var/lib/mysql路径会挂载到linux的某个目录下面,下面命令查看)
docker inspect name/id | grep Mounts -A 20
# 导出到指定路径下为
mysqldump -R -uroot -p 数据库 > /var/lib/mysql/数据库_bak.sql
# /var/lib/mysql/ 为容器中的路径,执行上面的命令之后查看该路径下面是否有数据库_bak.sql生成
# 相应的在Linux本地系统挂载路径下同样生成 数据库_bak.sql
# 备份完成之后退出容器
导入数据库(docker 进入容器之后操作)
mysql -uroot -p
use 【数据库名称】;
source 【sql文件】# 此处source 数据库的存放路径为Linux系统本地挂载MySQL的路径
例:source /data/MySQL/data/数据库.sql
# 导入数据到数据库
mysql -uroot -D数据库名
# 导入数据到数据库中得某个表
mysql -uroot -D数据库名 表名
# 删除mysql命令
docker rm mysql
# 强制删除mysql容器
docker rm -f mysql
# 删除mysql镜像
docker rmi mysql
# 查看docker镜像
docker images
# 查看运行中容器
docker ps
# 查看所有容器
docker ps -a
# 删除容器
docker rm 容器ID或者容器名称
# 导出整个数据库(包括数据库中的数据)
mysqldump -u username -p 数据库 > 数据库.sql
# 导出数据库结构(不含数据)
mysqldump -u username -p -d 数据库 > 数据库.sql
# 导出数据库中的某张数据表(包含数据)
mysqldump -u username -p 数据库 表 > 表.sql
# 导出数据库中的某张数据表的表结构(不含数据)
mysqldump -u username -p -d 数据库 表 > 表.sql
# 恢复数据
mysql -uroot -p 【数据库名称】 < 【sql文件】
# docker 中的文件拷贝 (docker容器中的文件copy到本地文件)
docker cp 【容器ID】:【容器目录】【目标目录】
# 传文件进docker指定路径
# 执行下面命令上传文件到容器中的镜像的指定位置
docker cp /本地路径/文件名 容器ID or name:/上传路径
# 从docker传文件到实体机
同理,如果我们需要将docker中的文件传输到实体机上,我们只需要将之前的cp命令方向反过来
docker cp 容器ID:/上传路径 /路径/文件名