mysql个人总结
mysql常用存储引擎之Innodb
系统表空间和独立表空间要如何选择
比较:
系统表空间无法简单的收缩文件大小
独立表空间可以通过optimeize table 命令收缩系统文件
系统表空间会产生IO瓶颈
独立表空间可以同时向多个文件刷新数据
表转移的步骤
把原来存在于系统表空间中的表转移到独立空间中的方法
步骤:
1 使用mysqldump导出所有数据表数据
2 停止mysql服务,修改参数,并删除innodb相关文件
3 重启mysql服务,重建innodb系统表空间
4 重新导入数据
如何选择正确的存储引擎
参考条件
1 事务
2 崩溃恢复
3 备份
4 存储引擎的特有特性
常用的基准测试工具介绍
mysql基准测试工作之 mysqlslap
常用参数说明
--auto-generate-sql 又系统自动生成 sql脚本进行测试
--auto-generate-sql-add-autoincrement 在生成的表中增加自增ID
--auto-generate-sql-load-type 指定测试中使用的查询类型
--auto-generate-sql-write-number 指定初始化数据时生成的数据量
--concurrency 指定并发线程的数量
--engine 指定要测试表的存储引擎,可以用逗号分割多个存储引擎
--no-drop 指定不清理测试数据
--iterations 指定测试运行的次数
--number-of-queries 指定每一个线程执行的查询数量
--debug-info 指定输出 额外的内存及CPU统计信息
--number-inf-cols 指定测试表中包含的INT类型的数量
--number-char-cols 指定测试表中包含的varchar类型的数量
--create-schema 指定了用于执行测试的数据库的名字
--query 用于指定自定义SQL的脚本
--only-print 并不运行测试脚本,而是把生成的脚本打印出来
mysql基准测试工作之sysbench
常用参数
--test 用于指定所要执行的测试类型,支持以下参数
Fileio 文件系统I/O性能测试
cpu cpu性能测试
memory 内存性能测试
Oltp 测试要指定具体的lua脚本
Lua脚本位于sysbench-0.5/sysbench/tests/db
常用参数
--mysql-db 用于指定执行基准测试的数据库名
--mysql-table-engine 用于指定所使用的存储引擎
--oltp-tables-count 执行测试的表的数量
--oltp-tables-size 指定每个表中的数据行数
--num-threads 指定测试的并发线程数量
--max-time 指定最大的测试时间
--report-interval 指定间隔多长时间输出一次统计信息
--mysql-user 指定执行测试的mysql用户
--mysql-password 指定执行测试的mysql用户的密码
prepare 用于准备测试数据
run 用于实际进行测试
cleanup 用于清理测试数据
数据库结构优化的目的
减少数据冗余
尽量避免数据维护中出现更新,插入和删除异常
插入异常:如果表中的某个实体随着另一个实体而存在
更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新
删除异常:如果删除表中的某一实体则会导致其他实体的消失
数据库结构设计的步骤
需求分析:全面了解产品设计的存储需求
逻辑设计:设计数据的逻辑存储结构
物理设计:根据说使用的数据库特点进行表结构设计
维护优化:根据实际情况对索引,存储结构等进行优化
数据库设计范式
数据库设计的第二范式
要求一个表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列对只对部分主键的依赖关系
数据库设计的第三范式
指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖
复制解决了什么问题
实现在不同服务器上的数据分布
利用二进制日志增量进行
不需要太多的宽带
但是使用基于行的复制在进行大批量的更改时会对带宽带来一定的压力
特别是跨IDC环境下进行复制
实现数据读取的负载均衡
增强了数据安全性
应该分批进行
利用备份的备份来减少主库负载
复制并不能代替备份
mysql 复制性能优化
影响主从延迟的因素
默认情况下从只有一个sql线程,主上并发的修改在从上变成了串行
使用多线程复制
如何配置多线程复制
stop slave
set global slave_parallel_type = 'logical_clock';
set global slave_parallel_workers = 4;
start slave ;
mysql 复制常见问题处理
由于数据损坏或丢失引起的主从复制错误
主库或从库意外宕机引起的错误
主库上的二进制日志损坏
通过change master 命令来重新指定
备库上的中继日志损坏
如何实现高可用
避免导致系统不可用的因素,减少系统不可用的时间
建立完善的监控及报警系统
对备份数据进行恢复测试