mysql主从复制-简单模式

mysql主从复制-简单模式

月光魔力鸭

2023-11-11 14:53 阅读 426 喜欢 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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
昨天实现一个tabbar的时候发现怎么都无法跳转,直接拿的官方的demo,后来才发现是自定义tabbar的问题。
chrome 如何查看placeholder样式以及其他伪类样式
docker build 执行yum失败,找不到repo
本篇文章以一个实际的小项目为主题进行从头到尾的讲解实现,该项目总计开发时长约6小时,主要是有很多页面或功能都是现成的,直接复制过来的,剩下的就调整下样式、字段内容等。
前几天同事抱怨说微博太费劲了... 一万多条记录,可能会把他累死,我心想.. 重复工作不都可以用程序代替么..
在程序中,会有需要后台一直运行的场景。这一节我们来做一个监控某网站的运行状态,如果没有运行,则改变当前的图标。
最近一段时间想着做个资源网站,奈何没数据,准备从几个相关的站点上抓一些数据,数据量每个站点都在几千万左右,这里简单总结下最近一段时间在做的测试。
ffmpeg 采集摄像头进行推流,然后播放,实现直播。