mysql从库怎么做 mysql主从库搭建( 二 )


有时候我们遇到从数据库中获取不到信息的诡异问题时,会纠结于代码中是否有一些逻辑会把之前写入的内容删除 , 但是你又会发现 , 过了一段时间再去查询时又可以读到数据了,这基本上就是主从延迟在作怪 。
主从延迟,其实就是“从库回放” 完成的时间,与 “主库写 binlog” 完成时间的差值,会导致从库查询的数据,和主库的不一致。
谈到 MySQL 数据库主从同步延迟原理,得从 MySQL 的主从复制原理说起:
总结一下主从延迟的主要原因:主从延迟主要是出现在 “relay log 回放” 这一步,当主库的 TPS 并发较高,产生的 DDL 数量超过从库一个 SQL 线程所能承受的范围,那么延时就产生了,当然还有就是可能与从库的大型 query 语句产生了锁等待 。
我们一般会把从库落后的时间作为一个重点的数据库指标做监控和报警,正常的时间是在毫秒级别 , 一旦落后的时间达到了秒级别就需要告警了 。
解决该问题的方法,除了缩短主从延迟的时间,还有一些其它的方法,基本原理都是尽量不查询从库 。
具体解决方案如下:
在实际应用场景中 , 对于一些非常核心的场景 , 比如库存 , 支付订单等,需要直接查询从库,其它非核心场景,就不要去查主库了 。
两台机器 A 和 B,A 为主库,负责读写,B 为从库 , 负责读数据 。
如果 A 库发生故障 , B 库成为主库负责读写,修复故障后,A 成为从库,主库 B 同步数据到从库 A 。
一台主库多台从库,A 为主库,负责读写 , B、C、D为从库 , 负责读数据 。
如果 A 库发生故障,B 库成为主库负责读写,C、D负责读 , 修复故障后,A 也成为从库,主库 B 同步数据到从库 A 。
mysql主从库怎样做分发数据库内均无数据,关闭主从库的iptables(chkconfig iptables off) 。
1、主库配置
修改主库MySQL配置文件/ect/my.cnf:
[mysqld]
log-bin=mysql-bin
server-id=1
#skip-networking
#bind-address
server-id用来标识MySQL数据库,log-bin开启二进制日志,注释掉skip-networking和bind-address 。重启主库MySQL 。
2、账号配置
在主库服务器上,新建一个用于同步的账号 。
mysql create user 'user'@'%.domain.com' identified by 'password';
mysql grant repliction slave on *.* to 'user'@'%.domain.com';
新建的用户user@%.domain.com,赋予slave权限 。
3、主库状态
mysql show master status;
+------------------+-----------+--------------+------------------+
| File| Position| Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000009 |480 |||
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)
记录下File和Position的值 , 之后暂时不要操作主库,防止主库状态发生变化 。
4、从库配置
修改主库MySQL配置文件/ect/my.cnf:
[mysqld]
log-bin=mysql-bin
server-id=2
注意主从库的server-id不要相同 。
将主库信息导入到从库中:
mysql CHANGE MASTER TO
-MASTER_HOST='192.168.3.11',
-MASTER_USER='usere',
-MASTER_PASSWORD='password',
-MASTER_LOG_FILE='mysql-bin.000009',
-MASTER_LOG_POS=480;
启动从库slave同步:
mysql start slvae;
5、从库状态
mysql show slave status;
查看 Slave_IO_Running | Slave_SQL_Running , 如果出现的结果是Yes | Yes,说明mysql主从配置成功完成了 。
6、验证同步
在主库新建数据库,导入sql脚本后,查看从库也做了相应的改变,说明mysql主从同步成功 。

推荐阅读