1 介绍
对于一个互联网项目而言,在mysql这块,主要是分为两种职业:oltp和dba;开发人员和数据库运维人员
我们常常将一个项目分为三个阶段:初期,发展,爆发
1 项目初期:此阶段主要是但结点,需要解决可靠性,单点故障的问题(一般情况下采用主从复制就好了),但是目前我遇到的项目基本上没有,直接单台mysql
2 发展阶段:常见的问题宕机,读写性能问题;主要解决的可用性(合理的时间内提供合理的回复,专业一点说法:多少时间内完成切换),采用什么样的集群方案实现了多长时间的切换。解决方案:读写分离;缓存方式。
3 爆发期:主要解决高扩展性,能进行横向扩展(分库分表,多个主db等)
对于开发人员,需要掌握mysql的知识体系,在dba介入之前的知识体系。
2 主从复制
主从复制作用:使用binlog恢复数据(增量数据);
用来主从复制(replication)
1 原理图
2 具体流程
对于数据库来说,为了提供可用性mysql提供了可以部署多个机制来进行主从复制。master写,slave读。
master服务器而言:主线程接受客户端来写sql语句,当有数据改变的时候写入binlog日志;
slave服务器而言:它是有一个io_thread会去隔一段时间去主服务器从去请求数据,而master会将binlog日志会通过log dump thread返回给从服务器;从服务器io_thread接收到,会将数据丢写入到中继日志(relay log)。从服务器中还有一个数据sql thread会将中继日志回放一遍放入数据库中。
3 binlog
产生时机,事务提交后;重启生成新的binlog;
flush logs 生成新的binlog;
4 配置开启使用
[mysqld] log-bin=mysql-bin # 每提交n次事务,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入 磁盘。 sync_binlog=1 # 开启两段式事务提交 # 1.prepare,先将redolog持久化到磁盘; # 2.prepare成功,再将事务日志持久化到binlog; # 3.再在redolog上持久化commit操作; innodb_support_xa=1
4 总结
1 binlog 文件会随服务的启动创建一个新文件;
2.通过 flush logs 可以手动刷新日志,生成一个新的 binlog 文件;
3.通过 show master status 可以查看 binlog 的状态;
4.通过 reset master 可以清空 binlog 日志文件;
5.通过 mysqlbinlog 工具可以查看 binlog 日志的内容;
6.通过执行 DML 操作,mysql 会自动记录 binlog;