mysql主从复制、读写分离

目录

主从复制

1、配置master服务器

2、配置slave服务器(可以是多台)

读写分离


主从复制

在MySQL主从复制中,有两个主要角色:

  1. 主服务器(Master):主服务器是负责处理写操作(INSERT、UPDATE、DELETE)的MySQL服务器。当在主服务器上执行写操作时,它会记录这些变更到二进制日志(Binary Log)中。

  2. 从服务器(Slave):从服务器是接收主服务器变更并将其应用于自身的MySQL服务器。从服务器连接到主服务器,通过读取主服务器的二进制日志文件(Binary Log)来获取主服务器上的变更,然后将这些变更应用到自己的数据库中。

基本原理如下:

  • 主服务器上的写操作会被记录到二进制日志(Binary Log)中。
  • 从服务器连接到主服务器,并请求从指定的二进制日志文件和位置(Log File Position)开始进行复制。
  • 主服务器将记录的变更发送给连接的从服务器。
  • 从服务器接收到变更后,应用这些变更到自己的数据库中。

1、配置master服务器

修改mysql配置文件

vim /etc/my.cnf

server-id = 1
log-bin=master-bin
binlog_format = MIXED
log-slave-updates=true
  1. server-id = 1

    • 这个参数指定了 MySQL 实例的唯一标识符,用来区分不同的服务器。
  2. log-bin = master-bin

    • 这个参数指定了二进制日志的文件名前缀。MySQL 会把写入主服务器的操作记录到这个二进制日志文件中。
    • log-bin 启用二进制日志功能,并设置了二进制日志的文件名前缀为 master-bin
  3. binlog_format = MIXED

    • 这个参数指定了二进制日志的格式。MIXED 格式允许 MySQL 根据具体的操作来选择合适的日志格式,可以是 STATEMENTROWMIXED
    • 不同的格式有不同的优势和应用场景,MIXED 是一种混合模式,根据具体的操作类型来选择合适的日志格式,提高复制的效率和灵活性。
  4. log-slave-updates = true

    • 这个参数用于控制从服务器是否记录复制事件到它自己的二进制日志中。
    • 当一个从服务器接收并应用主服务器的变更时,如果这个参数被设置为 true,该从服务器会将这些变更再次写入自己的二进制日志中,以便其他从服务器也可以从这个从服务器读取变更。

重启并登入mysql

授权从服务器并刷新

GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

查看主服务器信息

show master status;

  • File:显示当前正在使用的二进制日志文件的名称。在主服务器上记录的所有更新操作都会被写入这个文件。

  • Position:指定了当前二进制日志文件中正在被写入的位置。从服务器会从这个位置开始读取主服务器的二进制日志并进行复制。

2、配置slave服务器(可以是多台)

server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery = 1
  1. server-id = 2

    • 这个参数指定了 MySQL 从服务器的唯一标识符,用来区分不同的服务器。
  2. relay-log = relay-log-bin

    • 这个参数指定了从服务器的中继日志(Relay Log)的文件名前缀。中继日志是用来存储从主服务器复制过来的二进制日志事件的。
    • 当从服务器接收到主服务器的二进制日志事件时,这些事件会被写入中继日志中,然后从服务器会读取这些中继日志来应用到自己的数据库中。
  3. relay-log-index = slave-relay-bin.index

    • 这个参数指定了从服务器的中继日志索引文件的名称。中继日志索引文件用于记录中继日志文件的信息,比如文件名和文件的起始位置。
    • 这个索引文件是用来维护从服务器中继日志的文件列表的。
  4. relay_log_recovery = 1

    • 这个参数用于在从服务器重新启动时自动恢复中继日志。
    • 当从服务器重新启动时,如果设置了这个参数为 1,MySQL 会自动查找并恢复中继日志,避免丢失复制过程中未应用的主服务器变更。

重启后登入mysql

CHANGE master to master_host='192.168.1.22',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=602;
  • master_host='192.168.1.22':指定了主服务器的主机名或 IP 地址,从服务器将连接到这个地址获取主服务器的二进制日志。

  • master_user='myslave':指定了从服务器连接到主服务器时使用的用户名。这个用户名必须在主服务器上已经创建,并且具有复制的权限。

  • master_password='123456':指定了从服务器连接到主服务器时使用的密码。这个密码必须和指定的用户名对应,用于进行安全的连接认证。

  • master_log_file='master-bin.000001':指定了从哪个二进制日志文件开始复制数据。这个参数对应主服务器上的二进制日志文件名。

  • master_log_pos=602:指定了从哪个二进制日志文件的哪个位置开始复制数据。这个参数对应主服务器上的二进制日志位置。

当你在从服务器上执行这个命令后,从服务器会连接到指定的主服务器,并从 master-bin.000001 的位置 602 开始复制主服务器的数据变更。

启动同步并查看slave状态

start slave;
show slave status\G;

  1. Slave_IO_Running: Yes

    • 这个状态表示从服务器的 I/O 线程(IO Thread)是否正在运行。I/O 线程负责从主服务器读取二进制日志事件,并写入到从服务器的中继日志中。
    • 当状态为 Yes 时,表示 I/O 线程正在正常运行,从主服务器读取数据成功。
  2. Slave_SQL_Running: Yes

    • 这个状态表示从服务器的 SQL 线程(SQL Thread)是否正在运行。SQL 线程负责从中继日志中读取二进制日志事件,并在从服务器上执行这些事件,将主服务器的写操作应用到从服务器的数据库中。
    • 当状态为 Yes 时,表示 SQL 线程正在正常运行,成功地将主服务器的写操作应用到从服务器的数据库中。

这两个状态都是在从服务器上执行 SHOW SLAVE STATUS; 命令时显示的重要指标,用于监控主从复制的运行状态。当这两个状态都为 Yes 时,表示主从复制正在正常运行。如果其中一个状态为 No,则表示相应的线程出现了问题,需要进一步检查和解决。

读写分离

使用amoeba实现读写分离

编辑amoeba.xml配置文件

编辑dbServers.xml配置文件

启动amoeba

在另一台机器上通过amoeba代理访问mysql

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值