Docker 从入门到进阶五:于 Docker 上部署 MySQL 主从

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 从入门到进阶五:于 Docker 上部署 MySQL 主从相关的知识,希望对你有一定的参考价值。

文章目录

总体步骤回顾

第二篇的时候有完整的讲过了这一套命令,这里我们先回顾一下整个流程:

1、搜索镜像
2、拉取镜像
3、查看镜像
4、启动镜像(注意端口映射)
5、停止容器
6、移除容器

一套下来一气呵成。

这里有个 -p 参数讲一下,-p host_post:container_post


简易版本 mysql 安装

搜索/拉取镜像

咱今天换个方式,使用 docker hub 搜索镜像:

搜 “mysql”,然后点进去:

选什么版本就看个人了,选完右边复制一下。

细心点的小伙伴下载完之后可以检查一下是否成功。

然后启动 mysql。


启动MySQL镜像

刚 docker hub 那个界面其实不用关,英语好的小伙伴可以自行往下拉一下。

吧啦吧啦的都是教程。

接下来随便建个库,再建个表。


客户端连接容器内 MySQL

这一步,首先你要有一个客户端。

然后,连接的时候这样填(主要是那个客户端我也不太会用,所以就不贴过多的图了)

地址填宿主机的,密码填一下,就连上了。

连上之后确认一下是不是那个数据库(自己建了什么库自己心里还是有数的):

不过这里有个 bug,中文操作的话会出问题,我就直接点出来吧,会乱码。
除此之外还有一个问题,那就是我们上一篇讲过的,容器卷。这里没有对数据进行备份。


实战版 MySQL 安装

新建 MySQL 实例:

docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql

修改 my.cnf,通过数据卷同步给MySQL:

cd /mysql/conf
vim my.cnf
插入以下内容:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重启MySQL:

docker restart mysql
docker exec -it mysql bash

配置主从复制

新建主 MySQL 服务器:

docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

/mydata/mysql-master/conf目录下新建my.cnf:

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=101 

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能

log-bin=mall-mysql-bin  

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M  

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed  

## 二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

事后重启 master:

docker restart mysql-master

master容器实例内创建数据同步用户

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

新建从 MySQL 服务器

docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

进入/mydata/mysql-slave/conf目录下新建my.cnf:

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=102

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用

log-bin=mall-mysql-slave1-bin  

## 设置二进制日志使用内存大小(事务)

binlog_cache_size=1M  

## 设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed  

## 二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062  

## relay_log配置中继日志

relay_log=mall-mysql-relay-bin  

## log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1  

## slave设置为只读(具有super权限的用户除外)

read_only=1

重启从服务器。


在从数据库中配置主从复制并启动

change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

参数释义:

master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
start slave

查看从数据库同步状态:

接下来各位可自行测试一波,动手试试。

以上是关于Docker 从入门到进阶五:于 Docker 上部署 MySQL 主从的主要内容,如果未能解决你的问题,请参考以下文章

Docker 从入门到进阶八:Docker 网络

Docker 从入门到进阶七:DockerFile 与 Docker Compose

Docker 从入门到进阶一:Docker 简介与安装

Docker 从入门到进阶四:Docker 容器数据卷

Docker从入门到实战应用

docker入门到进阶一