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

猿份哥 1月前 ⋅ 105 阅读 ⋅ 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

    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 批量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

    mysql循环cursor游标模板

    此模板避免了,cursor循环遍历时候出现最后一次的重复 CREATE DEFINER=`root`@`%` PROCEDURE `proce_test`() BEGIN DECLARE v_col1 VARCHAR(32); DECLARE v...

    今日摘抄:主动支配自己碎片化时间方法

    这两天在看李尚龙的《你没有退路,才有出路》这本书。目前还没有看完,我一直很喜欢他的书。 他在文章中说:“自己不主动使用碎片化时间,这些时间就会被别人利用”,的确是这样子的,里面他分享了主动支配自己

    java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)

    今天连接数据库老是报这个错误 java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)   查看properties文件后发现配...

    Spring Boot系列7-SpringBoot+mybatis+druid+TypeHandler

    介绍在SpringBoot中集成mybatis和druid以及自定义TypeHandler 创建数据库表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- --------------------...

    SpringBoot系列15-mysql-multiple-data-sources1

    springboot 多数据源的一个简单示例 多数据源分包加载 新建数据库test1和表tbl_user CREATE TABLE `tbl_user` ( `id` int(11) NOT NULL, `name` varchar(255) ...

    spring boot系列4-定时任务-springboot自带的scheduled超级简单

    需求:创建一个每天凌晨0点执行的定时任务1.创建任务 /** * @author 天空蓝蓝的 */ @Slf4j @EnableScheduling @Component public class

    加入公众号
    加入公众号