centos7.x下,使用宝塔进行主从复制的原理和实践
操作原理:
一、主库配置
1.修改 MySQL 配置文件
# 编辑主库配置文件(路径根据实际系统可能不同)
vim /etc/my.cnf
# 添加以下配置
[mysqld]
server-id = 1 # 唯一 ID,主库设置为 1
log-bin = mysql-bin # 启用二进制日志
binlog_format = ROW # 推荐使用 ROW 模式
expire_logs_days = 7 # 日志保留天数
max_binlog_size = 100M # 单个日志文件大小
skip_name_resolve = ON # 跳过域名解析(可选)
重启 MySQL 服务
systemctl restart mysqld
2.登录到主服务器:
mysql -u root -p
3.创建复制用户
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
4.查看主服务器的状态
SHOW MASTER STATUS;
二、从库配置
1.修改 MySQL 配置文件
# 编辑从库配置文件
vim /etc/my.cnf
# 添加以下配置
[mysqld]
server-id = 2 # 唯一 ID,不能与主库相同
relay-log = mysql-relay-bin # 启用中继日志
read_only = ON # 从库只读(可选,确保数据安全)
重启 MySQL 服务
systemctl restart mysqld
2.登录到主服务器:
mysql -u root -p
3.配置从服务器
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='记录的File值',
MASTER_LOG_POS=记录的Position值;
4.启动复制
START SLAVE;
5.检查从服务器的状态
SHOW SLAVE STATUS\G
查看 Slave_IO_Running 和 Slave_SQL_Running 是否都为 Yes,这表示复制正在正常运行。
关键字段检查:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0(表示无延迟)
若出现错误,检查 Last_IO_Error 或 Last_SQL_Error。
三、如何遇到错误后,排查解决后,重新执行
STOP SLAVE;
RESET SLAVE ALL;
-- 重新执行
CHANGE MASTER TO ……
START SLAVE;
SHOW SLAVE STATUS;
四、同步主库现有数据(可选)
1.主库导出数据
# 使用 mysqldump 导出数据(自动记录 binlog 位置)
mysqldump -uroot -p --all-databases --master-data=1 > /tmp/master_dump.sql(或使用宝塔备份功能)
2.将备份文件导入从库
# 复制文件到从库
scp /tmp/master_dump.sql root@slave_ip:/tmp/
# 从库导入数据
mysql -uroot -p < /tmp/master_dump.sql
---------------------------------------------------------------------------------
实战案例
一、主库配置(10.0.12.16)
1.配置防火墙,主库服务器对从库IP开放3306端口
2.宝塔修改配置文件,保存后重启
server-id = 1 # 唯一 ID,主库设置为 1,默认不需要修改
3.phpMyadmin执行SQL,创建复制用户(10.0.16.16为从库IP)
CREATE USER 'replicator'@'10.0.16.16' IDENTIFIED BY 'abcc1b259f57f8b9111';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'10.0.16.16';
FLUSH PRIVILEGES;
4.记录的File值,记录的Position值
SHOW MASTER STATUS;
二、从库配置(10.0.16.16)
1.宝塔修改配置文件,保存后重启
server-id = 2 # 唯一 ID,不能与主库相同
relay-log = mysql-relay-bin # 启用中继日志
2.phpMyadmin执行SQL
CHANGE MASTER TO
MASTER_HOST='10.0.12.16',
MASTER_USER='replicator',
MASTER_PASSWORD='abcc1b259f57f8b9111',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=3629;
3.启动复制
START SLAVE;
4.查看从服务器的状态
SHOW SLAVE STATUS;
三、同步主库现有数据
1.从有数据的服务器上使用宝塔进行备份
2.上传备份数据到新的主服务器
scp /www/backup/database/mysql/hz_fw_game/hz_fw_game_2025-05-13_20-43-58_mysql_data_vmdYO.sql.zip root@xxx.229.73.57:/root/
3.在新的主服务器上执行数据库导入操作,此时从数据库就正常同步了,可以做到主从一致