mySql主从复制原理

程序你得看得懂 2024-02-23 05:33:58

MySQL 主从复制是 MySQL 提供的一种数据备份方法,允许数据从一个 MySQL 数据库服务器(主服务器)复制到一个或多个 MySQL 数据库服务器(从服务器)。这是一种异步复制,从服务器不需要持续保持与主服务器的连接来接收更新的数据。这种架构可以实现数据备份、读写分离、故障转移等功能。

复制原理:二进制日志(Binary Log):主服务器上的每次数据更改(如 INSERT、UPDATE、DELETE、REPLACE 等)都会在二进制日志中记录下来。这些日志不仅包括数据更改本身,还包括 SQL 语句和所执行的时间等信息。IO 线程:在从服务器上,有一个 IO 线程负责连接主服务器,并请求主服务器上更新的二进制日志内容。一旦接收到新的日志内容,IO 线程会将这些内容写入从服务器上的中继日志(Relay Log)。SQL 线程:从服务器上还有一个 SQL 线程,该线程会读取中继日志中的事件,并执行这些事件,从而在从服务器上实现对主服务器数据的复制。文件与位置:为了保持主从服务器之间的同步,从服务器需要知道当前正在读取主服务器上二进制日志的哪个文件和位置。这通过在主服务器上记录二进制日志的文件名和位置,并在从服务器上记录中继日志的文件名和位置来实现。半同步复制:MySQL 还支持半同步复制模式,在这种模式下,主服务器在提交事务前需要确保至少一个从服务器已经接收到了该事务的日志。设置步骤(简化版):主服务器配置:修改 my.cnf 或 my.ini 文件,添加或修改以下设置:ini`[mysqld] server-id = 1 log_bin = mysql-bin binlog_do_db = your_database_name` * 重启 MySQL 服务。 * 创建复制用户并授权:

sqlGRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%' IDENTIFIED BY 'password';

执行 FLUSH TABLES WITH READ LOCK; 命令锁定当前数据库(可选,用于备份时)。

记录当前二进制日志的位置:SHOW MASTER STATUS;。

解锁数据库:UNLOCK TABLES;(如果之前锁定了的话)。

从服务器配置:

修改 my.cnf 或 my.ini 文件,添加或修改以下设置:

ini`[mysqld] server-id = 2 relay-log = mysql-relay-bin` * 重启 MySQL 服务。 * 设置主服务器信息:

sqlCHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

启动从服务器复制:START SLAVE;。

检查复制状态:

在从服务器上执行 SHOW SLAVE STATUS\G 查看复制状态。

注意事项:主从服务器的时间应该保持同步,可以使用 NTP 来实现。主服务器的数据更改在从服务器上可能是延迟的,因为复制是异步的。在设置复制之前,应确保从服务器的数据与主服务器一致,这通常通过备份和恢复主服务器上的数据来实现。复制设置和参数可能会因 MySQL 版本和特定需求而有所不同。

在生产环境中部署之前,请务必进行充分的测试,并确保您了解所有配置选项的含义和潜在影响。

此外,MySQL 主从复制是一个复杂的主题,涉及多个方面和细节。

最后,请注意数据的安全性和完整性。在进行任何与数据复制或备份相关的操作时,都应该小心谨慎,并确保有适当的备份和恢复策略以防万一。

0 阅读:0

程序你得看得懂

简介:感谢大家的关注