🗣 Wd提问: MySQL主从同步配置
🤖 Ai回答: 以下是 MySQL 主从同步(Replication)的配置步骤,详细说明了每一步的操作和注意事项:
1、主库(Master)配置
步骤 1.1:编辑主库配置文件
bash
sudo vim /etc/my.cnf
在 `[mysqld]` 部分添加以下配置:
ini
server-id = 1 唯一标识,主库设为1
log-bin = mysql-bin 启用二进制日志,文件名前缀为mysql-bin
binlog-do-db = your_db 需要同步的数据库(可选,若同步所有数据库可省略)
或者排除某些数据库:
binlog-ignore-db = test
可选配置:
`binlog_format = ROW`:推荐使用 `ROW` 格式,避免部分场景的复制问题。
`relay-log = mysql-relay-bin`:从库需要此配置(但主库通常不需要)。
步骤 1.2:重启 MySQL 服务
bash
sudo systemctl restart mysql
步骤 1.3:创建复制用户
登录 MySQL:
bash
mysql -u root -p
执行以下命令创建复制用户(替换 `repl_user` 和 `password`):
sql
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
步骤 1.4:锁定主库表(可选但推荐)
sql
FLUSH TABLES WITH READ LOCK; 锁定所有表,防止写入
步骤 1.5:备份主库数据
通过 `mysqldump` 备份数据(或直接复制数据文件):
bash
mysqldump -u root -p single-transaction lock-tables=false master-data=2 all-databases master_backup.sql
`single-transaction`:保证一致性。
`master-data=2`:自动记录当前的 binlog 文件名和位置。
步骤 1.6:记录当前 binlog 位置
sql
SHOW MASTER STATUS\G
输出示例:
* 1、row *
File: mysql-bin.000001
Position: 1234
Binlog_Do_DB: your_db
Binlog_Ignore_DB:
记录 `File` 和 `Position` 的值,后续从库需要这些信息。
步骤 1.7:解锁主库表
sql
UNLOCK TABLES;
2、从库(Slave)配置
步骤 2.1:编辑从库配置文件
bash
sudo vim /etc/my.cnf
在 `[mysqld]` 部分添加以下配置:
ini
server-id = 2 必须唯一,不能与主库重复
relay-log = mysql-relay-bin 中继日志文件名前缀
log_slave_updates 允许从库作为其他从库的主库(可选)
步骤 2.2:重启 MySQL 服务
bash
sudo systemctl restart mysql
步骤 2.3:导入主库备份数据
bash
mysql -u root -p < master_backup.sql
步骤 2.4:配置从库连接主库
登录 MySQL:
bash
mysql -u root -p
执行以下命令(替换参数):
sql
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_PORT=3306,
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001', 主库的 File 值
MASTER_LOG_POS=1234; 主库的 Position 值
步骤 2.5:启动从库复制
sql
START SLAVE;
3、验证主从同步
步骤 3.1:检查从库状态
sql
SHOW SLAVE STATUS\G
关键字段:
`Slave_IO_Running: Yes`:IO 线程正常(连接主库拉取日志)。
`Slave_SQL_Running: Yes`:SQL 线程正常(执行主库的 SQL 操作)。
`Last_IO_Errno` 和 `Last_SQL_Errno`:检查是否有错误。
步骤 3.2:测试数据同步
在主库插入一条测试数据:
sql
INSERT INTO your_db.test_table (name) VALUES ('test');
检查从库是否同步了这条数据。
4、常见问题排查
4.1 连接问题
错误:`Could not connect to master`
原因:防火墙阻止 3306 端口,或主库未授权用户。
解决:
bash
开放从库到主库的 3306 端口
sudo ufw allow from 从库IP to any port 3306
4.2 权限问题
错误:`Access denied for user 'repl_user'@'从库IP'`
解决:确保主库用户权限正确:
sql
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
4.3 复制延迟
现象:`Seconds_Behind_Master` 显示延迟。
解决:优化从库性能,检查磁盘 I/O 或 SQL 执行效率。
5、高级配置(可选)
5.1 半同步复制
提高数据一致性:
bash
主库和从库安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
主库配置
SET GLOBAL rpl_semi_sync_master_enabled = 1;
从库配置
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
5.2 多主复制
需结合 `GTID`(全局事务标识符)配置,避免冲突。
5.3 安全配置
使用 SSL 加密主从通信:
sql
CHANGE MASTER TO MASTER_SSL=1, MASTER_SSL_CA='ca.pem', ...;
6、注意事项
1、server-id 必须唯一:主从的 `server-id` 不能重复。
2、主从版本兼容性:从库版本不能低于主库。
3、数据一致性:初始备份时确保主库无写入(通过锁表或事务一致性)。
4、监控工具:使用 `pt-heartbeat` 或 MySQL 8.0 的 `performance_schema` 监控延迟。
通过以上步骤,您可以完成 MySQL 主从同步的配置。如果遇到问题,检查 `SHOW SLAVE STATUS` 的错误信息,并针对性解决。
📣 商家广告 :
👍
0
👎
IP地址: 86.231.132.222
搜索次数: 0
提问时间: 2025-11-11 06:13:53
🛒 域名购买 :
pbbb.com.cn 6444.com.cn 285.net.cn 76.plus 3330.com.cn 671.net.cn souhuai.com 53.biz 926.net.cn 23.cx
❓️ 热门提问 :
10核服务器 ip漂移是什么意思 大流量vps 如家托管 MySQL源码information_schema PHP源码password_hash nginx服务 爬虫源码mysql存储 蜘蛛池接口云服务器 香港地铁一站路多少钱 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
asup.cn 10.cn evtol.sd.cn rbjm.cn zz.nm.cn y-w.com.cn odim.cn 53.chat fdxp.cn su8.gs.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
网站搜索
Sökmotor for barn
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。