当前位置:   article > 正文

MySQL 之使用Docker安装Mysql5.7_docker mysql 5.7

docker mysql 5.7

Ubuntu16安装Docker

Ubuntu自带的软件源列表更新很慢,所以我们切换成阿里提供的软件源列表。

# 备份自带的软件源列表
cp /etc/apt/sources.list /etc/apt/sources.list.back
# 删除自带的软件源列表文件
rm -rf /etc/apt/sources.list
# 新建软件源列表文件
vim /etc/apt/sources.list
# 将下面阿里提供的软件源列表内容复制到sources.list文件中
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

下面正式安装Docker。
首先更新软件列表:apt-get update
安装Docker:apt-get install docker.io -y

查看Docker版本:docker version
如下图表示没有启动Docker服务。
在这里插入图片描述
启动Docker服务:service docker start
如下图表示Docker服务已启动。
在这里插入图片描述
查看容器状态:service docker status
在这里插入图片描述

Docker常用命令

查看正在运行的容器

# 查看正在运行的容器
docker ps
# 查看所有的容器,包括已经停止的。
docker ps -a 
  • 1
  • 2
  • 3
  • 4

查看所有镜像

docker images
  • 1

拉取镜像

docker pull <镜像名:tag>
# 例如以下代码
docker pull mysql
  • 1
  • 2
  • 3

停止、启动、杀死指定容器

docker start <容器名 or ID>
docker stop <容器名 or ID>
docker kill <容器名 or ID>
  • 1
  • 2
  • 3

删除容器

docker rm -f <容器名 or ID>
# 删除所有容器
docker rm -f $(docker ps -a -q)
  • 1
  • 2
  • 3

查看容器日志

docker logs -f <容器名 or ID>
  • 1

进入容器

docker exec -it <容器名 or ID> bash
  • 1

Docker搭建Mysql5.7服务

docker部署mysql并修改配置: https://blog.csdn.net/Madness_stone/article/details/124513179
拉取官方镜像

[mysqld]
lower_case_table_names=1
default-time-zone = Asia/Shanghai

docker cp /home/mysql.conf.d/mysqld.cnf  mysql3381:/etc/mysql/mysql.conf.d/mysqld.cnf
  • 1
  • 2
  • 3
  • 4
  • 5
# 拉取 mysql 5.7
docker pull mysql:5.7   
# 拉取最新版mysql镜像
docker pull mysql       
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
创建一个Mysql容器

sudo docker run -p 3380:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 1

或者

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • -v:挂载文件,启动的时候把容器中的文件映射到虚拟机文件当中
  • –name:容器名,此处命名为mysql
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,(3380)冒号前面是主机端口,(3306)冒号后面容器内部端口
  • -d:源镜像名,此处为 mysql:5.7

进入到容器docker exec -it mysql3380 bash
进入Mysql客户端: mysql -h127.0.0.1 -uroot -p123456 -P3306
在这里插入图片描述

注意:在容器中进入Mysql客户端用的是容器内部端口,主机是127.0.0.1;如果外部连接Mysql客户端,需要使用创建容器时指定主机端口的端口号,主机名是主机的IP地址。
在这里插入图片描述

Docker搭建Mysql8.0.20服务

# 拉取镜像
docker pull mysql:8.0.20

# 创建挂载使用到的目录
mkdir -vp /home/docker/mysql3380
cd /home/docker/mysql3380
mkdir data logs conf

# 创建mysql容器
docker run -d -p 3380:3306 --name mysql3380 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.20

# 拷贝mysql的配置文件和数据
# 复制配置文件
docker cp mysql3380:/etc/mysql /home/docker/mysql3380/conf
# 复制data文件
docker cp mysql3380:/var/lib/mysql /home/docker/mysql3380/data

# 停止并删除容器
docker stop mysql3380
docker rm -f mysql3380

# 重新创建容器(指定数据卷)
docker run -d -p 3380:3306 \
--name mysql3380 \
--privileged=true \
--restart=unless-stopped \
-v /home/docker/mysql3380/conf/mysql/conf.d:/etc/mysql/conf.d \
-v /home/docker/mysql3380/logs:/var/log/mysql \
-v /home/docker/mysql3380/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.20

# 不允许远程连接解决方法
docker exec -it mysql /bin/bash
mysql -u root -p
use mysql 
# 更新root - localhost 为 root - %
update user set host = '%' where user = 'root' and host='localhost'; 
# 设置允许远程用户访问
GRANT ALL ON *.* TO 'root'@'%'; 
flush privileges;# 刷新权限
#更新用户加密方式,mysql8默认的加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

Docker搭建Mysql主从复制

上面我们已经创建了一个Mysql服务,这里作为主从中的master服务。

创建Mysql的slave服务

下面用同样的方式创建一个Mysql的slave服务。

# 注意修改主机端口号和容器名
sudo docker run -p 3381:3306 --name mysql3381 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 1
  • 2

在这里插入图片描述
配置主从之前我们需要知道服务器的IP地址。

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql3380
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql3381
  • 1
  • 2

在这里插入图片描述
Master 服务器地址是 172.17.0.4 ,Slave 服务器地址是 172.17.0.5,MySQL 的端口号都为 3306。

配置master服务器

进入到 Master 服务器:docker exec -it mysql3380 bash
进入Mysql客户端: mysql -h127.0.0.1 -uroot -p123456 -P3306

修改配置文件: /etc/mysql/my.cnf

[mysqld]
## 设置server_id,一般设置为IP,同一局域网内注意要唯一
server_id=100  
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin  
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

一般docker容器中没有vi或者其它相应的文本编辑器,如果只是为了修改这个配置文件就安装一个vi,太麻烦了,下面是另一种方案。
通过docker cp把这个文件拷贝出来: docker cp mysql3380:/etc/mysql/my.cnf /home/
再拷贝回去:docker cp /home/my.cnf mysql3380:/etc/mysql/

在容器中重启Mysql服务: service mysql restart
这个命令会使得容器停止,重新启动容器就可以了。

创建数据同步用户:

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';   
  • 1
  • 2

配置slave服务器

进入到 Master 服务器:docker exec -it mysql3381 bash
进入Mysql客户端: mysql -h127.0.0.1 -uroot -p123456 -P3306

[mysqld]
## 设置server_id,一般设置为IP,注意要唯一
server_id=101  
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin  
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## 防止改变数据(除了特殊的线程)
read_only=1  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

配置完成后重启mysql,和配置 Master 一样,会使容器停止,需要启动容器。

完成Master和Slave链接

在 Master 进入 MySQL, 然后执行命令: show master status;
在这里插入图片描述
记录下 File 和 Position 字段的值,后面会用到。

然后到 Slave 中进入 mysql,执行命令:

change master to master_host='172.17.0.4', 
master_user='slave', 
master_password='123456', 
master_port=3306, 
master_log_file='edu-mysql-bin.000001', 
master_log_pos=2395, 
master_connect_retry=30;  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • master_host: Master 的IP地址
  • master_user: 在 Master 中授权的用于数据同步的用户
  • master_password: 同步数据的用户的密码
  • master_port: Master 的数据库的端口号
  • master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
  • master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
  • master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

执行以下命令,开始开启主从同步: start slave;

在 Slave 的 MySQL 终端执行查看主从同步状态: show slave status \G;
在这里插入图片描述
SlaveIORunning 和 SlaveSQLRunning 是No,表明 Slave 还没有开始复制过程。相反 SlaveIORunning 和 SlaveSQLRunning 是Yes表明已经开始工作了,因为我已经运行过了,所以我的显示的都是 Yes。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/537475
推荐阅读
相关标签
  

闽ICP备14008679号