Mysql主从复制实战(1主3从)

主从复制

MySQL主从复制是一种数据库复制技术,它允许一个MySQL数据库服务器将数据更新操作(增删改)自动复制到一个或多个其他从数据库服务器。这种技术可以提高数据库的可用性、扩展性和性能。

实现原理

主从复制的基本原理可以分为以下几个步骤:
在这里插入图片描述

  1. 主服务器将数据更新操作记录在二进制日志(Binary Log)中。二进制日志包括两种类型:
    语句式日志(Statement-Based Logging):记录执行的SQL语句。
    行式日志(Row-Based Logging):记录实际发生的数据变更。
  2. 从服务器定期从主服务器获取二进制日志。从服务器通过一个名为I/O线程的后台进程连接到主服务器,请求二进制日志的更新。主服务器将更新发送给从服务器。
  3. 从服务器将获取到的二进制日志记录在中继日志(Relay Log)中。中继日志是从服务器上的一个临时存储区域,用于存储从主服务器获取到的二进制日志,以便SQL线程可以顺序地执行它们。
  4. 从服务器通过一个名为SQL线程的后台进程将中继日志中的数据更新操作重放到从服务器的数据库中。SQL线程会根据中继日志中的记录,执行相应的数据更新操作,以保持从服务器数据库的一致性。

主从复制的优点

  • 负载均衡:通过将读操作分散到从服务器上,可以减轻主服务器的负担,提高整体性能。
  • 数据备份:从服务器可以作为主服务器的备份,当主服务器出现故障时,可以快速切换到从服务器。
  • 扩展性:当数据量增大时,可以通过增加从服务器来提高数据库的处理能力。

主从复制的分类

  • 全同步复制:这种模式下,主服务器在提交事务之前,需要等待所有从服务器都确认已经接收到并完成了数据更改。
  • 异步复制:在这种模式下,主服务器将数据更改写入二进制日志,并立即返回成功给客户端。然后,从服务器异步地读取主服务器的二进制日志,并将其应用于自身的数据库中。由于是异步的,所以从服务器可能会有一定的延迟。
  • 半同步复制:这是复制模式主要用于提高数据可靠性。在这种模式下,主服务器将数据更改写入二进制日志,并等待至少一个从服务器确认已经接收到数据更改,然后返回成功给客户端。从服务器接收到数据后,将其应用于自身的数据库。半同步复制相比异步复制,减少了数据丢失的可能性。

实现1主3从的架构

我准备了1个本地服务器和3个云服务器,其中一台云服务器作为主库,其他三台作为从库。

节点角色IP
节点1主服务器123.207.5.157
节点2从服务器121.37.212.191
节点3从服务器8.134.195.226
节点4从服务器192.168.1.2

(1)主节点执行,配置主服务器节点1的配置文件:
启用二进制日志,并设置唯一的服务器ID。

vim /etc/my.cnf

添加以下内容

server-id=9 #要求每个服务器的id都不一样
log-bin=master-a-bin #日志文件名称
binlog-format=ROW #二进制日志格式,有row,statement,mixed三种类型,主从的配置需要一致
binlog-do-db=shop-seckill #需要同步的数据库名称

创建3个用于复制的用户,并授予复制权限。

create user 'root'@'121.37.212.191' identified by '密码'; 
create user 'root'@'8.134.195.226' identified by '密码'; 
create user 'root'@'192.168.1.2' identified by '密码'; 
grant replication slave on *.* to 'root'@'121.37.212.191' ;
grant replication slave on *.* to 'root'@'8.134.195.226' ;
grant replication slave on *.* to 'root'@'192.168.1.2' ;

重启MySQL服务

service mysql start

(2)从节点执行,在3个从节点都要执行,配置从服务器(节点2,3和节点4一样的操作,只需要server-id都不一样即可):
修改my.cnf配置文件,设置唯一的服务器ID和主服务器的信息。

vim /etc/my.cnf

添加以下内容

