mysql 复制原理与实践应用详解

Mysql 复制原理与实践应用详解

什么是MySQL复制

Mysql 复制是指将一个Mysql服务器上的数据,同步到另一个Mysql服务器上的一个过程,主要用于:
- 分布式集群:多台MySQL服务器组成一个集群,进行负载均衡和故障转移。
- 数据备份:主服务器上的数据可以被同步到备用服务器上,以用于备份或恢复。

MySQL 复制的工作原理

Mysql 复制的工作原理是基于二进制日志(binlog)实现的。binlog 是MySQL服务器上一种记录数据库操作日志的机制。binlog 会记录数据库的DDL、DML操作语句以及事务信息。数据同步主要是通过主库生成binlog, 然后备库根据主库中的binlog进行数据更新。

具体步骤如下:
1. 主库生成binlog,存储到本地的二进制日志文件中(mysql-bin.000001,mysql-bin.000002...)
2. 备库连接主库,启动I/O线程,读取主库的binlog日志保存到本地的relay log文件中。(relay log 是备用服务器生成的中转日志文件)
3. 备库连接主库,启动SQL线程。主库上记录的二进制日志被传给备库后,通过SQL线程在备库上执行,从而完成备库中的数据同步操作。
4. 备库定期心跳检测,判断与主库是否正常连接。当主库发生故障无法连接时,备库会成为主库的角色。

MySQL 复制的配置

MySQL 复制包含主库和从库,主库用于生产binlog,从库通过读取binlog文件,执行主库的操作即可实现数据的同步。因此,需要对主库和从库进行配置。

主库配置步骤

  1. 编辑MySQL服务器配置:my.cnf文件,开启binlog功能
log-bin=mysql-bin  #开启二进制日志
binlog_format=STATEMENT #配置binlog日志格式
server_id=<主库编号> #主库编号要唯一
  1. 创建从库用户,并给予从库复制权限
grant replication slave on *.* to 'slave_user'@'从库IP地址' identified by 'password';
flush privileges;

从库配置步骤

  1. 编辑MySQL服务器配置:my.cnf文件,开启从库在本地放置Binary Log的选项
log-bin=mysql-slave-bin # 开启binlog,用于从库生成中转日志文件。
  1. 配置从库连向主库的信息
change master to master_host='主库IP地址', master_user='slave_user', 
master_password='password', master_port=<主库端口号>, master_log_file= '<主库二进制日志文件名>', 
master_log_pos=<主库二进制日志位置>;
  • master_host : 主库的ip地址
  • master_user : 主库用户名称,该用户必须拥有复制权限
  • master_password : 主库的用户密码
  • master_port : 主库使用的端口号,默认为3306
  • master_log_file : 主库上正在写入二进制日志的文件名
  • master_log_pos : 正在写入的二进制日志文件的位置。

  • 开启从库的复制服务 begin

mysql> start slave;

MySQL复制的应用实践

实践1:主从同步

  1. 配置主库,开启binlog功能,并创建slave_user, 并给予从库复制权限,此处不再赘述。
  2. 配置从库连向主库的信息
change master to master_host='192.168.0.188', master_user='slave_user', 
    master_password='password', master_port=3306, master_log_file= 'mysql-bin.000012', 
    master_log_pos=4952239;

注意: master_log_filemaster_log_pos的值应该和主库上保持一致,用于数据同步。

  1. 开启从库的复制服务
mysql> start slave;

此时可以通过show slave status\G;命令查看从库的状态,确保从库的无错状态:

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.188
   ..........

实践2:主主同步

主主同步是指两个服务器之间的相互备份。实现步骤同上,这里介绍不同之处。
1. 配置主库1开启binlog功能,创建slave_user,并给予从库复制权限,此处不再赘述。
2. 配置主库2与主库1同步,开启binlog功能。
3. 配置主库1从主库2同步,如下:

change master to master_host='主库2的IP地址', master_user='slave_user', 
    master_password='password', master_port=3306, master_log_file= 'mysql-bin.000012', 
    master_log_pos=4952239;

