MySQL 主从复制

MySQL主从复制是一种数据复制技术,用于将一个MySQL数据库的数据实时复制到其他MySQL数据库,通常一个作为主数据库(master),其他作为从数据库(slave)

基本工作原理:

  1. 主数据库记录所有的数据变更操作,并将这些变更以binlog(二进制日志)的形式保存.
  2. 从数据库连接到主数据库,并开始读取主数据库的binlog,实时复制其中的数据变更操作。
  3. 从数据库将接收到的数据变更操作应用到自己的数据集上,保持与主数据库的数据一致性。
  4. 主数据库在每次的数据变更操作后会将binlog信息发送给从数据库,从数据库记录并维护一个执行位置,以确保下次读取binlog时能够从正确的位置开始。
  5. 如果主数据库出现故障,从数据库可以提升为新的主数据库,从而保证系统的高可用性。

详细步骤:

1 、 MySQL 将数据变化记录到二进制日志中;
2 、 Slave 将 MySQL 的二进制日志拷贝到 Slave 的中继日志中;
3 、 Slave 将中继日志中的事件在做一次,将数据变化,反应到自身( Slave )的数据库
详细步骤:
1 、从库通过手工执行 change master to 语句连接主库,提供了连接的用户一切条件( user
password 、 port 、 ip ),并且让从库知道,二进制日志的起点位置( file 名 position 号); start slave
2 、从库的 IO 线程和主库的 dump 线程建立连接。
3 、从库根据 change master to 语句提供的 file 名和 position 号, IO 线程向主库发起 binlog 的请求。
4 、主库 dump 线程根据从库的请求,将本地 binlog 以 events 的方式发给从库 IO 线程。
5 、从库 IO 线程接收 binlog events ,并存放到本地 relay-log 中,传送过来的信息,会记录到
master.info
6 、从库 SQL 线程应用 relay-log ,并且把应用过的记录到 relay-log.info 中,默认情况下,已经应用过的 relay 会自动被清理 purge

主从复制的优势:

  1. 数据备份与恢复:通过主从复制,可以将主数据库的数据实时复制到从数据库,从而提供数据备份和灾难恢复的能力。
  2. 负载均衡:通过将读操作分发到多个从数据库,主从复制可以减轻主数据库的负载,并提高系统整体的读写性能。
  3. 提高数据可用性:当主数据库发生故障时,从数据库可以顶替主数据库的角色,从而确保系统仍然可用。

注意:

主从复制在数据同步过程中具有一定的延迟,从数据库的数据可能不是实时更新的,因此对于一些要求实时数据一致性的场景,可能需要考虑其他的数据复制技术。

基本配置:

环境准备
两台机器一主一从。 主库( MySQL Master ):

ip 为 192 .168.100.146 port 为 3306

从库( MySQL Slave ):

ip 为 192 .168.100.145 port 为 3306

sql 复制代码
#主库设置

[root@RHCE ~]# vim /etc/my.cnf

[mysqld]
log_bin = mysql-bin
server_id = 120

mysql> grant replication slave on *.* to 'rep'@'192.168.100.%' identified by
'123456';
mysql> show grants for 'rep'@'192.168.100.%';   # 给定从库权限

查看主库状态,即当前日志文件名和二进制日志偏移量
mysql> show master status;

mysqldump -uroot -p -A -B |gzip > /server/backup/mysql_bak.$(date +%F).sql.gz  #备份数据库

scp /server/backup/mysql_bak.2015-11-18.sql.gz 192.168.95.130:/server/backup/  #将主库的备份传到从库上 使两个数据库的数一致

#从库的配置
[root@RHCE ~]# vim /etc/my.cnf  #设置从库参数
[mysqld] 
server_id = 130   #从库和主库的server id  不能相同且唯一

cd /server/backup/                  #还原数据库
gzip -d mysql_bak.2015-11-18.sql.gz
mysql -uroot -p < mysql_bak.2015-11-18.sql

[root@RHCE ~]# mysql -uroot -p -e 'show databases;'   #查看数据库

mysql> change master to
MASTER_HOST='192.168.100.146',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.0000022',    #此选项一定要和主上的一致
MASTER_LOG_POS=194;     #此选项一定要和主上的一致

mysql> start slave;   #启动从库
mysql> show slave status;   #查看从库状态

Slave_IO_Running: Yes    #以下两个选项都为yes时 表示配置成功
Slave_SQL_Running: Yes

注意:

从主机上不能开启bin_log日志 否者无法创建

相关推荐
得物技术1 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
xiaok2 小时前
mysql中怎么创建一个可控权限数据库账号密码给到开发者
mysql
可涵不会debug5 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom5 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
玉衡子5 小时前
九、MySQL配置参数优化总结
java·mysql
麦兜*5 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰5 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*5 小时前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
-Xie-6 小时前
Mysql杂志(十六)——缓存池
数据库·mysql·缓存