mysql主从同步最佳详细步骤

一、原理

  MYSQL主从复制的原理是主服务器数据库的每次操作都会记录在mysql下的data目录中二进制文件mysql-bin.xxx里,从服务器的I/O线程使用专用账号登录到主服务器中读取该二进制文件,并将文件内容写入到从服务器的relay-log日志文件中,然后从服务器的SQL线程会根据relay-log日志中的内容执行SQL语句。

1、binlog模式

SBR模式

  SBR(statement-based replication)只执行SQl语句,SBR的日志量取决于SQl的情况,SBR不会记录每一行的变化,节约了binlog日志量,减少IO,提高性能。

  • SBR缺点
      1、 不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候,
      2、调用具有不确定因素的UDF时复制也可能出问题
      3、使用以下函数语句无法复制:
    * LOAD_FILE()
    * UUID()
    * USER()
    * FOUND_ROWS()
    * SYSDATE()
      4、执行INSERT … SELECT 会产生比RBR更多的行级锁
      5、复制需要进行全表扫描的UPDATE时,需要比RBR请求更多的行级锁
      6、对于有AUTO_INCREMENT字段的INNODB表,INSERT语句会阻塞其他的INSERT.
      7、对于一些复杂的语句,在服务器上的耗资情况会更严重,而RBR模式下,只会对那个发生变化的记录产生影响
      8、从节点mysql数据库的数据表必须和主服务器一致才可以,否则容易导致同步出错。

    RBR模式(ROW-BASED REPLICATION)

    • 优点
      • 任何情况都可以被复制,对于数据来说是最安全可靠的,和大多数数据库系统复制技术一样
      • 从服务器上的表如果有主键,复制会快很多
      • 复制一下语句时行级锁少
        • INSERT … SELECT
        • 包含AUTO_INCREMENT字段的INSERT日志
        • 没有附带条件或者没有修改很多记录的UPDATE、DELETE语句
      • 执行INSERT、UPDATE、DELETE语句时锁更少
      • 服从器上采用多线程来执行复制称为可能
    • RBR缺点
      • binlog日志大了很多
      • 复杂的回滚时binlog中包含大量的数据
      • 主服务器上执行UPDATE语句时,所有发生变化的记录都会写入到binlog中,而SBR只会写一次,这会导致频繁发生binlog并发写问题
      • UDF产生的大量BLOB值会导致复制变慢
      • 无法从binlog中看到都复制写了什么语句
      • 当在非事物表上执行一段堆积的SQL语句时,最好采用SBR模式,否则容易导致主从服务器的数据不一致情况发生

2、作用

  • 数据分布
  • 负载均衡
  • 备份
  • 高可用性和容错行

3、主从模式

本案例讲述为一主一从

  • 一主一从
  • 一主多从
  • 多主一从

二、主从配置

1、master节点

配置文件

  1、修改mysql的配置文件。
vim /etc/my.cnf

log-bin = mysql-bin
server_id = 1
binlog-do-db = hain_res #如果有多个库同步,重复设置此参数
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 1
expire_logs_days = 7
log_bin_trust_function_creators = 1

2、重启mysql
  重启mysql使配置生效。

systemctl restart mysql

创建用户

1、创建同步专用账号
%:代表所有的地址都可以使用此用户进行访问,建议换成指定的从库的地址。

GRANT REPLICATION SLAVE ON *.* to 'mysyxs'@'%' identified by '****'; 

2、刷新

flush privileges;

查看id和文件名称

1、登录mysql

mysql -h127.0.0.1 -uroot -p****

2、复制id和日志文件名称

  show master status;

2、slave节点

slave配置

  1、开启relaylog
修改/etc/my.cnf配置文件

vim /etc/my.cnf
relay-log = /data/3307/relay-bin
server-id = 2

2、重启mysql服务

systemctl resatrt mysqld

设置replication

1、登录mysql

mysql -h127.0.0.1 -uroot -p****

2、设置replication

mysql> CHANGE MASTER TO MASTER_HOST='127.0.0.1',  
    -> MASTER_PORT=3306,
    -> MASTER_USER='mysqlxs',
    -> MASTER_PASSWORD='*****',
    -> MASTER_LOG_FILE='mysql-bin.0003',根据master的日志文件名进行修改
    -> MASTER_LOG_POS=337;#根据master的id进行修改

3、启动slave

mysql> start slave;

4、查看slave

mysql> show slave status\G

三、主从同步测试

1、在master节点创建表并插入数据(略)
2、在slave节点进行查看结果(略)

才华不溢,梦想依旧
唯心沉淀,遨游宇宙

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从同步是一种数据复制机制,用于将一个MySQL数据库实例中的数据自动复制到其他MySQL数据库实例,从而实现数据的备份、负载均衡和故障恢复等功能。 在主从同步中,一个MySQL实例被配置为主服务器(Master),而其他实例被配置为从服务器(Slave)。主服务器负责接收和处理客户端的写操作,然后将这些操作记录到二进制日志(Binary Log)。从服务器连接到主服务器,并通过读取主服务器的二进制日志来复制这些操作。从服务器将这些操作应用到自己的数据上,以保持与主服务器数据的一致性。 配置MySQL主从同步需要进行以下步骤: 1. 确保主服务器和从服务器之间可以互相通信。 2. 在主服务器上开启二进制日志功能,并配置二进制日志文件的位置和名称。 3. 在主服务器上创建一个用于复制的用户,并为该用户授予复制权限。 4. 在从服务器上配置复制参数,包括指定主服务器的IP地址、连接用户名和密码等。 5. 启动从服务器,并连接到主服务器进行复制。 6. 监控主从同步过程,确保数据的一致性和同步性。 需要注意的是,在配置主从同步时,需要考虑网络延迟、带宽和硬件性能等因素,以确保同步过程的效率和稳定性。另外,主从同步只能复制数据更改操作(如插入、更、删除),而不能复制结构变更操作(如创建表、修改表结构)。如果需要同步结构变更,可以使用其他工具或方法来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值