mysql主从复制(原理以及配置)

目录

主从原理

Mysql内建的复制功能是构建大型,高性能应用程序的基础。将
Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的
某一台主机(Master)的数据复制到其它主机(slaves)上,并重新执
行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其
它服务器充当从服务器。主服务器将更新写入二进制日志文件,这些日志
可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通
知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器
接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

MySQL主从复制主要有三个步骤:
(1) 主服务器(master)将改变记录到二进制日志(binary
log)中(这些记录叫做二进制日志事件,binary log events)

(2) 从服务器(slave)将主服务器master的binary log
events拷贝到它的中继日志(relay log)

(3) slave重做中继日志中的事件,将改变反映它自己的
数据。

在MySQL的主从复制过程中,从服务器上有两个线程起到了很关键的作用,分别是I/O线程和SQL从线程。工作步骤如下图所示:
这里写图片描述
1、该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日志,在事件,写入二进制日志完成后,master通知存储引擎提交事务。此后可接收slave的请求。

2、下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave
开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开
始在主节点上binlog dump process(二进制转存线程)。Binlog dump process
从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master
产生新的事件。I/O线程将这些事件写入中继日志。

3、 SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日
志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

配置实现

实验介绍

主机名IP角色
mysql1172.25.0.41主服务器
mysql2172.25.0.42从服务器

要求:对数据库的所有操作,从数据库都能够自动的备份,跟踪。保持跟主数据库的一致性。

配置主服务器:

1、修改配置文件
[root@mysql1 ~]# vim /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
server-id = 1
log-bin = binlog
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

2、授权复制账户

在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。

MariaDB [(none)]> grant replication slave ,replication client on *.* to slave@'172.25.%.%' identified by 'centos';

3、查看主服务器的状态
在Master的数据库执行show master status,查看主服务器二进制日志状态
这里写图片描述

配置从服务器

1、修改从服务器配置文件
对slave进行配置,打开中继日志,指定唯一的servr ID,设置只读权限
[root@mysql2 ~]# vim /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
server-id=2
#配置server-id,标识从服务器
relay_log = mysql-relay-bin
#打开Mysql中继日志
read-only =1
#设置从服务器只读权限
log_bin =mysql-bin
#打开从服务器的二进制日志
log_slave_updates =1
#使得更新的数据写进二进制日志中
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

2、启动从服务器复制线程
让slave连接master,并开始重做master二进制日志中的事件。


MariaDB [(none)]> change master to master_host='172.25.0.41', master_user='slave', 
master_password='centos', 
master_log_file='binlog.000003', 
master_log_pos=245;
#master_log_file代表从哪个二进制文件开始执行,
#master_log_pos表示从什么位置开始执行二进制文件。
MariaDB [(none)]> start slave;   
#开启slave模式

3、查看从服务器状态
MariaDB [(none)]> show slave status\G;

这里写图片描述

由上图可知I/O线程是和SQL线程都已经开启,表示从服务器状态正常。

测试:

在主服务器中创建数据库,创建表,添加表信息等操作。然后在从服务器上进行查看,查看的内容是一致的,那么就说明两个数据库的数据是一致的。也就是说,从服务器能够实时的同步主服务器的数据。

注: 如果添加SLAVE服务器的时候,主服务器已经运行了一段时间,此时就需要在从服务器上先同步主服务器之前的数据。可以使用物理的备份方式,复制数据库文件,在复制的过程中注意数据库文件的权限问题,如果数据库文件的权限不够的话,在从数据库中是无法读取到相关信息的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制是基于二进制日志(binary log)的复制方式,通过将主数据库上的操作记录在二进制日志中,并将二进制日志传输到从数据库,从数据库再执行相同的操作来实现数据同步。以下是MySQL主从复制的基本原理: 1. 主库(Master)的操作: - 主库将所有的写操作(INSERT、UPDATE、DELETE等)记录在二进制日志(binary log)中,包括数据修改语句和事务信息。 2. 从库(Slave)的配置: - 从库需要连接到主库,并设置复制相关的参数,如主库的IP地址、端口号、复制用户名和密码等。 3. 初始数据同步: - 在开始主从复制之前,通常需要进行一次初始数据同步,将主库的数据复制到从库。可以使用备份和恢复的方式来实现初始数据同步。 4. 主库和从库的连接: - 从库通过连接到主库,发送一个复制请求,请求获取主库的二进制日志。 5. 主库二进制日志传输: - 主库收到从库的复制请求后,开始将二进制日志传输给从库。传输可以通过网络传输,也可以通过共享文件系统传输。 6. 从库的二进制日志解析和执行: - 从库接收到主库传输过来的二进制日志后,开始解析并执行其中的数据修改语句和事务信息。从库会按照主库的操作顺序来执行这些操作。 7. 从库的回放和复制延迟: - 从库根据主库的操作顺序逐条执行二进制日志中的操作,将主库的操作在从库上重现。由于复制过程是异步的,从库的复制延迟可能会导致从库上的数据与主库存在一定的时间差。 8. 主库故障和主从切换: - 如果主库发生故障,可以将一个从库提升为新的主库,然后将其他从库切换到新的主库上,实现主从切换。 通过主从复制,可以实现数据的备份、读写分离、负载均衡等功能,并提高数据库的可用性和性能。同时,需要注意主从复制配置和监控,以确保数据一致性和复制的稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值