#MySQL安装和基本配置
##Linux 下的 MySQL 安装注意之一
• Linux Generic版
• 下载社区版
• 配置好 /etc/my.cnf 也可以指定(用于启动多个端口) • 注意在 mysql 目录下 scripts/mysql_install_db
• 注意 data 目录的权限
• 一旦出错,从日志中寻找原因
##MySQL 怎么编译?
• 在源码目录下 cmake CMakeLists.txt
• 生成 BUILD 目录
• 进入 BUILD 目录, cmake /var/software/mysql-5.6.22 再进入 /var/software/mysql-5.6.22
• make
##安装,默认库介绍
配置文件选择
my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf
##基本配置
1. Socket 位置确定
2. 开启数据库的帐号和权限
1. grant ALL PRIVILEGES on quanzhan.*
to ‘quanzhan’@‘101.251.196.%' identified by 'xxxxx' with grant option;
3. 访问配置:端口开启,限定IP,禁止DNS解析等 1. skip-name-resolve
##mysql启动项
1. mysqld_safe与mysqld
2. 终端指定配置选项 1. bind-address
3. root密码忘记怎么办
![](https://box.kancloud.cn/2016-05-05_572afeeb391bc.png)
##存储引擎的区别和选择
**存储引擎是mysql提供的文件访问层的一个抽象接口来定制一种文件访问机制。**
**mysql的存储引擎包括**:MyISAM、InnoDB、BDB、MEMORY、MERGE、
EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,
**MyISAM:**不支持事务,支持全文索引,表级锁。适合处理读频率远大于写 频率
**InnoDB:**支持事务,5.6以后支持全文索引,行级锁。适用于高并发读写
#MySQL体系结构与存储引擎
• Server Initialization Module
• 命令行、配置文件解析、内存分配 • Connection Manager
• 协议监听和协议转发 • Thread Manager
• 新建线程处理请求
• Connection Thread
• 新建新的,或者从线程缓存中去取 • User Authentication Module
• 验证用户身份
• Access Control Module
• Parser
• 接收请求,解析进入命令分发或者进入查询 • Command Dispatcher
• 解析器分发给命令分发器 • Query Cache Module
• 查询缓存检查(SELECT、DELETE、UPDATE) • Optimizer
• 查询优化器
• Table Manager • 打开表,获取锁
• Table Modification Modules
• 表更新
• Table Maintenance Module
• 表维护
• Status Reporting Module
• 状态报告
• Abstracted Storage Engine Interface (Table Handler)
• 抽象引擎接口
• Storage Engine Implementations (MyISAM, InnoDB...) • 存储引擎实现
• Logging Module
• 日志记录
• Replication Master Module
• 复制主模块
• Replication Slave Module
• 复制从模块
• Client/Server Protocol API
• 客户端、服务器协议 API
• Low-Level Network I/O API
• 底层网络 I/O API
• Core API • 核心 API
![](https://box.kancloud.cn/2016-05-05_572afeeb99496.png)
![](https://box.kancloud.cn/2016-05-05_572afeebc9b50.png)
###MySQL 源代码目录
• BUILD 编译脚本
• client 命令行工具代码(mysql,mysqladmin)
• cmd-line-utils 增强命令行的第三方库 (libedit 如 readline).
• dbug 调试库
• libevent 由于 5.6 支持 某个插件的库
• plugin 插件所在的库
• libmysql MySQL 的库,其他客户端,经如C/PHP 访问 MySQL需要引用这个目录的库
• mysys 核心可移植性或者工具API
• regex 正则表达式库
• scripts 脚本库,如 mysqld_safe 所在 • sql MySQL 的核心所在,用C++所写
• sql-bench 测评脚本目录
• sql-common 客户端、服务器能用代码 • strings 字符串库
• storage 存储引擎所在的库
• vio 底层网络I/O操作库
• zlib 库
#MySQL的配置参数和优化验证
##连接数(connection)配置
max_connections
1. 连接数相关配置
2. 连接数过低演示
##查询缓存(query_cache)配置
query_cache
1. 相同SQL语句的查询会有缓存 2. 查询缓存使用条件
3. 查询配置优化
4. query_cache_size, query_cache_limit, query_cache_type
##查询缓存(query_cache)效果
1:缓存效果计算:
命中率 ≈ qcache_hits / (qcache_hits + com_select) 缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks 缓存利用率 = (query_cache_size – Qcache_free_memory) /
query_cache_size
2:如何提高缓存命中率
3:命中率演示
##打开表缓存(table_cache)配置
table_cache
1. 设置表高速缓存的数目,更快速地访问表
2. MyISAM和InnoDB的table_cache参数区别
3. 调整和效果演示
##临时表缓存(tmp_table_size)配置
tmp_table_size
1. 复杂语句查询时会自动创建的临时表
2. 效果监测和优化
3. 相关配置max_heap_table_size
##其它缓冲区配置
1. sort_buffer_size 增加索引解决
2. key_buffer_size
MyISAM
3. innodb_buffer_pool_size
物理内存的 60%-70%
4. read_buffer_size
##binlog配置
1. 二进制日志配置log-bin
2. 性能和安全的取舍 sync_binlog
![](https://box.kancloud.cn/2016-05-05_572afeec02014.png)
#MySQL运行状态报告
##MySQL 管理工具集
1. show status 太烂了
2. 稍微人性化一点的工具 mysqlreport
##MySQL 管理工具集- percona-toolkit
1. 重复键检测
pt-duplicate-key-checker --host='101.251.196.91' --
user='root' --password='xxx'
2、 pt-mysql-summary --host='101.251.196.91' --user='root' --password='xxx'
#MySQL 插件的开发与了解
• 我们熟悉的大部分功能由插件构成, show plugins • 在 MySQL 运行时加载外部库
• 热加载,热生效
• 使用 C/C++ 开发
• 简单的直接 GCC 编译,复杂的就跟软件差不多
• 注意: /usr/local/mysql/bin/mysql_config --cflags
• 插件的安装和卸载
• install plugin、uninstall plugin
• 插件的原理
• 常规结构
• monitor_plugin_init
• monitor_plugin_deinit
• mysql_declare_plugin(monitor_plugin) • mysql_declare_plugin_end
• 单线程的开发
• 多线程比较常见,用 pthread 创建处理程序
• 插件的类型
• Storage engines
• Full-text parsers
• Daemons
• INFORMATION_SCHEMA tables • 这是啥东东?
• Semisynchronous replication • Auditing
• Authentication
• 打包编译
• 建立 Makefile.am
• 建立 configure.ac
• libtoolize --force
• aclocal
• autoheader
• touch NEWS; touch README; touch AUTHORS; touch
ChangeLog
• automake --force-missing --add-missing
• autoconf
• UDF
• CREATE AGGREGATE FUNCTION udf_floatsum RETURNS
REAL SONAME 'udf_floatsum.so';
• CREATE FUNCTION udf_intexample RETURNS INTEGER SONAME 'udf_intexample.so';
• SELECT udf_intexample(2543);
##MySQL 两个简单的插件开发
• 代码编写
• HelloWorld
• 编译HelloWorld
• gcc -ohello_world.so hello_world.c `/usr/local/mysql/bin/mysql_config --cflags` -shared -fPIC - DMYSQL_DYNAMIC_PLUGIN
• 两个监控插件,一个带端口,一个不带端口
• g++ -o newmonitor.so newmonitor.c `/usr/local/mysql/bin/mysql_config --cflags` -shared -fPIC - DMYSQL_DYNAMIC_PLUGIN -I/var/software/mysql-5.6.20/sql/ - L/usr/local/mysql/lib/ -I/var/software/mysql-5.6.20/include/ - fpermissive
• 编译安装
• ./configure --with-mysql-source=../mysql-5.6.20 --
with-mysql-bindir=/usr/local/mysql/bin/ • 使用
• 代码构成了解
• 评测(通过PHP 模块来操作,对比直接插入SQL、与
使用HandlerSocket 插入)
• 端口读写分离
![](https://box.kancloud.cn/2016-05-05_572afeec39d2b.png)
![](https://box.kancloud.cn/2016-05-05_572afeec6f2a4.png)
##MySQL Innodb-Memcached Plugin 安装
• source /usr/local/mysql/share/innodb_memcached_config.sql
• 注意要把已有的 memcached 关掉
• install plugin daemon_memcached soname "libmemcached.so";
评测
• memslap
• memaslap
• Plugin 评测
• Memcached Cache Get
• Time: 5983989 Gets/Sec: 16711.260665753 • Memcached Cache Set
• Time: 92655677 Gets/Sec: 1079.26468445
##安装监控工具MRTG
- SWOOLE及php网络编程
- LNMP架构与Socket,http协议
- 如何高效学习
- 开发工具箱
- 编写高效的js
- js闭包编写全功能的购物车
- JSON和JSONP
- 多级分类的开发与应用
- 设计安全的登录注册流程
- 前端性能优化
- 前端架构优化
- 使用第三方云服务加速产品开发
- 移动互联网之API开发
- php分层
- 全文检索的实践与部署
- webIM的原理及前后端实现
- 如何配置高效的数据库以及MySQL的代码及插件开发
- NoSql.队列,任务队列
- 构建本机缓存,构建分布式缓存池
- 数据库分库分表的设计
- Nginx原理及模块开发初步
- 无限扩充的数据库架构
- php构建分库分表分布式数据库连接池
- 静态文件上传、分布式存储与分发
- MySQL Cluster,Proxy分析与实践
- 架构解密