mysql-主从复制搭建

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql-主从复制搭建

主从复制-主从复制搭建

简述

Mysql搭建主从复制很简单,简述为如下步骤: 1.主机上备份数据库 2.从机上恢复数据库 3.主机创建一个授权复制权限的用户 4.从机 change master to

重要参数

  • 主(Master)

max_binlog_size = 2048M                 # 默认为1024M
binlog_format = ROW                     # 必须为ROW
transaction-isolation = READ-COMMITTED
expire_logs_days = 7                    # binlog保留多少天,看公司计划安排
server-id = 10                          # 必须和所有从机不一样,且从机之间也不一样
log_bin = bin.log                       # 开启binlog
binlog_cache_size = # binlog 缓存的大小,设置时要当心
sync_binlog = 1                         # 必须设置为1 
innodb_flush_log_at_trx_commit = 1      # 提交事物的时候刷新日志
innodb_support_xa = 1                   # 启用对两阶段提交的支持,8.0弃用此参数,设置默认启用,不允许关闭
# -------------------以下参数看业务需求--------------------------
binlog-do-db = # 需要复制的库
binlog-ignore-db = # 需要被忽略的库
  • 从(Slave)

log_slave_updates                     # 将SQL线程回放的数据写入到从机的binlog中去(用于级联复制)
server-id = 11                        # 必须在一个复制集群环境中全局唯一
log_bin = bin.log                     # 开启binlog
relay-log-recover = 1                 # I/O thread crash safe – IO线程安全
relay_log_info_repository = TABLE     # SQL thread crash safe – SQL线程安全
master_info_repository = TABLE
read_only = 1
slave_parallel_workers=16              #开启多个works,看机器支持
slave_parallel_type=LOGICAL_CLOCK     # 并行复制,5.7.2起支持
# -------------------以下参数看业务需求--------------------------
replicate-do-db = # 需要复制的库
replicate-ignore-db = # 需要忽略的库
replicate-do-table = # 需要复制的表
replicate-ignore-table = # 需要忽略的表

复制环境搭建

服务器信息

主:192.168.20.101 从:192.168.20.102

Master上创建一个复制用户

-- 主机上操作
create user 'rpl'@'%' identified by '123456';
grant replication slave on *.* to 'rpl'@'%';

从机上登录验证下连接是否正常

-- 从机上操作
mysql -h192.168.20.101 -urpl -p --测试连接是否正常

主从数据备份同步

主机操作
  • 备份主库信息
# 备份全库
mysqldump --single-transaction --master-data=1 -A > master.sql
  • 将备份传输文件到从机上去
scp /root/master.sql 192.168.20.102:/root
从库操作
  • 恢复主库传过来的备份
mysql -uroot -p < /root/master.sql
  • 查看 MASTER_LOG_FILE 与 MASTER_LOG_POS
head -30 /root/master.sql
# 或者在 master 上执行
show master status
log: bin.000003 和 Pos: 633 表明该备份开始时的 filename 和 postition
  • CHANGE MASTER
change master to mysql> change master to master_host='192.168.20.101',master_user='rpl',master_password='123456',master_port=3306,master_log_file='bin.000003',master_log_pos=633;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
  • 启动 slave
mysql> start slave;
  • 查看主从复制状态
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event        # IO 线程的状态
                  Master_Host: 192.168.20.101                          # Master 的地址
                  Master_User: rpl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: bin.000003                              # IO线程读取到的主机文件
          Read_Master_Log_Pos: 633                                     # IO线程读取文件中的位置
               Relay_Log_File: relay.000002
                Relay_Log_Pos: 314
        Relay_Master_Log_File: bin.000003                              # 从机SQL线程执行到的文件
             Slave_IO_Running: Yes                                     # io thread 状态
            Slave_SQL_Running: Yes                                     # sql thread 状态
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 633                                    # SQL线程执行到文件的位置
              Relay_Log_Space: 511
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0                                    # Slave 落后 Master 的秒数(不精准)
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0                                    # I/O 错误信息
                Last_IO_Error:
               Last_SQL_Errno: 0                                    # SQL 进程错误信息
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 10
                  Master_UUID: a7776f71-c8be-11e9-838f-0050563bb195
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set: a7776f71-c8be-11e9-838f-0050563bb195:1-3
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)
Slave_IO_RunningSlave_SQL_Running都显示为 Yes,说明复制是正常的。
  • Relay_Log

    • Relay_Log_FileRelay_Log_Pos是中继日志(Relay_Log)信息由于IO线程拉取数据的速度快于SQL线程回放数据的速度,所
    • Relay_Log可在两者之间起到一个缓冲的作用
    • Relay_Log的格式和binlog的格式是一样的,但是两者的内容是不一样的(不是和binlog一一对应的),可使用mysqlbinlog relay.000002 -vv查看
    • Relay_Log在SQL线程回放完成后,默认就会被删除,而binlog不会(由expire_logs_days控制)
    • Relay_Log可以通过设置relay_log_purge=0,使得 - - Relay_Log不被删除(MHA中不希望被Purge),需要通过外部的脚本进行删除
  • Seconds_Behind_Master Seconds_Behind_Master 字面意思为Slave落后Master的 秒数 ,但是实际上并不是十分准确。因为回放的SQL线程可能落后很多,比如新加了一个库需要追很多数据。 计算的方式为: Slave的SQL线程执行时刻的时间减去event产生时刻的时间。 可以使用Percona ToolKit中的pt-heartbeat来获得精准的延迟时间

验证主从

  • Master
# Master上创建数据库 aaa
mysql> create database aaa;
mysql> use aaa;
mysql> create table t(id int);
mysql> insert into t values(1),(2),(3);
  • Slave
mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| aaa                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use aaa;
Database changed

mysql> select * from t;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
1月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
122 1
|
26天前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
MySQL主从复制原理和使用
|
26天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
2月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
109 6
|
2月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
65 1
|
2月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
3月前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
64 0
|
3月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
68 2
|
3月前
|
SQL 关系型数据库 MySQL
在Linux中,mysql 如何减少主从复制延迟?
在Linux中,mysql 如何减少主从复制延迟?