主从数据库架构

本文详细介绍了如何在Web应用系统中配置MySQL主从复制集群,包括主库和从库的配置步骤、验证同步的方法及常见问题解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一。尤其是在大规模系统中,数据库集群已经成为必备的配置之一。集群的好处主要有:查询负载、数据库复制备份等。

      MySQL数据库支持数据库的主从复制功能,因此在集群方面具有其独特的优势。众多国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载、数据库热备等功能。本人在实际的Web项目中也涉及到这一需求,在此将如何配置实现做个简单小结。

      1、实验环境

           主库:Ubuntu  IP:192.168.1.189

           从库:Ubuntu  IP:192.168.1.188

      2、主数据库配置

      A、修改配置文件/etc/mysql/my.cnf

      任何一台MySQL数据库服务器都可以配置为集群主服务器,打开MySQL的配置文件,在配置文件中加入下面两行:

      server-id = 1

      log-bin = binlog_repl

      binlog-do-db = test     //设置需要同步的数据库,如果需要设置多个,则加入多条这行语句。

      注:MySQL是通过二进制的日志文件来进行主从数据库复制的,所以必须开启日志功能,即上述的log-bin;另外在集群中,每台数据库服务器都需要指定一个唯一ID,这里我们指定为1。

      给主数据库授权一个可以进行复制的用户,执行如下命令:

      grant replication slave on *.* to 'slave'@'%' identified by '123';

      执行成功后,重启MySQL。

      B、锁定数据库并备份

      mysql>flush tables with read lock;

      备份数据库,传输到从数据库的数据目录下/var/lib/mysql;

      C、用show master status;命令查看主数据库状态

      +--------------------+----------+--------------+------------------+
       | File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +--------------------+----------+--------------+------------------+
       | binlog_repl.000001 |      106 | test         |                  |
      +--------------------+----------+--------------+------------------+

       记录下File和Position的值。

       D、主数据库解锁:unlock tables;

      3、从数据库配置

      A、修改配置文件/etc/mysql/my.cnf

       在mysqld下加入如下代码:

      server-id=2

      master-host=192.168.1.189

      master-user=slave

      master-password=123

      保存后,重启mysql服务。

      B、设置slave参数,启动

      在mysql下执行slave stop命令,停止slave服务;

      mysql> change master to

       -> master_host='192.168.1.189',

       -> master_user='slave',

       -> master_password='123',

       -> master_log_file='binlog_repl.000001',

       -> master_log_pos=106;

      注意:这里的master_log_file,master_log_pos的值要和master的值一致。否则会无法同步。

      执行slave start命令,启动服务。

      4、验证同步

      从数据库下运行show slave status \G;

      如果能看到:

       Slave_IO_Running: Yes

       Slave_SQL_Running: Yes

      说明已经成功启动了主从数据库的数据同步。

      在主数据库中执行插入语句 insert into user values('kangqing','1234567890');

      在从数据库中执行查询,可以看到主数据库插入的数据已经同步到从数据库表中。

      本人在配置的时候出现过这样的问题:

      Slave_IO_Running和Slave_SQL_Running的值都为Yes,但是无法和主数据库同步。在主数据库插入记录时,从数据库表无任何变化,执行show slave status时可以看到这样的错误:

     Last_SQL_Error: Error 'Table 'user' is read only' on query. Default database: 'test'. Query: 'insert into user values('gaga','5436897')'

     估计是权限问题。

     解决方法:修改/var/lib/mysql文件夹的权限,对mysql.mysql用户赋予读写权限即可。

<think>好的,我现在需要回答用户关于主从数据库架构的工作原理及应用场景的问题。首先,我需要回顾一下用户提供的引用内容,确保准确引用相关信息。 首先,主从数据库的核心概念是主从复制,主数据库处理写操作,从数据库复制主的数据并处理读操作。根据引用[1]和[3],主从复制允许创建结构相同的数据库,主库的变更会自动同步到从库,这样可以提高读写效率。同时,引用[4]提到主从架构适用于读多写少的场景,而双机热备更适合写多的情况。 接下来,我需要详细解释工作原理。根据引用[3]和[4],主从复制的过程大致分为几个步骤:主库记录变更日志(binlog),从库的IO线程读取这些日志并写入中继日志,然后SQL线程重放这些操作。引用[5]提到双主架构的情况,主库故障恢复后仍保持复制关系,确保数据一致性。 应用场景部分,根据引用[1]和[4],主从适用于读多写少、负载分离、高可用性和数据备份等场景。需要具体说明每个场景的优势,比如读写分离减轻主库压力,故障切换提升可用性。 最后,生成相关问题时要围绕主从架构的扩展、优化、同步延迟处理、主库宕机恢复以及优缺点比较。确保问题能够引导用户进一步深入学习。 需要检查引用是否正确,每个引用是否对应正确的部分。例如,引用[3]关于主从复制的过程,引用[5]关于双主架构。另外,注意使用正确的中文表达,避免技术术语错误,并保持段落清晰。</think>### 主从数据库架构的工作原理及应用场景 #### 一、主从数据库的概念 主从数据库是通过**主从复制(Replication)**技术实现的架构。主数据库(Master)负责处理写操作(如插入、更新、删除),从数据库(Slave)复制主库的数据变更并主要处理读操作(如查询)。这种架构通过读写分离提升数据库性能和可靠性[^1][^3]。 --- #### 二、主从复制的工作原理 1. **数据变更记录** 主库执行写操作时,会将变更记录写入**二进制日志(binlog)**中[^4]。 2. **日志同步** 从库的**I/O线程**连接到主库,读取binlog并写入从库的**中继日志(relay log)**。 3. **数据重放** 从库的**SQL线程**解析中继日志,按顺序执行SQL语句,使从库数据与主库保持一致[^4]。 4. **延迟与一致性** 同步方式分为: - **异步复制**(默认):主库不等待从库确认,性能高但可能丢数据。 - **半同步复制**:主库至少等待一个从库确认,平衡性能与一致性。 --- #### 三、应用场景 1. **读多写少** 从库分担读请求,适合高并发查询场景(如电商商品页)。 2. **负载分离** 主库专注写操作,从库处理复杂报表分析,避免资源竞争。 3. **高可用性** 主库故障时,从库可快速切换为主库(需配合哨兵或集群管理)[^5]。 4. **数据备份** 从库作为实时备份,减少主库备份时的性能影响[^1]。 --- #### 四、典型架构扩展 - **一主多从**:多个从库横向扩展读能力。 - **双主互备**:两个主库互为从库,适合写操作较多的场景(如双活数据中心)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值