MySQL的主从复制涉及至少两个MySQL实例:一个主库(Master)和一个或多个从库(Slave)。主库负责处理事务并记录所有变更到二进制日志(binary log)中,而从库通过读取并应用这些变更来保持与主库的数据一致。
以下是一个高级步骤指南,用以开启主从复制:
主库配置
-
在主库上,编辑MySQL配置文件(通常是
my.cnf
或my.ini
),通常位于/etc/mysql/
、/etc/
或/etc/mysql/mysql.conf.d/
目录下。[mysqld] server-id = 1 log_bin = mysql-bin binlog_do_db = your_database_name # 可选,如果你只希望复制特定的数据库
-
重启MySQL服务以应用更改。
sudo service mysql restart
-
登录到MySQL并创建一个具有复制权限的用户。
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;
-
记录当前的二进制日志位置。
SHOW MASTER STATUS;
输出会显示当前的二进制文件名和位置,例如:
mysql-bin.000001
和位置107
. 你需要这些信息来配置从库。
从库配置
-
在从库上,编辑MySQL配置文件。
[mysqld] server-id = 2 log_bin =mysql-bin # 可选,如果打算设置从库为其他从库的主库 binlog_do_db = your_database_name # 应与主库保持一致,如果使用了这一选项 read_only = 1 # 确保从库为只读模式
-
重启MySQL服务。
sudo service mysql restart
-
登录到MySQL并设置复制。
CHANGE MASTER TOMASTER_HOST = 'master_ip_address',MASTER_USER = 'replicator',MASTER_PASSWORD = 'password',MASTER_LOG_FILE = 'recorded_log_file_name',MASTER_LOG_POS = recorded_log_position;
使用前面在主库上记录的文件名及位置设置
MASTER_LOG_FILE
和MASTER_LOG_POS
。 -
启动复制进程。
START SLAVE;
-
检查从库复制状态。
SHOW SLAVE STATUS\G
确认
Slave_IO_Running
和Slave_SQL_Running
两项都是Yes
。 -
错误处理
查看具体的错误信息
SELECT * FROM performance_schema.replication_applier_status_by_worker WHERE LAST_ERROR_NUMBER != 0;
跳过错误
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1; -- 跳过一个事务
START SLAVE;
这就完成了一个基本的MySQL主从复制配置。如果主库有多个库(databases)或特殊的复制需求,可能需要进行更详细的配置和准备工作。考虑复制过滤选项、数据一致性验证步骤,以及复制中断和延迟的管理。此外,在高版本的MySQL中,可能需要设置 binlog_format
(默认为 ROW
)。确保在配置主从复制之前,所有参与的MySQL服务器都是运行着相同版本的MySQL,以避免不兼容问题。