1. 环境准备
- 选择合适的数据库:支持主从复制的数据库较多,如 MySQL、PostgreSQL、SQL Server 等。以 MySQL 为例进行说明。
- 准备两台或多台服务器:通常包括一台主服务器(Master)和一台或多台从服务器(Slave)。
2. 配置主服务器
-
编辑配置文件:在主服务器上编辑 MySQL 配置文件(如
my.cnf或my.ini),确保以下配置项设置正确:server-id:为每个服务器设置唯一的标识,主服务器的server-id要与从服务器的不同。log_bin:启用二进制日志,这是主从复制的基础,用于记录数据库的修改操作。binlog-do-db(可选):指定需要复制的数据库。binlog-ignore-db(可选):指定不需要复制的数据库。
示例配置:
bash
[mysqld] server-id=1 log_bin=mysql-bin binlog-do-db=test_db -
创建复制用户:在主服务器上创建一个用于复制的用户,并授予相应的权限:
sql
CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; -
获取主服务器状态:执行以下命令获取主服务器的二进制日志文件名和位置:
sql
SHOW MASTER STATUS;
3. 配置从服务器
-
编辑配置文件:在从服务器上编辑 MySQL 配置文件,确保以下配置项设置正确:
server-id:为每个从服务器设置唯一的标识,与主服务器不同。relay_log(可选):指定中继日志文件的名称。read_only(可选):将从服务器设置为只读模式,以避免数据被意外修改。
示例配置:
bash
[mysqld] server-id=2 relay_log=relay-log read_only=1 -
配置从服务器连接主服务器:执行以下命令配置从服务器连接到主服务器,指定主服务器的 IP 地址、端口、复制用户和密码,并设置主服务器的二进制日志文件名和位置(根据主服务器的
SHOW MASTER STATUS命令获取的值):sql
CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='主服务器日志文件名', MASTER_LOG_POS=主服务器日志位置; -
启动从服务器复制线程:执行以下命令启动从服务器的复制线程:
sql
START SLAVE; -
查看从服务器状态:执行以下命令查看从服务器的复制状态:
sql
SHOW SLAVE STATUS\G;检查
Slave_IO_Running和Slave_SQL_Running字段是否都为Yes,表示复制正常运行。
4. 测试主从复制
- 在主服务器上进行数据操作:在主服务器上插入、更新或删除数据。
- 检查从服务器数据同步情况:在从服务器上查询相应的数据表,检查数据是否已成功同步。
5. 常见问题及注意事项
- 确保网络连通性:主从服务器之间需要能够正常通信。
- 数据一致性:在配置主从复制之前,确保主从服务器的数据一致。可以通过备份主服务器的数据并恢复到从服务器来实现。
- 监控复制状态:定期检查从服务器的复制状态,确保复制正常运行。如果复制出现错误,需要及时处理。
- 延迟问题:在高负载或网络延迟较大的情况下,从服务器可能会出现延迟。可以通过优化数据库配置、增加硬件资源等方法来减少延迟。
- 安全性:确保复制用户和密码的安全性,避免泄露。可以使用 SSL 加密来保护数据传输的安全性。