MySQL主从复制

MySQL主从复制

MySQL主从复制是一种用于实现数据库高可用性和负载均衡的机制,它允许一个MySQL主服务器(主库)将数据同步到一个或多个从服务器(从库)。本文将详细介绍MySQL主从复制的工作原理、配置步骤以及实际应用中的代码样例,帮助读者深入理解并掌握这一技术。

MySQL主从复制_服务器

一、工作原理

MySQL主从复制是一个异步的复制过程,主要通过二进制日志(binary log)文件实现。以下是详细的复制流程:

  1. 主服务器记录二进制日志
    主服务器在执行数据修改操作(如INSERT、UPDATE、DELETE)时,会将这些变更以事件的形式记录到二进制日志中。
  2. 从服务器请求二进制日志
    从服务器连接到主服务器,请求从指定日志位置之后的事件。
  3. 主服务器发送二进制日志
    主服务器通过网络发送这些事件给从服务器。
  4. 从服务器记录中继日志
    从服务器将接收到的事件记录到自己的中继日志(relay log)中。
  5. 从服务器应用中继日志
    从服务器读取中继日志中的事件并应用到自己的数据库中,通过执行这些事件,从库的数据状态与主库保持一致。

二、配置步骤

在设置MySQL主从复制之前,需要确保以下条件:

  • 主服务器和从服务器都已安装MySQL,建议使用相同版本的MySQL,以避免兼容性问题。
  • 能够网络互通,并且防火墙设置允许相应的MySQL端口(默认3306)通信。

以下是具体的配置步骤:

1. 配置主库(Master)

编辑MySQL配置文件(通常为/etc/my.cnf/etc/mysql/my.cnf),添加以下内容:

 [mysqld]
 
 server-id=1  # 唯一的服务器ID
 
 log-bin=mysql-bin  # 开启二进制日志
 
 gtid_mode=ON  # 开启GTID模式
 
 enforce_gtid_consistency=ON

重启MySQL服务:

 sudo systemctl restart mysql

创建用于复制的用户并授权:

 CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
 
 GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
 
 FLUSH PRIVILEGES;

记录当前二进制日志位置:

sql复制代码
 SHOW MASTER STATUS;

返回结果示例:

 File: mysql-bin.000001
 
 Position: 12345
2. 配置从库(Slave)

编辑从服务器的MySQL配置文件,添加以下内容:

ini复制代码
 [mysqld]
 
 server-id=2  # 唯一的服务器ID,不同于主服务器
 
 log-bin=mysql-bin  # 从库也可以开启二进制日志,用于链式复制或备份
 
 gtid_mode=ON
 
 enforce_gtid_consistency=ON

重启MySQL服务:

 sudo systemctl restart mysql

设置主服务器信息:

 CHANGE MASTER TO
 
 MASTER_HOST='主服务器IP',
 
 MASTER_USER='replicator',
 
 MASTER_PASSWORD='your_password',
 
 MASTER_LOG_FILE='mysql-bin.000001',  # 从主服务器获取的日志文件
 
 MASTER_LOG_POS=12345;  # 从主服务器获取的位置

启动复制进程:

sql复制代码
 START SLAVE;

检查复制状态:

sql复制代码
 SHOW SLAVE STATUS\G;

关键字段:

  • Slave_IO_Running: 是否在运行
  • Slave_SQL_Running: 是否在运行
  • Last_Errno: 最近的错误号

确保Slave_IO_RunningSlave_SQL_Running都是Yes

三、代码样例

以下是一个详细的代码样例,展示了如何配置GTID模式的主从复制。

