Mysql 数据库主从复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。

查询两台虚拟机的IP

主虚拟机IP

从虚拟机IP服务

修改对应的配置文件

查询对应配置文件的命令

find / -name my.cnf

编辑对应的配置文件

主 my.cnf (部分配置)

[mysqld]
########basic settings########
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
port = 3306
socket  = /home/mysql/mysql8/mysql.sock
datadir = /home/mysql/mysql8
default_authentication_plugin=mysql_native_password
binlog_do_db = stms
  1. server-id = 1
    • server-id是一个必需的配置项,用于在MySQL复制环境中唯一标识每个服务器实例。在主从复制设置中,每个服务器必须有一个唯一的server-id。值1通常用于主服务器。
  2. log_bin = /var/log/mysql/mysql-bin.log

    • log_bin指定二进制日志文件的位置和名称。二进制日志记录了所有对数据库执行的更改操作,这对于复制和恢复操作至关重要。/var/log/mysql/mysql-bin.log是日志文件的路径和名称,可以根据实际需要进行调整。

      从 my.cnf 配置

      server_id = 2
      gtid_mode=ON
      enforce_gtid_consistency=ON
      
      在MySQL的配置文件中,[mysqld]部分包含了MySQL服务器实例的配置指令。以下是对您提供的配置指令的解释:
  3. server-id = 2

    • server-id是一个必需的配置项,用于在MySQL复制环境中唯一标识每个服务器实例。在主从复制设置中,每个服务器必须有一个唯一的server-id。值2通常用于从服务器。
  4. relay_log = /var/log/mysql/mysql-relay-bin.log
    • relay_log指定中继日志文件的位置和名称。中继日志用于存储从主服务器接收到的二进制日志事件,然后由从服务器的SQL线程读取并执行这些事件。/var/log/mysql/mysql-relay-bin.log是中继日志文件的路径和名称,可以根据实际需要进行调整。
  5. read_only = 1
    • read_only是一个可选的配置项,当设置为1时,它将使MySQL服务器进入只读模式。在这种模式下,除了具有SUPER权限的用户外,所有客户端的写操作(如INSERT, UPDATE, DELETE)都将被拒绝。这通常用于从服务器,以防止数据被意外修改,确保从服务器的数据与主服务器保持一致。

      重启MYSQL服务

      service mysqld stop
      service mysqld start
      

      主从均重启

      主服务器操作

  • 登录到MySQL控制台:

    mysql -u root -p
    
  • 创建复制用户并授权:

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    ALTER USER 'replica_user'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    FLUSH PRIVILEGES;
    
  • 记录当前的二进制日志文件名和位置:

    SHOW MASTER STATUS;
    

    进行数据库锁表

    FLUSH TABLES WITH READ LOCK;
    

    进行全量备份

    mysqldump -u aisino_app -p --databases stms  --master-data > backup.sql
    

    将备份文件传输到从服务器:

    scp backup.sql user@slave_ip:/path/to/backup.sql
    

    scp backup.sql user@slave_ip:/path/to/backup.sql 是一条命令,用于在Linux或Unix系统中通过SSH(Secure Shell)安全地复制文件。这条命令的具体组成部分如下:

  • scp: 是Secure Copy的缩写,是一个命令行工具,用于在本地系统和远程系统之间或者两个远程系统之间安全地复制文件。

  • backup.sql: 这是要复制的源文件,位于当前执行scp命令的本地系统上。
  • user@slave_ip: user是远程服务器(从服务器)上的用户名,slave_ip是远程服务器的IP地址。这个部分指定了文件要复制到的目标服务器。
  • :/path/to/backup.sql: 这是文件在远程服务器上的目标路径和文件名。:表示紧随其后的路径是远程服务器上的路径。

整条命令的含义是:将本地文件backup.sql通过SSH安全地复制到远程服务器slave_ip上,使用用户user进行认证,并将文件放置在远程服务器上的/path/to/backup.sql路径下。
在执行此命令时,系统会提示输入远程用户user的密码(除非设置了无密码SSH登录),以完成文件的复制过程。

从服务器操作

从数据库恢复数据

mysql -u root -p < /path/to/backup.sql

配置从库复制

查看 server_id

SHOW VARIABLES LIKE 'server_id';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 0 |
+---------------+-------+
使用获取的主库二进制日志文件名和位置配置从库:

CHANGE REPLICATION SOURCE TO
  SOURCE_USER='replica_user',
  SOURCE_PASSWORD='123456',
  SOURCE_HOST='192.168.44.142',
  SOURCE_PORT=3306,
  SOURCE_LOG_FILE='taxdb-bin.000045',
  SOURCE_LOG_POS=245;

请确保在执行此命令之前,你已经创建了用于复制的用户 replica_user,并且该用户在主服务器(192.168.44.142)上具有适当的权限。
执行完上述命令后,你可以使用以下命令启动复制:

START REPLICA;

通过执行 SHOW REPLICA STATUS\G; 来检查复制状态,确保 Replica_IO_Running 和 Replica_SQL_Running 都是 Yes。

mysql> SHOW REPLICA STATUS\G;
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 192.168.44.142
                  Source_User: replica_user
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: taxdb-bin.000045
          Read_Source_Log_Pos: 245
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 326
        Relay_Source_Log_File: taxdb-bin.000045
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              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_Source_Log_Pos: 245
              Relay_Log_Space: 540
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File: 
           Source_SSL_CA_Path: 
              Source_SSL_Cert: 
            Source_SSL_Cipher: 
               Source_SSL_Key: 
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Source_Server_Id: 1
                  Source_UUID: 200dbdd5-dc52-11ee-8954-000c29f27890
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 86400
                  Source_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Source_SSL_Crl: 
           Source_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 200dbdd5-dc52-11ee-8954-000c29f27890:1-28913
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Source_TLS_Version: 
       Source_public_key_path: 
        Get_Source_public_key: 0
            Network_Namespace:

解除主数据只读

UNLOCK TABLES;
FLUSH PRIVILEGES;

税金3.0更新用户查看效果

从库

税金新增用户后,从库自动同步

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
7天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
20 1
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
82 1
|
18天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
60 2
|
21天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
81 4
|
3天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
29 0
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
188 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
140 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
139 0
MySQL---数据库从入门走向大神系列(五)-存储过程