MySQL主从同步

本文详细介绍了一主一从数据库同步的步骤,包括在主库上开启binlog日志、设置server_id、授权用户,在从库上指定server_id、设置主服务器参数、启动从服务器并检查状态。同时,还提到了MHA集群的配置方法。

如何搭建数据库主从同步(一主一丛)
要使主库和从库的数据一致,要不然从库同步的只是开启从库后的数据(不一致可以做一个完全备份)
主库:
1.开启binlog日志
2.指定server_id(主和从的不能一致)
3.重启服务
systemctl restart mysqld
4.进数据库,授权一个用户
grant replication slave on . to repluser@"%" identified by “123qqq…A”;
从库:
1.指定server_id
2.重启服务
systemctl restart mysqld
3.进库,指定主服务器
change master to //指定主服务器
master_host=“192.168.4.51”, //主服务器ip地址
master_user=“repluser”, //主服务器授权用户
master_password=“123qqq…A”, //主服务器授权用户密码
master_log_file=“master51-bin.000001”,//主服务器日志文件
master_log_pos=441; //主服务器日志偏移量
4.启动从服务器
start slave
5.查看IO和SQL线程是不是yes
show slave status\G;

常见错误:
1.Slave_IO_Running: Connecting
Last_IO_Error: error connecting to master ‘repluser@192.168.4.51:3306’ - retry-time: 60
根据报错信息得知授权用户和指定的对不上
2.SQL线程是No,原因是指定主服务器命令错了,如果要重新打指定主服务器的命令先要stop slave ,再打命令,最后start slave

MHA集群
MHA工作原理:
由Manger(管理主机)定时检测集群中的主节点
当主节点故障时,Manger自动将拥有最新数据的从提升为新的主
配置MHA集群
一、环境准备
1.安装依赖包(perl的依赖包)
2.配置ssh秘钥对登录(管理主机无密码登录所有数据库服务器,数据库服务器批次之间可以互相无密码登录)
ssh-keygen 创建密钥对
ssh-copy-id 拷贝公钥给目标服务器
3.配置一主多从
二、配置管理节点
安装软件包
修改配置文件
创建故障切换脚本
部署VIP
三、配置数据节点
四、测试配置

### MySQL 主从同步配置教程 MySQL主从同步是一种常见的数据库复制技术,通过该技术可以实现数据的高可用性和负载均衡。以下是关于MySQL主从同步的具体配置方法以及常见问题及其解决方案。 #### 配置步骤概述 1. **环境准备** 在开始配置之前,需要确保主服务器和从服务器均已正确安装并运行MySQL服务[^3]。此外,还需要确认两台服务器之间的网络连通性正常,并设置好相应的防火墙规则以允许必要的端口通信(默认为3306)。 2. **主服务器配置** - 授权从服务器连接:在主服务器上执行`GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%' IDENTIFIED BY 'password';`命令授予从服务器权限。 - 修改主服务器配置文件(通常是`my.cnf`),添加以下内容: ```ini log-bin=mysql-bin server-id=1 binlog-do-db=test_db ``` 上述配置启用了二进制日志功能,并设置了唯一的server-id[^4]。 - 重启MySQL服务使更改生效。 - 登录MySQL控制台,验证二进制日志是否已启用:`SHOW MASTER STATUS;` 3. **从服务器配置** - 修改从服务器的配置文件,同样需要指定唯一的服务ID号: ```ini server-id=2 relay-log=mysql-relay-bin replicate-do-db=test_db ``` - 重启MySQL服务。 - 执行以下命令完成剩余参数配置: ```sql CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=yyyyyy; START SLAVE; ``` 4. **验证同步状态** 使用`SHOW SLAVE STATUS\G;`查看同步状态。如果一切正常,则可以看到`Slave_IO_Running: Yes` 和 `Slave_SQL_Running: Yes` 的输出结果。 --- ### 常见问题及解决方案 1. **UUID冲突问题** 当启动从库时遇到错误提示:“Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs”,这表明主从服务器具有相同的UUID值。可以通过删除旧的数据目录下的auto.cnf文件来解决此问题[^1]。 2. **初始数据导入不一致** 若未先将主服务器中的现有数据导出至从服务器,在后续同步过程中可能出现数据丢失或异常情况。建议按照以下方式处理: - 锁定主服务器上的表格以防修改:`FLUSH TABLES WITH READ LOCK;` - 导出整个数据库结构与数据:`mysqldump --all-databases --single-transaction > dbdump.sql` - 将生成好的备份文件传输到从服务器并恢复之[^2]。 3. **延迟过高现象** 如果发现从节点落后于主节点较多时间单位,可能是因为某些大型事务耗尽了资源所致。优化策略包括但不限于调整缓冲区大小、增加硬件性能指标或者考虑采用半同步机制减少潜在风险。 4. **SQL线程停止工作** 出现类似“Last_Error”的报错信息意味着存在语法差异或者其他兼容性障碍阻止进一步操作继续推进下去。仔细检查对应位置处具体发生了什么状况之后再采取相应措施予以纠正即可恢复正常运作模式。 --- ```python # 示例Python脚本用于监控MySQL主从延时 import mysql.connector def check_replication_delay(host, user, password): cnx = mysql.connector.connect(user=user, password=password, host=host,database="information_schema") cursor = cnx.cursor() query = ("SELECT Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master FROM SLAVE_STATUS;") cursor.execute(query) result = cursor.fetchone() io_running, sql_running, delay = result if not (io_running == "Yes" and sql_running == "Yes"): print(f"Replication is broken! IO Running:{io_running}, SQL Running:{sql_running}") elif delay > 60: print(f"High Replication Delay detected ({delay} seconds).") check_replication_delay('localhost','root','your_password') ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值