MySQL 主从复制

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

基本工作原理:

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

 详细步骤:

MySQL 主从复制_第1张图片

 

 

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 ]

 

#主库设置

[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


MySQL 主从复制_第2张图片

 

 注意:

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

 

你可能感兴趣的:(mysql,数据库)