主库配置文件(/etc/my.cnf
 [client]
 
 port=3306
 
 socket=/tmp/mysql.sock
 
  
 
 [mysqld]
 
 port=3306
 
 socket=/tmp/mysql.sock
 
 datadir=/usr/local/mysql/data
 
 innodb_data_home_dir=/usr/local/mysql/data
 
 innodb_log_group_home_dir=/usr/local/mysql/data
 
 log-bin=/usr/local/mysql/binlog/mysql-bin
 
 log_bin_index=/usr/local/mysql/binlog/mysql-bin.index
 
 relay-log=/usr/local/mysql/binlog/mysql-relay-bin
 
 server-id=6666
 
 gtid_mode=ON
 
 enforce_gtid_consistency=ON
 
 binlog_format=ROW
 
 log-slave-updates=1
 
 master_info_repository=table
 
 relay_log_info_repository=table
 
 sync_binlog=100
 
 binlog_cache_size=1M
 
 expire_logs_days=30
 
 log_bin_trust_function_creators=1
从库配置文件(/etc/my.cnf
[client]
 
 port=3306
 
 socket=/tmp/mysql.sock
 
  
 
 [mysqld]
 
 port=3306
 
 socket=/tmp/mysql.sock
 
 datadir=/usr/local/mysql/data
 
 innodb_data_home_dir=/usr/local/mysql/data
 
 innodb_log_group_home_dir=/usr/local/mysql/data
 
 log-bin=/usr/local/mysql/binlog/mysql-bin
 
 log_bin_index=/usr/local/mysql/binlog/mysql-bin.index
 
 relay-log=/usr/local/mysql/binlog/mysql-relay-bin
 
 server-id=6667  # 注意server-id不同
 
 gtid_mode=ON
 
 enforce_gtid_consistency=ON
 
 binlog_format=ROW
 
 log-slave-updates=1
 
 master_info_repository=table
 
 relay_log_info_repository=table
 
 sync_binlog=100
 
 binlog_cache_size=1M
 
 expire_logs_days=30
 
 log_bin_trust_function_creators=1
在主库上创建复制用户并授权
 CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
 
 GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
 
 FLUSH PRIVILEGES;
在从库上设置主库信息并启动复制
 CHANGE MASTER TO
 
 MASTER_HOST='192.168.137.2',  # 主库IP地址
 
 MASTER_USER='replicator',
 
 MASTER_PASSWORD='your_password',
 
 MASTER_AUTO_POSITION=1;  # 使用GTID自动定位
 
  
 
 START SLAVE;
检查从库复制状态
SHOW SLAVE STATUS\G;

四、应用场景与优势

MySQL主从复制在现代数据库架构中扮演着关键角色,它通过数据同步和分布式部署,满足了大型系统对高性能、高可用性和数据安全的需求。具体应用场景和优势包括:

  1. 数据备份与容灾
  • 实时数据备份:主从复制可以将主服务器的数据实时复制到从服务器,形成数据的冗余备份。
  • 容灾恢复:当主服务器发生故障时,可以迅速从从服务器恢复数据,减少业务中断时间。
  1. 读写分离
  • 将写操作(INSERT、UPDATE、DELETE)集中在主服务器,读操作(SELECT)分散到从服务器,减轻主服务器的负载。
  • 提升并发性能:从服务器可以同时处理大量的读请求,提升系统的并发处理能力。
  1. 扩展性强
  • 可以根据业务需求增加从服务器数量,实现系统的水平扩展。
  1. 支持业务持续发展
  • 专用的从库用于数据分析和开发测试,助力业务优化和创新。
  1. 降低运营风险
  • 通过系统维护与升级策略,减少了对业务的影响,提高了系统的稳定性。
  1. 增强系统容错性
  • 多从库和备用主库的部署,提高了系统的容错能力,防止单点故障。
  1. 强化安全与合规
  • 严格的权限管理和数据保护措施,保障了用户信息的安全。

通过合理配置和使用主从复制,企业可以构建一个高效、稳定且可扩展的数据库系统,更好地支撑业务应用的运行和发展。

五、总结

MySQL主从复制是实现高可用性和负载均衡的重要手段。通过深入理解其工作原理和配置步骤,并结合实际的应用场景,可以有效地管理数据同步,提升数据库的可用性和性能。希望本文能帮助读者更好地掌握MySQL主从复制技术,并在实际项目中加以应用。

上一篇:Python实搞:导出浏览器书签并发送至邮箱