mysql主从复制教程

1、介绍

1.1 是什么

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库

1.2 有什么用

  • 数据备份:通过主从复制,可以将主数据库的数据复制到一个或多个从数据库中,以实现数据备份和灾难恢复。当主数据库出现故障时,可以快速地将从数据库提升为主数据库,并继续提供服务。

  • 负载均衡:通过主从复制,可以将读操作分发到从数据库上,从而减轻主数据库的负载,提高系统的并发能力和性能。

  • 数据分析:通过主从复制,可以将主数据库中的数据复制到从数据库中进行分析,避免对主数据库产生影响。

  • 高可用性:通过主从复制,可以实现数据库的高可用性,当主数据库出现故障时,可以快速地将从数据库提升为主数据库,保证系统的持续可用性。

1.3 原理

1、主从同步的过程中,主库会将所有的操作事件记录在 binlog 中,
2、如果binlog 日志发生了变化,主库生成一个 binlog dump 线程向从库 I/O 线程传送 binlog
3、从库上的 I/O 线程将 binlog 复制到自己的 relay log 中
4、最终由从库中的 SQL 线程读取 relay log 中的事件重放到从库上

mysql主从复制教程_第1张图片

1.4 同步策略

下面是几种常见的MySQL主从同步策略:

  • 异步复制:默认同步方式,客户端在向服务端发送请求后,master 处理完之后,直接返回客户端结果,接着在将对应的 log 信息发送给 slave 节点。主库不会等待从库的确认,因此效率较高。但在主库故障时可能会丢失一部分数据。

  • 半同步复制:master 处理完自身操作,将对应的 binary log 发送给从服务器,从服务器通过 io thread 写入到 relay log 中,然后将结果返回给 master,master 在收到 salve 的响应之后在返回给客户端。这样可以减少数据丢失的可能性,但会增加主库的延迟。

  • 同步复制:主库将变更写入二进制日志后,等待所有从库确认已收到并应用了这些变更,主库才会认为事务提交成功。这样可以确保所有从库与主库的数据完全一致,但会显著增加主库的延迟,并且如果有任何一个从库出现故障或网络延迟,整个系统的性能都会受到影响。

  • 并行复制:在MySQL 5.6及以后的版本中引入了并行复制的功能,可以通过多线程并发地将变更发送给多个从库,从而提高复制性能。

选择适合的主从同步策略需要根据具体的业务需求和系统性能来进行权衡。异步复制适用于对数据一致性要求不高,但对性能要求较高的场景;半同步复制适用于对数据一致性和性能都有一定要求的场景;同步复制适用于对数据一致性要求非常高的场景,但会带来较大的延迟。并行复制可以在高负载情况下提升复制性能。

mysql主从复制教程_第2张图片

2、部署

1、将主库数据导入从库

1、备份主库
mysqldump -u'root' -p'123456' --all-databases --single-transaction --master-data=2 --flush-logs > /tmp/mysqlbackup/`date +%F_%H-%M-%S`-mysql-all.sql  

2、将数据拷贝到从库服务器
scp /tmp/2020-12-09_13-18-55-mysql-all.sql 192.168.137.101:/tmp/

3、将数据导入从库
mysql -uroot -p'123456' < /tmp/2020-12-09_13-18-55-mysql-all.sql 

2、主库配置

1、添加配置信息,并重启mysql
cat  >> /etc/my.cnf <<EOF 
#服务器 id,随意,但要唯一
server-id = 1  
#二进制文件存放路径
log-bin = mysql-bin 
#参数用于排除自带的数据库。  
binlog-ignore-db = mysql 
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
#二进制日志格式,建议使用ROW格式以获得更好的兼容性和可靠性。
binlog-format = ROW 
EOF

systemctl restart mysqld

2、配置权限账号
CREATE USER 'slave'@'%' IDENTIFIED BY 'Csdn@123';
#授权账号复制权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
#刷新配置
FLUSH PRIVILEGES;


3、获取当前二进制日志文件的名称和位置
SHOW MASTER STATUS;

3、从库配置

1、添加配置信息,并重启mysql
cat >>/etc/my.cnf <<EOF
server-id = 2
#不同步相关的库
replicate-ignore-db = mysql 
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema

EOF

systemctl restart mysqld


2、配置主库关系
mysql>change master to master_host='192.168.137.100',master_user='slave',master_password='Csdn@123',master_log_file='localhost-bin.000002',master_log_pos=154;

参数解释:
MASTER_HOST : 设置要连接的主服务器的ip地址     
MASTER_USER : 设置要连接的主服务器的用户名     
MASTER_PASSWORD : 设置要连接的主服务器的密码    
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第5步得到的信息  
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第5步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)

3、开启同步
start slave;

4、查看启动状态 
mysql>show slave status\G;

下面两项必须都是yes才表示配置成功,否则必须stop slave 检查配置修改正确后再次start slave ,直到都是yes为止

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