MySQL主从复制是数据库高可用性和负载均衡的基础,允许一个主数据库(Master)将其数据同步到一个或多个从数据库(Slave)中。通过主从复制,可以将数据库的读取负载分摊到从库,提升系统的性能和可靠性。以下是详细的MySQL主从复制配置教程,帮助你搭建一个主从复制环境。
一、前提条件
MySQL版本:MySQL 5.6 或以上版本。
网络环境:确保主从服务器之间可以互相通信。
操作系统:Linux(如Ubuntu, CentOS)环境。
二、准备工作
主服务器:假设主服务器的IP地址为 192.168.1.100。
从服务器:假设从服务器的IP地址为 192.168.1.101。
三、主服务器配置
编辑MySQL配置文件
在主服务器上,找到并编辑MySQL配置文件 my.cnf(或 my.ini,具体路径根据操作系统有所不同)。
Ubuntu/Debian: /etc/mysql/mysql.conf.d/mysqld.cnf
CentOS/RHEL: /etc/my.cnf
打开文件,添加或修改以下配置:
iniCopy Code[mysqld]
server-id = 1 # 唯一的服务器ID(主服务器的ID)
log_bin = /var/log/mysql/mysql-bin.log # 启用二进制日志
binlog_do_db = testdb # 指定需要复制的数据库(可以根据需求选择)
重启MySQL服务
修改完配置文件后,重启MySQL服务以应用更改:
bashCopy Codesudo systemctl restart mysql # 或使用 service mysql restart
创建复制账号
登录到主服务器的MySQL数据库,创建一个用于复制的专用账号,并授予复制权限:
sqlCopy CodeCREATE USER 'replicator'@'%' IDENTIFIED BY 'replicator_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
这将创建一个名为 replicator 的账号,并授予 REPLICATION SLAVE 权限,允许从服务器连接并复制数据。
查看主服务器的二进制日志位置
继续在MySQL中执行以下命令,查看当前的二进制日志文件和位置。稍后在从服务器上配置时需要用到这些信息:
sqlCopy CodeSHOW MASTER STATUS;
记下 File 和 Position 字段的值,稍后需要在从服务器配置时使用。
四、从服务器配置
编辑从服务器的MySQL配置文件
同样,在从服务器上编辑MySQL的配置文件 my.cnf,修改以下内容:
iniCopy Code[mysqld]
server-id = 2 # 唯一的服务器ID(从服务器的ID)
请确保从服务器的 server-id 不与主服务器相同。
重启MySQL服务
配置完成后,重启MySQL服务:
bashCopy Codesudo systemctl restart mysql # 或使用 service mysql restart
配置从服务器进行复制
登录到从服务器的MySQL,执行以下命令进行复制配置:
sqlCopy CodeCHANGE MASTER TO
MASTER_HOST = '192.168.1.100', # 主服务器的IP地址
MASTER_USER = 'replicator', # 主服务器上的复制账号
MASTER_PASSWORD = 'replicator_password', # 复制账号的密码
MASTER_LOG_FILE = 'mysql-bin.000001', # 主服务器的二进制日志文件名
MASTER_LOG_POS = 107; # 主服务器的日志位置
在这里,MASTER_HOST 是主服务器的IP地址,MASTER_USER 和 MASTER_PASSWORD 是您在主服务器上创建的复制账号和密码,MASTER_LOG_FILE 和 MASTER_LOG_POS 是从主服务器上获得的二进制日志文件和位置。
启动复制进程
执行以下命令,启动从服务器的复制进程:
sqlCopy CodeSTART SLAVE;
查看复制状态
使用以下命令检查从服务器的复制状态,确保没有错误:
sqlCopy CodeSHOW SLAVE STATUS\G
如果配置正确,您应该看到类似以下内容:
plaintextCopy CodeSlave_IO_Running: Yes
Slave_SQL_Running: Yes
如果这两个值都是 Yes,说明复制正在正常工作。如果有任何问题,可以根据 Last_Error 字段的提示进行排查。
五、验证主从复制是否正常
在主服务器上插入数据
在主服务器上执行一些插入操作:
sqlCopy CodeUSE testdb;
INSERT INTO test_table (name) VALUES ('test data');
检查从服务器数据同步
登录到从服务器并检查数据是否已经同步:
sqlCopy CodeUSE testdb;
SELECT * FROM test_table;
如果数据成功同步,说明主从复制配置正确。
六、常见问题排查
从服务器的复制状态为“No”:
检查主服务器的 log_bin 是否启用,并确保 binlog_do_db 配置正确。
检查 MASTER_LOG_FILE 和 MASTER_LOG_POS 是否正确。
确保从服务器的 server-id 唯一且与主服务器不同。
复制延迟或丢失数据:
检查网络连接是否正常。
确保主服务器和从服务器的时间同步,避免由于时区差异导致的复制问题。
使用 SHOW SLAVE STATUS\G 命令检查 Seconds_Behind_Master 字段,查看复制延迟。
通过上述步骤,您应该已经成功配置了MySQL的主从复制环境。主从复制能够有效地分担数据库的读取压力,提升数据库的可用性和性能。在生产环境中,您可以通过增加多个从服务器来进一步提升系统的可扩展性和容错性。