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

相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql