mysql主从同步 读写分离
设置 MySQL 主从复制的详细步骤 假设您有两个服务器: 主服务器 IP: 192.168.1.10 从服务器 IP: 192.168.1.11 第一部分:主服务器 (Master) 配置 修改 MySQL 配置文件 编辑主服务器上的 my.cnf (通常是 /etc/my.cnf 或 /etc/mysql/my.cnf)。 ini [mysqld] # 服务器唯一ID,在整个复制集群中必须唯一 server-id = 1 # 启用二进制日志,并指定日志文件名前缀 log_bin = mysql-bin # 可选:指定需要复制的数据库(多个则写多行),不指定则复制所有库 binlog_do_db = your_database_name # 可选:为了数据一致性,推荐使用行格式 binlog_format = ROW 重启 MySQL 服务 让配置生效。 bash sudo systemctl restart mysql # 或者 sudo systemctl restart mysqld 创建用于复制的用户 登录主服务器的 MySQL,创建一个专门用于从服务器连接和复制的用户。 sql mysql -u root -p -- 创建用户 ‘repl',并允许从 ‘192.168.1.11’ 登录,密码为 ‘SlavePass123!’ CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'SlavePass123!'; -- 授予复制权限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11'; -- 刷新权限 FLUSH PRIVILEGES; 锁定数据库并获取主节点状态 为了防止数据发生变化,先锁定。 sql -- 锁定表,禁止写操作 FLUSH TABLES WITH READ LOCK; -- 查看主节点状态,记录下 File 和 Position 的值,从服务器配置时需要 SHOW MASTER STATUS; 输出会类似于: text +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | your_database_name | | +------------------+----------+--------------+------------------+ 记下 File (mysql-bin.000001) 和 Position (107)。 备份并导出数据 如果主服务器上已有数据,需要先导出一份给从服务器。 bash # 在命令行执行,导出 your_database_name 数据库 mysqldump -u root -p your_database_name > master_dump.sql 解锁主数据库 数据导出后,即可解锁。 sql UNLOCK TABLES; 第二部分:从服务器 (Slave) 配置 导入数据 将主服务器的备份文件拷贝到从服务器,并导入。 bash # 在从服务器上执行 mysql -u root -p your_database_name < master_dump.sql 修改 MySQL 配置文件 编辑从服务器上的 my.cnf。 ini [mysqld] # 服务器唯一ID,必须与主服务器和其他从服务器不同 server-id = 2 # 可选:启用中继日志 relay-log = mysql-relay-bin # 可选:允许从服务器将其重放的中继日志记录到自己的二进制日志中,用于链式复制 log_bin = mysql-bin # 可选:指定需要复制的数据库 replicate_do_db = your_database_name 重启 MySQL 服务 bash sudo systemctl restart mysql 配置复制链路 登录从服务器的 MySQL,告诉它主服务器是谁,以及从哪里开始复制。 sql mysql -u root -p STOP SLAVE; -- 先停止 Slave 进程 CHANGE MASTER TO MASTER_HOST='192.168.1.10', -- 主服务器 IP MASTER_USER='repl', -- 复制用户 MASTER_PASSWORD='SlavePass123!', -- 复制用户密码 MASTER_LOG_FILE='mysql-bin.000001', -- 第4步记录的 File MASTER_LOG_POS=107; -- 第4步记录的 Position 启动复制并检查状态 sql -- 启动 Slave 进程 START SLAVE; -- 查看 Slave 状态 SHOW SLAVE STATUS\G 第三部分:验证复制 在 SHOW SLAVE STATUS\G 的输出中,检查以下两个关键字段: Slave_IO_Running: Yes Slave_SQL_Running: Yes 如果这两个值都是 Yes,说明复制正在正常运行。 最终测试: 在主服务器的 your_database_name 中创建一个新表或插入一条新记录。 在从服务器上查询,检查变化是否已经同步过来。 其他复制拓扑 链式复制 (A -> B -> C):可以减轻主服务器的压力。 主主复制:两个服务器互为主从,都可以接受写操作。需要特别小心自增主键冲突等问题,配置更复杂。 多源复制:一个从服务器可以从多个主服务器复制数据。 注意事项 版本兼容性:主从服务器的 MySQL 大版本最好一致,从节点版本可以高于主节点,反之则不推荐。 网络:确保主从节点之间的网络通畅,防火墙开放了 MySQL 端口(默认3306)。 数据一致性:在设置复制前,确保主从服务器的初始数据是一致的。 监控:定期检查 SHOW SLAVE STATUS 来监控复制状态,处理可能出现的错误。 这个流程涵盖了搭建 MySQL 跨节点复制库的核心步骤。根据您的具体需求和环境,细节可能会略有不同。
Talk is cheap, show me the code.

浙公网安备 33010602011771号