[mysqld]
 basedir=/usr/local/mysql8
 datadir=/usr/local/mysql8/data
 socket=/tmp/mysql.sock
 character-set-server=utf8
 default_authentication_plugin=mysql_native_password
 port=3306

log-bin=slave-a-bin
binlog-format=ROW
server-id=4   #这里需要保证每个服务器的server-id都不一样

重启MySQL服务

service mysql start

(3)主节点执行,查看主节点的binlog文件名以及偏移量的位置

show master status;

在这里插入图片描述从节点需要知道复制主节点的哪个文件名以及具体位置,所以需要记录主节点的binlog文件名以及偏移量的位置
(4)从节点执行,在3个从节点都要执行,从节点指定主服务器信息

change master to master_host='123.207.5.157',master_user='账户名',master_password='密码',master_log_file='master-a-bin.000001',master_log_pos=13694;

注意:master_host 是主节点ip地址,master_user 和 master_password主节点的账号和密码,master_log_file 和master_log_pos 是步骤(3)查询出来的File文件名和Position偏移量位置。
在这里插入图片描述启动从节点

start slave;

在这里插入图片描述
查看从节点状态

show slave status \G;

在这里插入图片描述Slave_IO_Running 线程和 Slave_SQL_Running线程都为YES说明主从复制配置成功。
(5)主节点查看从节点的个数,有三个从节点

SELECT HOST FROM information_schema.processlist WHERE COMMAND = 'Binlog Dump';

这个查询语句会返回当前连接到主服务器的从服务器的IP地址。COMMAND列的值为Binlog Dump表示该连接是从服务器与主服务器之间的复制连接。
在这里插入图片描述或者直接查看从节点server-id

show slave hosts;

在这里插入图片描述

验证主从复制

(1)在主节点上创建数据库shop-sekcill
在这里插入图片描述
(2)导入sql运行文件,就是一些创建表的sql语句
在这里插入图片描述
(3)从节点查看数据库,sql语句执行成功,说明主从同步完成。
在这里插入图片描述

BinLog日志

MySQL的binlog是一种二进制日志文件,用于记录数据库中的所有更改操作,如插入、更新、删除等。binlog是MySQL的一个重要组件,它在以下场景中发挥作用:

  • 主从复制:binlog是MySQL主从复制的基础。在主从复制中,主服务器将binlog中的事务发送给从服务器,从服务器根据接收到的事务重放binlog,以保持数据的一致性。
  • 数据恢复:binlog可以用于数据恢复。当数据库发生故障或需要回滚到某个时间点时,可以使用binlog中的事务来恢复数据。

三种格式

MySQL的binlog有三种格式:STATEMENT格式、ROW格式和MIXED格式。

  1. STATEMENT格式:STATEMENT格式记录了每个更改操作的SQL语句。当从服务器需要重放binlog时,它会执行这些SQL语句以恢复数据。STATEMENT格式的优点是它占用的存储空间较小,因为它只需要记录SQL语句。然而,STATEMENT格式的缺点是它可能会导致从服务器和主服务器之间的数据不一致,因为某些SQL语句可能在从服务器上执行时产生不同的结果。
  2. ROW格式:ROW格式记录了每个更改操作的数据行。当从服务器需要重放binlog时,它会执行这些数据行的更改操作以恢复数据。ROW格式的优点是它可以确保从服务器和主服务器之间的数据一致性,因为它记录了每个更改操作的具体数据。然而,ROW格式的缺点是它占用的存储空间较大,因为它需要记录每个更改操作的数据行。
  3. MIXED格式:MIXED格式是STATEMENT格式和ROW格式的混合。MySQL会根据每个更改操作的具体情况选择使用STATEMENT格式或ROW格式。MIXED格式的优点是它既可以确保数据的一致性,又可以节省存储空间。然而,MIXED格式的缺点是可能会降低主从复制的性能。这是因为MySQL需要根据每个更改操作的具体情况选择使用STATEMENT格式或ROW格式,这会增加主服务器的计算负担。
  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值