知识改变命运! docker笔记7-docker-compose搭建mysql主从复制_猿份哥-lskyf博客社区

docker笔记7-docker-compose搭建mysql主从复制

猿份哥 1年前 ⋅ 1370 阅读 ⋅ 0 个赞

1.配置docker-compose

1.1.上传主docker-compose.yml,主要配置server-id=1,read-only=0,端口号为3306

docker-compose.yml

version: '3.1'
services:
  db:
    image: mysql
    container_name: master
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root  # root用户密码
      TZ: Asia/Shanghai
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --log-bin=mysql-bin # 开启日志
      --sync_binlog=1
      --server-id=1  # 指定ID
      --read-only=0  # master的read-only=0,slave的read-only=1
      --binlog-ignore-db=sys # 要忽略的数据库
      --binlog-ignore-db=mysql
      --binlog-ignore-db=sys 
      --binlog-ignore-db=performation_schema 
      --binlog-do-db=yaunfenge_db1 # 要同步的数据库
      --binlog-do-db=yaunfenge_db2 # 要同步的数据库
    ports:
      - 3306:3306 
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
      - ./log:/var/log/mysql

1.2.从库docker-compose.yml,配置server-id=2,read-only=1 (这里是和master的区别),端口号为3309

version: '3.1'
services:
  db:
    image: mysql
    container_name: slave01
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --log-bin=mysql-bin 
      --sync_binlog=1
      --server-id=2 
      --read-only=1 
      --binlog-ignore-db=sys
      --binlog-ignore-db=mysql
      --binlog-ignore-db=sys 
      --binlog-ignore-db=performation_schema 
      --binlog-do-db=yaunfenge_db1
    ports:
      - 3309:3306 
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
      - ./log:/var/log/mysql

1.3.在docker-compose.yml执行docker-compose up -d 启动

2.加入集群

2.1 主服务器创建同步用户并授权

#通过Navicat中创建用户并授权
CREATE USER 'backup'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%';
FLUSH PRIVILEGES;
#查看master的binlog信息
SHOW MASTER STATUS ;
得到 File mysql-bin.000003下面用到

2.2 从库slave01加入集群

从机slave01,slave0,slave.....n... 启动slave容器,实现主从同步

2.2.1 启动容器,等待mysql正常启动

2.2.2 通过Navicat连接slave执行下面命令配置 MASTER_HOST , MASTER_USER , MASTER_LOG_FILE , MASTER_PORT

CHANGE MASTER TO MASTER_HOST='192.168.56.120',MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=0,MASTER_PORT=3306;

2.2.3 开启同步

START SLAVE;

2.2.4 查看slave同步状态

SHOW SLAVE STATUS 

如果 Slave_IO_Running 是Yes并且Slave_Sql_Running 那么就成功了

2.3 其他注意事项

2.3.1 如果Slave需要修改先或有什么问题先执行

STOP SLAVE;
RESET SLAVE; 

再执行以下代码重新加入

CHANGE MASTER TO MASTER_HOST='192.168.56.120',MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=0,MASTER_PORT=3306;

START SLAVE;

SHOW SLAVE STATUS;

2.3.2 如果master需要修改或有什么问题先执行 RESET MASTER在进行其他步骤;

3.测试

###将以下sql语句执行后

 create DATABASE db_yuanfenge;
 CREATE TABLE `tbl_student` (
  `id` int NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;
INSERT INTO `db_yuanfenge`.`tbl_programmer`(`id`, `name`) VALUES (1, '猿份哥');

4.说明

上文的logbin参数都配置在docker-compose.yml里了,也可以根据挂载的路径将logbin信息配置到./conf/my.cnf文件里


全部评论: 0

    我有话说:

    解决docker下载安装太慢,docker-compose安装太慢,docker镜像拉取安装太慢

    解决docker下载安装太慢,docker-compose安装太慢,docker镜像拉取安装太慢 1.docker 安装换成以下镜像 sudo curl -sSL https://get

    docker部署的zookeeper连接超时不断重启

    经常发现docker部署的zookeeper连接超时 登上服务器发现zookeeper总是不断的启动: 一般原因是磁盘空间不足了会造成zookeeper不断重启 为什么会磁盘空间突然不足?一般是项目

    docker安装redis并允许外网访问

    docker安装redis并允许外网访问 拉取redis镜像 docker pull redis:3.2 本地新建redis配置文件 redis.conf ,写入以下内容 #允许外网访问 bind

    springboot项目运行在docker中 file.exists()返回false没有报错

      springboot项目运行在docker中 file.exists()返回false没有报错   表现:在windows运行正确,但是打包后运行在docker容器中找不到

    [v8.24.0-52.el7 try http://w

    执行docker ps 命令显示 [root@localhost vagrant]# docker ps [root@localhost vagrant]# Cannot connect to

    redis安装,docker 安装最新redis 7.x版本找不到redis.conf的默认位置?最新redis.conf的内容是什么?

    1. docker 安装最新7.x版本的redis找不到redis.conf的默认位置? 1.1 首先进入容器 docker exec -it 容器ID/容器名称 bash 1.2 执行

    面试题:MySQL参数innodb_flush_log_at_trx_commit有什么作用?

    面试题:MySQL参数innodb_flush_log_at_trx_commit有什么作用? innodb_flush_log_at_trx_commit是MySQL中InnoDB存储引擎的一个

    mysql5.7x升级到mysql8.0.3产生的错误

    错误日志 2023:05:03 01:10:36.305 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper ? - Table 'db_mblog.TBL_USER_EXTEND' do...

    spring boot项目本地没问题,部署到服务器mysql报错:errorCode 0, state 08S01

    错误现象: 在开发的时候没有报错,能正常运行并且能连接服务器。但是部署到服务器报错。 错误如下: 2023-04-07 11:54:40.617 ERROR 7 --- [reate

    kubeshere创建mysql发生FailedCreate requested: requests.cpu=500m,requests.memory=2000Mi, used: requests

    1.错误日志 create Pod mysql-master-v1-0 in StatefulSet mysql-master-v1 failed error: pods "mysql-master

    MySQL中,根据加锁的维度可以将锁划分为哪些类型呢?

    问题: 在MySQL中,根据加锁的维度可以将锁划分为哪些类型呢? 答案: 按读写权限划分: 共享锁(Shared Locks,简称S):在事物要读取一条记录时,需要先获取该记录的S锁,S锁可以在同一

    java高频面试题-mysql的InnoDB与MyISAM存储引擎有哪些区别 ?

    mysql的InnoDB与MyISAM存储引擎有哪些区别 ? MySQL是一个广泛使用的关系型数据库管理系统,其中InnoDB和MyISAM是两种常用的存储引擎。它们在功能和性能方面存在着显著的差异

    mysql 批量kill多个进程

    查看进程 show PROCESSLIST; +--------+--------+---------------------+------+---------+------+- | Id     | User  ...

    mysql function生成指定位数且不重复数字

    1.生成指定位数且不重复数字 2.函数结构 CREATE DEFINER=`root`@`%` FUNCTION `fun_sn`(number BIGINT) RETURNS bigint(20) BEGIN DECLARE v_flag TI...

    mysql GROUP BY去重报错,可以外面在套一层查询

    SELECT * FROM ( SELECT s.id, c.NAME FROM tbl_stu s, tbl_city c WHERE s.id = c.stu ) aa GROUP BY s.id, c.NAME

    加入公众号
    加入公众号