🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#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