MySQL主从复制-详细原理-实践操作

  • MySQL主从复制介绍:
    • mysql数据库默认是支持主从复制的,不需要借助于其他的技术。
    • mysql主从复制是基于binlog二进制日志来实现的。
      • binlog二进制日志记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但不包括数据查询语句。
    • 从库取得主库的binlog进行回放
    • 主从复制的过程是异步的
  • MySQL主从复制的基本原则是:
    • 1.每个slave只有对应一个master
    • 2.每个slave只能有一个唯一的服务器ID
    • 3.每个master可以有多个slave
  • MySQL主从复制的形式包括有:
    • 一主一从
    • 一主多从
    • 多主一从:多主一从可以将多个Mysql数据库备份到一台存储性能比较好的服务器上
    • 双主复制:互做主从复制,两台master互相做对方的slave
    • 级联复制:级联复制模式下,部分slave的数据同步不连接主节点,而是连接从节点
  • MySQL主从复制的原理:
    • 1.主服务器开启binlog日志,从服务器通过CHANGE MASTER TO 命令与主服务器建立连接
    • 2.将主库的信息保存到自己的master.info中,便于下次再次连接
    • 3.从服务器开启两个线程,一个IO线程一个SQL线程,IO线程负责监听主库的变化并将binlog日志下载到本地relay.log上,SQL线程通过查看relaylog.info找到最新数据的点,进行重放
    • 4.除了第一次连接是由IO线程主动发起下载,之后会由主库的DUMP线程,主动的将新的日志传输给IO线程
  • 主从复制涉及到四个文件和三个线程:
    • 文件:
      • 主库:
      • binlog 主库的二进制日志 (记录操作信息,用于从库中回放)
      • 从库:
      • 1. relaylog 中继日志
        • (IO线程将binlog文件中的内容写入relaylog文件,SQL线程读取relaylog文件的内容,执行在从库上)
        • 主要作用是:保证当从库断开连接时,可以继续从上一次同步的位置继续同步数据
      • 2. master.info 主库信息文件
        • master.info文件记录了主从连接的相关信息,如主库的IP、端口等)
      • 3. relaylog.info relaylog应用的信息
        • relay.info文件记录了从库上的中继日志文件的相关信息,如中继日志文件的路径、文件名同步位置等)
      • 注意:master.info文件和relaylog.info文件都是用来保证主从同步的正确性和完整性,如果这两个文件信息不正确,会导致主从同步失败或出现数据不一致的情况。
    • 线程:
      • 主库:
      • Binlog_Dump Thread : DUMP_T (将二进制文件的内容发送给从库)
      • 从库:
      • SLAVE_IO_THREAD : IO_T (从主库上读取二进制文件内容)
      • SLAVE_SQL_THREAD : SQL_T (将读取到的二进制文件内容中的SQL语句,执行在从库上)
  • 实验环境:
    • master:192.168.8.5
    • slave:192.168.8.6
  • 实验操作:
    • 1.两台服务器同时,修改配置文件/etc/my.cnf,开启binlog日志
      • cat > /etc/my.cnf << EOF
      • [mysqld]
      • user=mysql
      • basedir=/usr/local/mysql
      • datadir=/usr/local/mysql/data
      • socket=/tmp/mysql.sock
      • server_id=1
      • log_bin=/data/binlog/master-bin
      • port=3306
      • [mysql]
      • socket=/tmp/mysql.sock
      • prompt=master>
      • EOF
    • 2.创建数据目录,修改权限:
      • mkdir -p /data/binlog
      • chown -R mysql.mysql /data
      • systemctl restart mysqld
    • 3.master创建复制用户:
      • grant replication slave on *.* to repl@'192.168.8.%' identified by '123456';
    • 4.将master库的历史数据复制到slave库上
      • mysqldump -uroot -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
      • scp /tmp/full.sql root@192.168.8.6:/root
    • 5.slave库导入master主库的历史数据:
      • mysql> set sql_log_bin=0; (不记录日志)
      • mysql> source /root/full.sql
      • mysql> set sql_log_bin=1;
    • 6.查看主服务器当前的二进制日志名和position号
      • show master status;
    • 7.在salve库上连接master库:
      • CHANGE MASTER TO
      • MASTER_HOST='192.168.8.5',
      • MASTER_USER='repl',
      • MASTER_PASSWORD='123456',
      • MASTER_PORT=3306,
      • MASTER_LOG_FILE='master-bin.000001',
      • MASTER_LOG_POS=447,
      • MASTER_CONNECT_RETRY=10;
    • 8.开启复制线程,IO线程下载日志,SQL线程将日志回放
      • start slave
    • 9.在从库上检查主从复制的状态
      • show slave status \G
    • 10.测试主从复制是否实现:
      • 在master1库上创建库和表,查看slave库上是否同步过来
      • 主库:
        • create database ms;
        • use ms;
        • create table t1 (id int,name varchar(20));
        • insert into t1 values (1,'z3'),(2,'l4'),(3,'w5');
      • 从库:
        • show databases;
        • use ms;
        • select * from t1;
      • 可以查看到信息,则代表主从复制成功
  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力转型的IT小王

希望获得您的认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值