• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

XiaoXiaoli

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

MySQL_主从复制

读写分离

  为什么要采用主从复制、读写分离的架构?

    主从复制、读写分离一般都是一起使用的。

    目的很简单,就是为了提高数据库的并发性能。

 

主从复制的原理

  1 当Master节点进行insert、update、delete操作时,会按照顺序写入到binlog中。

    binlog日志在哪?/var/lib/mysql

      

  2 Salve从库连接Master主库,Master有多少个Slave就会创建多少个binlog dump线程。

    这里的Master指主机,Slave指从机。

    主机和从机之间的关系为:主机只能有一台,从机可以有多台。    

 

  3 当Master节点的binlog发生变化时,binlog dump线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。

  4 I/O线程接收到binlog内容后,将内容写入到本地的relay-log。

    这里的relay-log一般称为中继日志。

 

  5 SQL线程读取I/O线程写入的relay-log,并且根据relay-log的内容对数据库做对应的操作。

    这里涉及一个MySQL主从复制的缺点:延迟。原因在于:中间有一个中继日志。

   

 

 

如何实现主从复制:

Master配置

  1)使用命令行进入mysql:

    1、mysql -u root -p

    2、输入密码进入MySQL

 

  2)创建用户,给予授权:

      GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.42.160' identified by 'Java@1234'; // 192.168.42.160是slave从机的IP地址

      FLUSH PRIVILEGES;  // 刷新系统权限表的配置,创建的这个用户在配置slave从机时要用到。

       

 

  3)接下来在找到mysql的配置文件/etc/my.cnf,增加以下配置:

    # 开启binlog
    log-bin=mysql-bin
    server-id=104
    # 需要同步的数据库,如果不配置则同步全部数据库
    binlog-do-db=test_db
    # binlog日志保留的天数,清除超过10天的日志
    # 防止日志文件过大,导致磁盘空间不足
    expire-logs-days=10

 

   4)配置完成后,重启mysql:

     systemctl restart  mysqld.service

  

  5)可以通过命令行show master status\G;查看当前binlog日志的信息(后面有用):

     

 Slave配置

  1)Slave配置相对简单一点。从机肯定也是一台MySQL服务器,所以和Master一样,找到/etc/my.cnf配置文件,增加以下配置:  

    # 不要和其他mysql服务id重复即可
    server-id=106

 

   2)接着使用命令行登录到mysql服务器:

    mysql -u root -p

 

  3)进入到mysql后,再输入以下命令:

    CHANGE MASTER TO
    MASTER_HOST='49.232.23.56',//主机IP
    MASTER_USER='root',//之前创建的用户账号
    MASTER_PASSWORD='Java@1234',//之前创建的用户密码
    MASTER_LOG_FILE='mysql-bin.000001',//master主机的binlog日志名称
    MASTER_LOG_POS=862,//binlog日志偏移量
    master_port=3306;//端口

   4)还没完,设置完之后需要启动:

    # 启动slave服务

    start slave;

  5)启动完之后怎么校验是否启动成功呢?使用以下命令:

    show slave status\G;

    可以看到如下信息(摘取部分关键信息):

 

测试主从复制

  在master主机执行sql:

  CREATE TABLE `tb_commodity_info` (
    `id` varchar(32) NOT NULL,
    `commodity_name` varchar(512) DEFAULT NULL COMMENT '商品名称',
    `commodity_price` varchar(36) DEFAULT '0' COMMENT '商品价格',
    `number` int(10) DEFAULT '0' COMMENT '商品数量',
    `description` varchar(2048) DEFAULT '' COMMENT '商品描述',
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品信息表';

接着我们可以看到slave从机同步也创建了商品信息表,主从复制就完成了!

  

 

mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'报错处理:

  解决方法

    1)首先在从库上执行

      stop slave;

    2)刷新binlog日志

      flush logs;

      刷新后的日志会+1

      然后就不需要在操作master,切换到从库

    3)输入CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000114',MASTER_LOG_POS=120;

    4)执行start slave;

 

posted on 2021-09-06 21:25  XiaoXiaoli  阅读(46)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3