首页 > 数据库 >1、Docker下安装mysql主从复制

1、Docker下安装mysql主从复制

时间:2023-03-20 22:32:03浏览次数:42  
标签:主从复制 slave log ## 数据库 master mysql Docker

129.png

一、新建主服务实例容器

挂载日志、数据、配置启动:
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:5.7

130.png

二、进入/mydata/mysql-master/conf目录下新建my.cnf

cd  /mydata/mysql-master/conf
vim 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

131.png

三、重启master实例

docker restart 容器id

132.png

四、进入mysql-master容器

docker exec -it mysql-master /bin/bash
mysql -uroot -p

133.png

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

--创建一个用户登录主机
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
--给创建的用户增加查看数据的权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

134.png

六、新建从服务器容器实例3308

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:5.7

135.png

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

cd  /mydata/mysql-slave/conf
vim 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

136.png

八、修改完成配置后重启slave实例

docker restart 容器id

137.png

九、在主数据库中查看主从同步状态

show master status;

138.png

十、进入mysql-slave容器

docker exec -it mysql-slave /bin/bash

139.png

十一、在从数据库中配置主从复制

给从机找个老大,老大为宿主机,ip端口号及一些其他信息,其中,slave是上面主机开放过权限的用户:
change master to master_host='192.168.150.128', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=154, master_connect_retry=30;
参数 参数含义
master_host 主数据库的ip地址
master_port 主数据库的运行端口
master_user 在主数据库创建的用于用于同步数据的用户账号
master_password 在主数据库创建的用于同步数据的用户密码
master_log_file 指定从数据库要复制数据的日志文件,通过查看主库数据的状态,获取file参数
master_log_pos 指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取position参数
master_connect_retry 连接失败重试的时间间隔,单位为秒

140.png

十二、在从数据库中查看主从同步的状态

show slave status \G;
与show slave status;的区别就是读取格式不同

141.png

十三、在从数据库中开启主从同步

start slave;

142.png

十四、查看从数据库状态发现已经同步

show slave status \G;

143.png

十五、主从复制测试

144.png 145.png

标签:主从复制,slave,log,##,数据库,master,mysql,Docker
From: https://blog.51cto.com/u_15410237/6138661

相关文章

  • mysql补充
    目录select1.查找不同行distinct2.限制输出行数limit3.排序orderby4.筛选where,条件符and和or5.in操作符,和notInnot6.通配符like,(%)(_)(%)(_)7.正则表达式r......
  • docker镜像中所有方法无法使用
    事情的起因是,我在win11的电脑上进行开发,将docker容器打包成镜像,再移植进服务器,再从镜像运行的容器中所有方法和命令都无法使用。最后的原因是,docker版本差别过大,所以应当......
  • Android Studio通过jdbc连接MySQL
    1、下载MySQL-connector-jave.jar包地址如下:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46 2、将jar包移到如图所示的位置,然后右键addasl......
  • mysql索引、优化、sql性能分析
    为什么InnoDB存储引擎选择使用B+tree索引结构?相对于二叉树,层级更少,搜索效率高对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针......
  • docker安装minio
    拉取镜像dockerpullminio/minio创建容器dockerrun-d-p9000:9000--nameminio\-p9001:9001\-e'MINIO_ACCESS_KEY=minioadmin'\-e'MINIO_SECRET_KEY=......
  • Oracle/Mysql/SqlServer 常用函数区别
    1.类型转换   --Oracle  select to_number('123') from dual;  --123;   select to_char(33) from dual;       --33;  select to_date('......
  • Dockerfile 构建 dotnet + python 镜像
    1编写DockerfileFROMmcr.microsoft.com/dotnet/aspnet:6.0WORKDIR/rootRUNaptupdate\&&aptinstallwgetbuild-essentialzlib1g-devlibncurses5-devli......
  • android studio连接mysql
    今天下午课上建民让我们准备安卓端的地铁查询开发,但是我用的是mysql储存,之前的远程数据库是用的sqlserver,所以又重新挑战了我的心魔(当时试了好几天都没法连接mysql),终于成......
  • linux安装mysql8
    #解压tarxvJfmysql-8.0.30-linux-glibc2.12-x86_64.tar.xz#改名mvmysql-8.0.30-linux-glibc2.12-x86_64mysql-8.0.30cdmysql-8.0.30;mkdirdata;mkdirlog......
  • golang导出docker镜像
    1.下载镜像//downloadDockerImageimageTagName:="k8s.gcr.io/etcd:3.5.0-0"funcdownloadDockerImage(imageTagNamestring)(string,error){//要执行的命......