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日志 否者无法创建

相关推荐
Edingbrugh.南空17 分钟前
Flink MySQL CDC 环境配置与验证
mysql·adb·flink
BD_Marathon1 小时前
Ubuntu:Mysql服务器
服务器·mysql·ubuntu
想要入门的程序猿1 小时前
Qt写入excel
数据库·qt·excel
Q_970956391 小时前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js
Wyc724092 小时前
Maven
java·数据库·maven
程序猿小D2 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
羊小猪~~2 小时前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
背太阳的牧羊人2 小时前
Neo4j 的向量搜索(Neo4jVector)和常见的向量数据库(比如 Milvus、Qdrant)之间的区别与联系
数据库·neo4j·milvus
liulun3 小时前
在浏览器中使用SQLite(官方sqlite3.wasm)
数据库·sqlite·wasm
叁沐3 小时前
MySQL 05 深入浅出索引(下)
mysql