前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyCat01——如何实现MySQL中的主从复制

MyCat01——如何实现MySQL中的主从复制

作者头像
头发还在
发布2023-10-16 11:01:44
1360
发布2023-10-16 11:01:44
举报
文章被收录于专栏:桃花源桃花源

1 问题

数据对于我们来说是一项最重要的资产,因为数据丢失带来的损失,对于一家公司来说,有时也是毁灭性的。

那么如何确保数据安全,不因断电或系统故障带来数据丢失呢?

当用户增加,对数据库的访问量也随之升高,如何提高数据库性能,降低访问量增长对数据带来的压力呢?

主从复制无疑是其中一个比较好的选择,将主库的数据复制到多个从库中,如果主库挂掉,从库的数据也是完整的,能够继续为用户提供服务。

同时可以对数据库进行读写分离操作,主库用于数据的写入,而从库则用于数据的读取。

2 binlog 日志

2.1 什么是 binlog

是 MySQL 中最重要的一种日志,它记录了 MySQL 所有数据的变更,并以二进制的形式存储在磁盘上,这些变更包括了所有的表结构变更(CREATE、ALTER TABLE…)以及表数据变更(INSERT、UPDATE、DELETE…),不包括 SELECT 。

也是实现主从复制的数据来源。

binlog 日志有三种记录格式:

  • statement 每次数据变更的 sql 都会被记录;
  • row 仅记录被修改的数据;
  • mixed 上述两种方式混合使用,一般的语句修改采用 statement,当全表更新时则采用 row,但是这种模式下无法使用 @@host name 函数。

2.2 binlog 日志相关的命令

登录进入到mysql的命令行中:

查看日志位置

show variables like '%log_bin%';

查看日志格式,这里的格式是指三种记录日志的格式

show variables like '%format%';

查看当前使用的日志文件

show master status;

3 主从复制的原理

从数据库中开启两个线程:

一个用于监控主数据库 binlog 日志的变化,如果有更新,就将其读取出来并写入到从数据库的 relay log 中;

另一个线程用于监控本地的 relay log 日志的变化,如果有更新,就将更新内容在本地执行一遍,这样就保证了从数据库与主数据库数据的一致性。

4 搭建主从复制

4.1 安装MySQL数据库

这里默认已经安装了至少两个MySQL数据库,如果有不清楚怎么安装的,可以在网上进行搜索。

4.2 开启数据库的 Binlog 日志

在主数据库 MySQL 的配置文件中增加两项配置

在从数据库也增加同样的配置,server-id 不能相同,需要改为 102。

设置完成后,需要重新启动数据库。

4.3 配置用于读取主数据库的用户

4.3.1 主数据库中的操作

首先,需要在主数据库中创建 binlog 日志的读用户,允许从数据库使用 slave 这个用户访问主数据库。

查看数据库中日志文件状态

show master status;

记住其中的两项参数,下边将在从库中需要使用。

在主数据库的命令行中执行:

grant replication slave on *.* to 'slave'@'%' identified by '123456';

4.3.2 从数据库中的操作

在从库中配置主库连接信息

命令中的各项信息,需要和主库中查询到的内容一致。

  • master_host 主库的IP地址
  • master_user 主库的用户
  • master_password 主库的密码
  • master_log_file 主库当前正在使用的 binlog 文件
  • master_log_pos 主库当前 binlog 文件位置

change master to master_host='192.168.1.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=106;

配置完成后,执行以下命令启动从服务

start slave;

查看从库状态

show slave status \G;

如果其中 Slave_IO_Running Slave_SQL_Running 参数都为YES时,表示同步正常。

否则需要查看是否是 防火墙的问题,或者是 数据库配置文件中 Server-id 相同导致的。

至此,只要在主库中做出修改数据的操作,从库中的数据将被自动刷新。

5 解除主从复制

进入到从库的命令行中,执行如下操作

代码语言:javascript
复制
mysql> stop slave;
Query OK, 0 rows affected (0.08 sec)

mysql> reset slave all;
Query OK, 0 rows affected (0.18 sec)

mysql> show slave status\G;
Empty set (0.00 sec)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 问题
  • 2 binlog 日志
    • 2.1 什么是 binlog
      • 2.2 binlog 日志相关的命令
      • 3 主从复制的原理
      • 4 搭建主从复制
        • 4.1 安装MySQL数据库
          • 4.2 开启数据库的 Binlog 日志
            • 4.3 配置用于读取主数据库的用户
              • 4.3.1 主数据库中的操作
              • 4.3.2 从数据库中的操作
          • 5 解除主从复制
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档