MySQL的复制功能是基于MySQL的大规模、高性能的基础。
web服务器产生大量的突增访问,只需要增加几台web服务器,保证代码一直即可。而MySQL复制就没有那么简单,由于事务性就不能简单复制。
MySQL复制功能提供分担读负载。使用复制功能,对数据库服务器进行水平扩展,为数据库服务器增加一个或多个备库,这些备库就可以分担主数据库的读负载。同时,备份工作也为高可用、灾难恢复、备份提供更多的选择.
MySQL的复制是基于主库上二进制日志,将主库上的日志复制到从库上完成的,所以mysql的复制是异步的。所以同一时间点上主库的数据和备库上会存在不一直的情况,并且无法保证主库和备库的延迟
可解决问题
1、利用MySQL功能可以实现不同服务器上的数据分布,也可以实现不同机房数据分布。利用二进制日志增量进行的,不需要太多带宽,特别是基于语句的复制时,所需要的带宽就更少了。但基于行的复制,进行大批量的更改时会对带宽还来一定的压力,但在同一IDC机房复制,压力可忽略。但在垮IDC环境下复制就需哟啊考虑。大批量数据复制最好分批来进行。
2、实现不同服务器上的数据分布
3、实现读取的负载均衡,需要其他组件配合完成。利用DNS轮询的方式把程序的读连接到不同的备份数据库,或者可利用LVS、haproxy这样的方式也可以。MySQL是非共享架构,同样的数据分布在堕胎服务器上。
4、增加数据安全性,利用备库的备份来减少主库负载、
5、数据库在线升级
MySQL二进制日志
MySQL服务层日志
和使用存储引擎无关,是服务器层记录的
二进制日志:记录了所有对MySQL数据库的修改事件,包括在删改查和对表结构的修改事件。log中记载的都是成功执行了的,但对于回滚的语句是不会记载在binlog日志中的。
查看工具binlog工具查看看
二进制格式设置
基于段的格式 binlog_format = STATEMENT
基于行的格式 binlog_format = ROW 推荐 binlog_row_image = [FULL|MINIMAL(推荐)|NOBLOG]
(误操作修改了数据库中的数据,同时又没有备份可以恢复,我们就可以通过分析二级制日志,对日志中记录的数据修改操作做反向处理的方式来达到恢复数据的目的)
混合日志格式 binlog_format = MIXED
查看日志格式
查看刷新
慢查询日志、通用日志。
MySQL存储引擎层日志
如innodb的重做日志和回滚日志
MySQL复制工作原理
配置MySQL复制
基于日志点的复制配置步骤
在主DB服务器上建立复制账号
create user ‘repl’ @ ‘ip段’ identified by ‘password’
授权
grant replication slave on ‘.’ to 'repl' @ 'ip段'
配置主数据库服务器
bin_log = mysql-bin //启动mysql的二进制日志
server_id = 100
配置从数据库服务器
bin_log = mysql-bin
server_id = 101
relay_log = mysql-relay-bin
log_slave_update = on (可选)
read_only = on
初始化从服务器数据
通过主数据库备份效率比较高
mysqldump --master-data=2 -single-transaction //逻辑备份存为sql文件
xtrabackup --slave-info //innodb推荐
启动复制电路