首页 > 数据库 >用docker搭建mysql的主从复制

用docker搭建mysql的主从复制

时间:2023-09-08 12:34:55浏览次数:33  
标签:主从复制 slave log ## 数据库 master mysql docker

(1)创建主容器
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:
(2)在宿主机/mysql/conf中创建mysql配置文件
touch /mysql/conf/my.cnf
vim /mysql/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
(3)进入容器内部,更新数据库结构
mysql_upgrade -uroot -p
#更新完数据库结构后退出重新登录数据库
quit
mysql -uroot -p
(4)为数据库创建同步用户
-- 创建用户
create user 'slave'@'%' identified by '123456'; 

-- 授予权限
grant replication slave,replication client on *.* to 'slave'@'%';
(5)创建从数据库容器
docker run -d -p 3308:3306 --privileged=true -v /mysql/mysql-slave/log:/var/log/mysql -v /mysql/mysql-slave/data/:/var/lib/mysql -v /mysql/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql-slave mysql:5.7
(6)在宿主机/mysql/mysql-slave/conf中创建mysql配置文件
touch /mysql/conf/my.cnf
vim /mysql/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
(7)在从数据库中配置主从复制
-- 命令参数说明:
/*
mater_host:主数据库IP;
master_port:主数据库端口;
master_user:在主数据库中创建的用于同步数据的用户账号;
master_password:在主数据库中创建的用于同步数据的用户密码;master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据库的状态,获取Position参数;
master_connect_retry:指定连接失败重试的时间间隔,单位为秒;
*/

-- 指定主数据库
change master to master_host='10.10.10.12',master_user='slave',master_password='123456',master_port=3306,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;

-- 开启主从同步
start slave;

-- 查看从数据库是否开启同步
show slave status \G;
(8)出现如下图所示的两个Yes,则表示开启成功。

用docker搭建mysql的主从复制_Docker

(9)在主数据库中创建表测试同步是否生效
从数据库当前数据库数量:

用docker搭建mysql的主从复制_数据库_02

(10)在主数据库中创建新的数据库:
create database master;

用docker搭建mysql的主从复制_mysql_03

(11)创建新表并插入一条数据
--创建表
create table text (id,int name varhcar(100));
--插入数据
insert into text values(1,'xiaoming');

用docker搭建mysql的主从复制_mysql_04

(12)在从数据库中查看数据,可以发现数据已同步:

用docker搭建mysql的主从复制_mysql_05

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

相关文章

  • docker 安装nginx,并配置域名ssl证书(超详细)
    1、直接安装最新的nginxdockerpullnginx2、由于后期需要方便配置与管理nginx,需要把nginx容器内的文件夹进行挂载到宿主机中,所以此处需要进行到自己心仪的盘中创建文件夹(本次说明在/home)mkdirnginx&&cd$_&&mkdir-p{ssl,config,logs}ssl放域名对应证书config放nginx配置文......
  • arm架构docker安装nacos
    前言搞了个hk1box,装了armbian系统,想用这个当服务器调试微服务,需要安装nacos。尝试安装非docker版本的nacos,去github下载arm版本的并且放到linux下面,运行的时候报tomcat错误,装了tomcat后还是报错,改了很多设置老是跑不了,于是决定用docker版本。1、挂载目录mkdir-p/home/nacos/l......
  • 深入理解容器化部署与Docker
    什么是容器化部署?容器化部署是将应用程序及其所有依赖项打包到一个独立的容器中的方法。容器是一个轻量级、可移植的单元,它可以在不同的环境中运行,而无需担心依赖项问题。容器化部署通常使用容器编排工具(如Kubernetes)来管理和协调容器的部署。为什么使用容器化部署?使用容器化部署的......
  • mac mysql无法启动
    背景:在mac上装了mysql后无法启动,报错如下: 解决步骤:1.修改mysql配置文件,飘红的为修改部分(/usr/local/etc/my.cnf)#DefaultHomebrewMySQLserverconfig[mysqld]#Onlyallowconnectionsfromlocalhostbind-address=127.0.0.1#mysqlx-bind-address=127.0.0.1   #......
  • 安装docker 镜像之后 进入镜像下载报错
    在学习使用docker技术过程中,基于centos镜像自定义新的镜像,其中基础镜像centos需要提前安装好vim和net-tools,然而在刚开始通过yum-yinstallvim安装vim时,便出现了错误提示信息:Error:Failedtodownloadmetadataforrepo'appstream':Cannotprepareinternalm......
  • 2 Mysql环境安装与配置
    下载Mysql安装与配置Mysql启动与停止Mysql启动用管理员身份打开cmd,输入以下指令netstart服务名停止在cmd中,输入以下指令netstop服务名登录与退出Mysql服务器登录语法:mysql-uroot[-h服务器ip]-p[密码]修改密码语法:setpasswordforroot@localh......
  • MySQL查询语句汇总附练习带注释(二)
    数据库查询语句包含条件查询语法:SELECT*/列名FROM表名WHERE条件ORDERBY列名1ASC/DESC,列名2ASC/DESC;--条件可以包含关系运算符、逻辑运算符、特殊情况等--是--在几个选项之中--betweenand在一定范围内--要求查询emp表中员工编号大于等于50的员工编号SELEC......
  • mysql8关闭binlog并清空Binlog
    编辑my.ini或者my.cnf文件清空binlog信息#查看现存的binlog文件列表showmasterlogs;#重置清空binlog文件resetmaster;#重置清空后重新查看现存的binlog文件列表是否都被清空了showmasterlogs;停用binlog功能为啥要关闭binlog功能呢?是因为反正是个测试服务器,......
  • mysql8 Found option without preceding group错误
    这个错误说起来是真的坑,今晚帮同学在window操作系统上安装mysql8当自定义my.ini文件的时候就出现一下错误,死活启动不起来一直报错。当删掉这个my.ini文件的时候却能启动,刚开始以为是my.ini里的配置选项不对,一个一个筛查后依然不行。最后发现尽然是my.ini文件格式编码不对。改为A......
  • MyBatis操作Oracle(实现兼容Oracle和MySQL)
    MyBatis操作Oracle(实现兼容Oracle和MySQL)以Oracle11g来演示,只需要创建序列,不需要创建触发器,通过ORM框架操作来生成主键MySQL版本是8.x代码地址:https://gitee.com/zhang-zhixi/springboot-mp-oracle-auto.git1、分别创建Student表Oracle:CREATETABLE"STUDENT"("ID"N......