1. 项目概述在开发和测试环境中我们经常需要在同一台服务器上搭建MySQL主从复制架构。这种配置方式能够在不增加硬件成本的情况下实现数据冗余备份、读写分离和负载均衡等功能。本文将详细介绍如何在单台服务器上部署MySQL主库和从库并确保两者之间的数据同步正常运行。2. 环境准备与配置2.1 系统要求检查在开始配置前我们需要确认服务器满足以下基本要求已安装MySQL 8.0或更高版本有足够的磁盘空间存放两份数据库数据服务器内存足够支持同时运行两个MySQL实例操作系统用户权限配置正确提示在生产环境中不建议将主从库部署在同一台服务器上这会导致单点故障风险。本文配置仅适用于开发和测试环境。2.2 创建从库数据目录首先我们需要为从库创建独立的数据存储目录# 创建从库数据目录 mkdir /var/lib/mysql_slave # 修改目录所有者确保MySQL服务有权限访问 chown mysql:mysql /var/lib/mysql_slave这个目录将存放从库的所有数据文件包括表数据、索引和日志等。确保该目录所在的分区有足够的空间容纳完整的数据库副本。3. 从库初始化与配置3.1 初始化从库数据使用以下命令初始化从库数据目录mysqld --initialize --usermysql --datadir/var/lib/mysql_slave初始化过程会创建必要的系统表生成root用户的临时密码设置基础的数据库结构初始化完成后临时密码会显示在MySQL错误日志中我们需要记下这个密码用于首次登录。3.2 配置从库参数创建从库专用的配置文件cp /etc/my.cnf /etc/mysql_slave.cnf编辑mysql_slave.cnf文件确保包含以下关键配置[mysqld] server-id 2 # 必须与主库不同 port 3307 # 使用不同端口避免冲突 bind-address 0.0.0.0 # 按需设置访问控制 datadir /var/lib/mysql_slave socket /var/run/mysqld/mysql_slave.sock pid-file /var/run/mysqld/mysql_slave.pid tmpdir /tmp relay-log relay-bin read_only ON # 从库设为只读模式这些配置确保了从库能够与主库区分通过server-id独立运行不冲突不同端口和socket保持数据一致性read_only模式4. 主库配置调整4.1 启用二进制日志主库需要启用二进制日志(binlog)功能这是复制的基础。编辑主库的my.cnf文件添加或确认以下配置[mysqld] server-id1 log-binmysql-bin binlog_formatrow binlog_expire_logs_seconds604800 # 日志保留7天 sync_binlog1 # 确保每次事务都同步到磁盘配置说明server-id1标识这是主库log-binmysql-bin启用二进制日志binlog_formatrow使用行级复制最安全可靠sync_binlog1每次事务都同步到磁盘确保数据安全修改配置后需要重启主库使更改生效。4.2 创建复制专用账户在主库上创建一个专门用于复制的账户CREATE USER replica% IDENTIFIED BY your_strong_password; GRANT REPLICATION SLAVE ON *.* TO replica%; FLUSH PRIVILEGES;这个账户只需要REPLICATION SLAVE权限遵循最小权限原则。5. 数据同步与复制设置5.1 主库数据备份在设置复制前我们需要确保主从库的数据一致。首先锁定主库表并获取二进制日志位置FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;记录下File和Position的值稍后配置从库时需要用到。然后导出主库数据mysqldump -u root -p --databases your_database --single-transaction --master-data2 /tmp/db_dump.sql导出完成后可以解锁表UNLOCK TABLES;5.2 从库数据导入首先登录从库使用初始化时生成的临时密码mysql -P 3307 -h 127.0.0.1 -uroot -p --connect-expired-password登录后立即修改root密码ALTER USER rootlocalhost IDENTIFIED BY new_secure_password;然后导入主库的备份数据mysql -uroot -p -P 3307 /tmp/db_dump.sql5.3 配置复制关系在从库上执行以下命令建立与主库的复制关系CHANGE MASTER TO MASTER_HOST127.0.0.1, MASTER_USERreplica, MASTER_PASSWORDyour_strong_password, MASTER_LOG_FILEmysql-bin.000001, # 使用SHOW MASTER STATUS获取的值 MASTER_LOG_POS154; # 同上 START SLAVE;启动复制后检查从库状态SHOW SLAVE STATUS\G确认Slave_IO_Running和Slave_SQL_Running都为Yes表示复制正常运行。6. 日常管理与故障处理6.1 服务启动与停止启动从库服务# 前台启动调试用 sudo mysqld --defaults-file/etc/mysql_slave.cnf # 后台启动 sudo mysqld_safe --defaults-file/etc/mysql_slave.cnf 停止服务时建议先停止从库复制STOP SLAVE;然后再停止MySQL服务。6.2 常见问题排查复制中断检查网络连接确认主库二进制日志未过期检查主从库数据是否一致从库落后检查服务器负载考虑调整sync_binlog参数检查网络延迟数据不一致使用pt-table-checksum工具检查考虑重建复制关系6.3 复制监控定期检查以下指标Seconds_Behind_Master从库落后主库的秒数Slave_IO_StateI/O线程状态Last_Error最后一次错误信息可以设置监控脚本或使用Prometheus等工具实现自动化监控。7. 性能优化建议调整从库配置增加innodb_buffer_pool_size关闭不必要的日志优化查询缓存网络优化确保主从间网络稳定考虑压缩复制流量硬件考虑使用SSD存储确保足够内存CPU核心数足够在实际使用中建议定期测试故障转移流程确保在主库故障时能够快速切换到从库。同时保持定期的数据备份即使有复制也不能完全替代备份策略。
阅读完成 · 觉得有帮助?