mysql主从复制-简单模式

mysql主从复制-简单模式

月光魔力鸭

2023-11-11 14:53 阅读 445 喜欢 0 主从复制

学习研究一下关于mysql的主从复制。

准备

通过docker创建两个mysql实例 。 docker-compose.yml

version: "3.7"
services:
  mysql3:
    image: mysql:8.0
    container_name: mysql81
    restart: always
    privileged: true
    ports:
      - 3310:3306
    volumes:
      - ./mysql81:/var/lib/mysql
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
    command:
      --default-time-zone="+8:00"
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --max_connections=1000
      --innodb_lock_wait_timeout=500

另一个换下端口和service即可。

启动两个mysql实例

配置复制

创建复制帐号

先查看下对应的ip地址.

docker exec -it mysql81 /bin/bash
cat /etc/hosts

查看IP地址

进入mysql创建 slave帐号

create user repl@'172.30.0.%' identified by 'Password4';

grant replication slave,replication client on *.* to repl@'172.30.0.%';

flush privileges;

两个实例都执行一下。

配置主库和备库

log_bin = mysql-bin
server_id = 10

通过docker-compose.yml 指定 my.cnf , docker-compose81.yml

...
volumes:
      - ./my81.cnf:/etc/my.cnf
      - ./mysql81:/var/lib/mysql

然后重新启动,检查下二进制日志文件是否已经创建

show master status

检查二进制日志文件是否启动

log_bin = mysql-bin
server_id = 2
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1
read_only = 1

实际上 relay_log log_slave_updates read_only并不是必须的,根据实际情况来进行选择。read_only`如果需要在备库上建表的话,这个就不需要了。

change master to master_host = '172.30.0.2',master_user = 'repl',master_password='Password4',master_log_file='mysql-bin.000001',master_log_pos=0;

检查是否正确执行,执行show slave status\G .

连接主库

start slave;

检查状态如下:

检查状态

做测试

... 悲催的是,做测试的时候发现是失败的,查看了slave 状态,竟然无法连接...

 Error connecting to source 'repl@172.30.0.2:3306'. This was attempt 4/86400, with a delay of 60 seconds between attempts. Message: Can't connect to MySQL server on '172.30.0.2:3306' (110)

原来是docker网络的问题.. 重启后IP会发生变化.. 这就尴尬了,重新设置下固定IP,然后重做配置,再测试。

docker network create --subnet=172.30.0.0/16 repl
version: "3.7"
services:
  mysql3:
    image: mysql:8.0
    container_name: mysql81
    restart: always
    privileged: true
    ports:
      - 3310:3306
    volumes:
      - ./my81.cnf:/etc/my.cnf
      - ./mysql81:/var/lib/mysql
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
    command:
      --default-time-zone="+8:00"
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --max_connections=1000
      --innodb_lock_wait_timeout=500
    networks:
      repl2:
          ipv4_address: 172.30.0.2
networks:
  repl2:
    external:
      name: repl2

两个都指定后,重启查看IP没有变化。

再次尝试后还是报错...

Error connecting to source 'repl@172.30.0.2:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection

参考 https://blog.csdn.net/u010953609/article/details/130237868

最后还需要注意的问题是,表及数据要一致,

报错2

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000002, end_log_pos 418. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if an

这个是更改了master_log_pos 后,与 master 的一致。

show master status

查看。

成功

成功后多次测试增加数据就会有如下,pos会发生变更,并且数据一致。

从一个已有的数据库开始复制

实际上有很多都是已经有正在运行的服务器了,因为业务或性能需要做备库。

mysqldump --single-transaction --all-databases --master-data=1--host=server1 | mysql --host=server2

转载请注明出处: https://chrunlee.cn/article/mysql-replication-single.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
最近在做直播,是用的webrtc,然后找的免费的starrtc ,当然,可能由于种种原因吧.. 用起来并没有特别顺畅,后续还希望能够深入这部分,从现在开始学习..当然,websocket 是顺带的,可以用来发消息什么的肯定也是要用到的。
chrome 如何查看placeholder样式以及其他伪类样式
最近先研究下jenkins远程部署,在自己服务器上跑一个先,简单记录下碰到的问题。
功能来源于客户需求。客户有需求想把班级内所有学生的错题本生成pdf文档下载下来... 目前没有做这个功能,只有页面,还好chrome浏览器有保存pdf的功能,但是一想到这么多的学生,这么多的学科、以及这么多的参数... 还好有puppeteer
BUG 报错Tainted canvases may not be exported 。 在通过canvas 调用 toDataURL的时候出现的问题。
昨天实现一个tabbar的时候发现怎么都无法跳转,直接拿的官方的demo,后来才发现是自定义tabbar的问题。
ffmpeg 采集摄像头进行推流,然后播放,实现直播。
前一阵子做了个图床,可以粘贴上传,查看服务器上的文件... 但是自己的服务器总是有问题..空间还小,就怕哪天没钱续费了。同事昨天想要一个七牛的图床,在网上找了下,只找到了 qiniu upload files插件,自己使用了下,挺好用,但是没有复制粘贴