mysql> start slave;

然后在两个库之间进行数据的修改,主库2的数据也会同步到主库1中。

总结

MySQL复制通过binlog文件实现数据同步。需要进行主库和从库的配置,主库开启binlog, 从库连向主库并开启复制服务即可完成数据同步的操作。同时,MySQL复制支持主从同步,以及主主同步,用于完成数据的备份,负载均衡和故障转移等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 复制原理与实践应用详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Docker下mysql设置字符集的方法

    你好,关于Docker下mysql设置字符集的方法,以下是完整攻略: 1. 在Docker镜像中添加locale 在Dockerfile中添加以下语句: RUN apt-get update && apt-get install -y locales \ && echo "en_US.UTF-8 UTF-8&quot…

    database 2023年5月21日
    00
  • MySQL prepare语句的SQL语法

    MySQL中的prepare语句是一种高级的编程方式,它可以让MySQL服务器预处理SQL语句,然后再执行该语句。这样做的好处是可以大大提高SQL语句的执行效率,同时也可以防止SQL注入攻击。下面是prepare语句的SQL语法和示例说明。 1. SQL语法 PREPARE statement_name FROM preparable_stmt 其中,sta…

    database 2023年5月21日
    00
  • 【数据库】9.0 MySQL入门学习(九)——获得数据库和表的信息、日期计算、查询、选择特殊列

    1.0 SELECT语句用来从数据表中检索信息。   SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to_select指出你想要看到的内容,可以是列的一个表,或*表示“所有的列”。 which_table指出你想要从其检索数据的表。 WHERE子句是可选项,如…

    MySQL 2023年4月12日
    00
  • Java开发者结合Node.js编程入门教程

    Java和Node.js分别是两种不同的编程语言,但它们都是非常流行的后端编程语言。在实际项目中,它们常常被一起使用。Java可以用于构建RESTAPI和业务逻辑,Node.js可以用于处理I/O操作,例如文件访问、网络请求等。 如果你是Java开发者,想要学习Node.js,以下是步骤: 第一步:了解Node.js和JavaScript基础知识 在开始使用…

    database 2023年5月22日
    00
  • redis5集群搭建

    主库宕机,从库会被自动选举为主库master,并继承原主库的哈希槽,当master恢复,会成为现主库的从库,且同步宕机期间的数据 若集群创建出错 step1:关服务 ./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown step2:删除rdb数据文件,nodes-****.conf rm -rf…

    Redis 2023年4月12日
    00
  • PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例

    下面是实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据的攻略。 1. 前置条件 在开始之前,需要满足以下前置条件: 本地已安装PHP开发环境 本地已安装PostgreSQL数据库及相应的驱动程序 2. 实现分页查询 2.1 连接PostgreSQL数据库 首先,在PHP中连接到PostgreSQL数据库,可以使用以下代码: // 连接到数据…

    database 2023年5月21日
    00
  • Sqlserver 2000/2005/2008 的收缩日志方法和清理日志方法

    收缩日志方法: 使用 SQL Server Management Studio (SSMS) 收缩日志: 打开 SSMS,连接到 SQL Server 数据库。 在左侧面板中展开该数据库并右键单击“任务”,选择“收缩”。 在弹出的“收缩数据库”对话框中,选择“文件类型”为“日志”,然后点击“OK”即可执行收缩操作。 使用 T-SQL 命令收缩日志: 打开 S…

    database 2023年5月21日
    00
  • 如何修改Linux内核参数vm.swappiness

    修改Linux内核参数vm.swappiness的步骤如下: 第一步:了解vm.swappiness参数 vm.swappiness是Linux系统内存管理的参数之一,它决定了系统在内存不足时的行为。参数值为0-100之间的整数,0表示不将内存数据交换到硬盘上,100表示允许内存数据全部交换到硬盘上。默认值为60。 第二步:修改vm.swappiness参数…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部