MYSQL主从同步实战
MYSQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。 在实际项目中,两台分布于异地的主机上安装有MYSQL数据库,两台服务器互为主备,客户要求当其中一台机器出现故障时,另外一台能够接管服务器上的应用,这就需要两台数据库的数据要实时保持一致,在这里使用MYSQL的同步功能实现双机的同步复制。 ### MySQL 主从同步实战 #### 一、MySQL主从复制简介 MySQL的主从复制机制是一种数据冗余和高可用性的解决方案,通过该机制可以在一台或多台从服务器上复制主服务器的数据更新。这种方式通常用于备份、负载均衡以及提高数据可用性。 在MySQL主从复制的过程中,一个服务器扮演主服务器的角色,而其他一个或多个服务器则作为从服务器。主服务器会记录所有的数据更改操作,并将这些更改记录到二进制日志文件中。从服务器则会持续地从主服务器获取这些更改记录,并在本地应用这些更改,从而确保从服务器上的数据与主服务器保持一致。 #### 二、主从复制的工作原理 1. **二进制日志(Binary Logging)**:所有在主服务器上的更改都会被记录到二进制日志文件中,包括插入、更新、删除等操作。 2. **日志文件索引**:主服务器维护着一个索引文件来追踪二进制日志文件的循环。 3. **从服务器请求**:从服务器连接到主服务器后,会告知主服务器上次成功读取的二进制日志位置。 4. **日志传输与应用**:主服务器将从上次位置之后的所有更新发送给从服务器,从服务器接收到这些更新后,会在本地应用这些更新以保持数据的一致性。 #### 三、实际应用场景 在实际项目中,为了保证服务的高可用性和数据的一致性,通常会在两台或更多台服务器之间实施主从复制。例如,两台服务器ServA和ServB分布在不同的地理位置,它们互相作为主备服务器。当其中一台服务器(比如ServA)发生故障时,另一台服务器(ServB)能够立即接管其服务,确保业务不中断。 #### 四、配置步骤详解 下面我们将详细介绍如何在ServA和ServB之间配置MySQL的主从同步: ##### 1、数据库同步设置 - **操作系统环境**:Red Hat Enterprise Linux 5 - **MySQL版本**:5.0.22 - **前提条件**:MySQL数据库已正常启动 **主机地址**: - ServA:10.240.136.9 - ServB:10.240.136.149 **1.1 配置同步账号** 在ServA上创建一个ServB可以访问的账号: ```sql Mysql> GRANT ALL PRIVILEGES ON *.* TO tongbu@'10.240.136.149' IDENTIFIED BY '123456'; ``` 在ServB上创建一个ServA可以访问的账号: ```sql Mysql> GRANT ALL PRIVILEGES ON *.* TO tongbu@'10.240.136.9' IDENTIFIED BY '123456'; ``` **1.2 配置数据库参数** - **ServA的my.cnf配置**: - 增加如下配置项: ```ini [mysqld] default-character-set=utf8 log-bin=mysql-bin relay-log=relay-bin relay-log-index=relay-bin-index server-id=1 master-host=10.240.136.149 master-user=tongbu master-password=123456 master-port=3306 master-connect-retry=30 binlog-do-db=umsdb replicate-do-db=umsdb replicate-ignore-table=umsdb.boco_tb_menu replicate-ignore-table=umsdb.boco_tb_connect_log replicate-ignore-table=umsdb.boco_tb_data_stat replicate-ignore-table=umsdb.boco_tb_log_record replicate-ignore-table=umsdb.boco_tb_workorder_record ``` - **ServB的my.cnf配置**: - 增加如下配置项: ```ini [mysqld] default-character-set=utf8 log-bin=mysql-bin relay-log=relay-bin relay-log-index=relay-bin-index server-id=2 master-host=10.240.136.9 master-user=tongbu master-password=123456 master-port=3306 master-connect-retry=30 binlog-do-db=umsdb replicate-do-db=umsdb replicate-ignore-table=umsdb.boco_tb_menu replicate-ignore-table=umsdb.boco_tb_connect_log replicate-ignore-table=umsdb.boco_tb_data_stat replicate-ignore-table=umsdb.boco_tb_log_record replicate-ignore-table=umsdb.boco_tb_workorder_record ``` **1.3 手工执行数据库同步** 接下来,需要手动启动复制过程。具体步骤包括: - 在ServA上查看当前的二进制日志位置: ```sql Mysql> SHOW MASTER STATUS; ``` - 使用得到的信息,在ServB上启动复制进程: ```sql Mysql> CHANGE MASTER TO MASTER_HOST='10.240.136.9', MASTER_USER='tongbu', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; Mysql> START SLAVE; ``` 以上步骤完成后,ServA和ServB之间的MySQL主从同步就配置完成了。ServB将定期检查ServA的日志更新,并自动同步数据,确保数据的一致性。 #### 五、注意事项与优化建议 1. **性能影响**:在配置主从复制时,需要注意监控主服务器的性能,避免复制过程对主服务器造成过大的性能负担。 2. **日志空间管理**:定期清理不再需要的二进制日志文件,以释放磁盘空间。 3. **网络延迟**:考虑到ServA和ServB位于不同地理位置,需要注意网络延迟可能会对复制效率产生影响。 4. **数据一致性**:在某些特殊情况下,如网络分区等,可能会影响到数据的一致性,需要采取额外措施来确保数据的完整性和一致性。 通过以上步骤,我们不仅实现了ServA和ServB之间的MySQL主从同步,还确保了系统在面对故障时具备更高的可靠性和可用性。
剩余8页未读,继续阅读
- ^_^o(∩_∩)o哈哈2014-01-01可以说写的非常的不详细,有好多步骤没有写出来,,害我找了半天
- fengrui20082012-06-17这个教程对我的帮助非常大啊,弄mysql主从我就是从这个教程开始的
- AiyunBreak2013-05-04可以说写的非常的不详细 有好多步骤没有写出来 害我找了半天
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和WebSocket的毕业设计选题系统.zip
- (源码)基于C++的机器人与船舶管理系统.zip
- (源码)基于WPF和Entity Framework Core的智能货架管理系统.zip
- SAP Note 532932 FAQ Valuation logic with active material ledger
- (源码)基于Spring Boot和Redis的秒杀系统.zip
- (源码)基于C#的计算器系统.zip
- (源码)基于ESP32和ThingSpeak的牛舍环境监测系统.zip
- 西南科技大学数据库实验三
- Web开发全栈入门与进阶指南:从前端到后端
- TSP问题的概述及其在多领域的应用