mysql主从复制/主从备份搭建

本文详细介绍了MySQL主从复制的原因、原理以及在Linux服务器上配置主库和从库的过程,包括配置文件修改、权限设置、同步状态检查等,同时提到了常见错误1794的解决方案。
摘要由CSDN通过智能技术生成


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

一、主从复制

1)为什么使用主从复制、读写分离?

  • 主从复制、读写分离一般是一起使用的。
  • 目的很简单,就是为了提高数据库的并发性能。假设是单机,读写都在一台MySQL上面完成,性能肯定不高。如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能就能大大提高了。

2)主从复制原理

  • 1、当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中;
  • 2、salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程;
  • 3、当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点;
  • 4、I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log;
  • 5、SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作。

二、如何实现主从复制?

假设这里用三台Linux服务器,IP分别是101(Master),102(Slave),103(Slave),确保三台服务器能够相互访问。
我的mysql数据库版本是5.7

1)主库配置

1、修改配置文件

vim /etc/my.cnf
  1. 添加如下配置:
[mysqld]
#开启binlog
log-bin=mysql-bin # 启用bin log日志
server-id=101 #服务器唯一id
#需要同步的数据库,如果不配置则同步全部数据库
binlog-do-db=test_db
#是否只读,1 代表只读, 0 代表读写 (不加代表读写)
read-only=0
  1. 保存后,重启mysql服务器
systemctl status mysqld; # 查看mysql状态,显示active(running)说明正常
systemctl restart mysqld; # 重启mysql

2、登录mysql:

mysql -u <用户名> -p;
  1. 配置权限
//192.168.0.102是slave从机的IP
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.102' identified by 'root@1234';
//192.168.0.103是slave从机的IP
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.103' identified by 'root@1234';
//刷新系统权限表的配置
FLUSH PRIVILEGES;
  1. 查看当前binlog日志的信息
    执行命令:show master status\G
    < img>
  • file : 从哪个日志文件开始推送日志文件
  • position : 从哪个位置开始推送日志
  • binlog_ignore_db : 指定不需要同步的数据库

2)从库配置

1、修改配置文件

vim /etc/my.cnf
  1. 添加如下配置:
[mysqld]
server-id=102 #服务器唯一id
  1. 保存后,重启mysql服务器
systemctl restart mysqld; # 重启mysql

2、登录mysql:

mysql -u <用户名> -p;

1、设置主库配置
1)如果mysql是 8.0.22 之前的版本,执行如下SQL:

CHANGE MASTER TO MASTER_HOST='192.168.0.101', MASTER_USER='root', MASTER_PASSWORD='root@1234', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=18802;

2)如果mysql是 8.0.22 之后的版本,执行如下SQL:

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.0.101', SOURCE_USER='root', SOURCE_PASSWORD='root@1234', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=18802;

2、开启主从同步操作

#8.0.22之后: 
start replica ;
#8.0.22之前:
start slave ;

3、查看主从同步状态

#8.0.22之后: 
show replica status;
#8.0.22之前:
show slave status ;

< img>

  • 可以查看当前同步的偏移量是18802;
  • 以及同步状态Slave_IO_Running和Slave_SQL_Running都是YES。

3)配置过程中报错1794

  • Mysql配置主从报错:
    Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave...
  • 解决:我是因为/etc/my.cnf 没有加 [mysqldl],而且不能拼写错误。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值