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 主从的主要内容,如果未能解决你的问题,请参考以下文章