部分题目来源:美团 java 后台 哈尔滨现场面试面经
1. 数据库主从同步、读写分离
主要用来提升数据库的并发负载能力。
- 数据的热备;
- 架构的扩展;
- 支持更大的并发;
主从复制的步骤:
- 从库生成两个线程,一个 IO 线程,一个 SQL 线程;
- IO 线程去请求主库的 binlog,并将得到的 binlog 日志写入 relay log 文件中。主库会生成一个 binlog dump 线程,用来给从库的 IO 线程传 binlog;
- binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息(查询不会有记录,只记录增删改)。在 my.cnf 中增加
log_bin参数即可开启。
- binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息(查询不会有记录,只记录增删改)。在 my.cnf 中增加
- SQL 线程,会读取 relay log 文件中的日志(从 Exec_Master_Log_Pos 位置开始执行),并解析成具体操作,来实现主从的操作一致,而最终数据一致。
缺点:
- 数据的实时性较差;
- 数据量大时,同步效率差;
- 同时连接多个数据库,容易引起混乱;
- 读具有高性能高可靠性和可伸缩。只读服务器因为没有写操作,大大减轻磁盘 IO 等性能问题;多个只读服务器可以采用负载均衡的方式实现可伸缩性。
- 写数据的分配一般采用哈希映射。
