最近在做MySQL源码测试,某同学有个新做的**Patch,会新增加一些自定义的命令,实现策略比较”环保”,主要是考虑到低侵入性,通过某
些回调函数做,所以有些地方看着不优雅,有种”跳线”的感觉,不爽, 我于是找时间顺道学习了下官方比较传统的实现策略。下文仅供学习参考。
其实新增加一条命令,从技术角度讲并不复杂,但比较锁碎。首先需要有一份mysql的源代码,我这边桌面开发机上用的是5.1.45版本的源码,工具Visual Studio 2005、Bison。
原理上讲,对于一条client发过来的query,server端会有一个线程被分配过来处理(如果线程缓存有的话会先从里面拿,否则新建一
个),然后这个SQL会交到parser处理,这个parser会做词法分析和语法分析。parser在mysql中主要是通过bison结合Lex、
YACC实现的。其中Lex主要负责词法分析,YACC负责语法分析。
假设我们现在要新增一条命令,类似于show authors;这样的自定义命令,比较show
disk_usage;那么我们就需要先加些符合信息到lex中,再加些命令语法到YACC中(sql_yacc.yy),最后通过bison编译成一个
C文件,再用gen_lex_hash重新生成lex hash文件,下面是详细步骤:
1. 修改lex.h,增加新符号信息,在“static SYMBOL symbols[]”里增加:

2. 在sql_lex.h中enum_sql_command中增加:
3. 在sql_yacc.yy中加上:
和相应的语法信息:
4. 然后就是到了比较熟悉的sql_parse.cc中增加相应的路由信息:
5. 接着我们在sql_show.cc中加上show_disk_usage_command的实现:
6. 对于windows用户来说,需要在sql_yacc.cc中增加几个声明:
7. 代码部分结束。现在我们来更新下sql_yacc.cc & sql_yacc.h。其它这两个文件是由sql_yacc.yy通过bison生成的:) 所以让我们到/sql目录下:
bison -y -d sql_yacc.yy
会生成两个新文件y.tab.c 和y.tab.h,分别替换掉之前原有的sql_yacc.cc和sql_yacc.h即可
8. 现在重新生成下lex hash:
gen_lex_hash > lex_hash.h 然后替换掉/sql下相应的同名文件即可
9. 现在已经大功告成,重新编译一把mysqld工程,然后从client测试下,果然可以了:)
10. 剩下的事就很简单了, 把刚才打的桩子 show_disk_usage_command的实现再细化些即可
参考资料《Expert MySQL》
分享到:
相关推荐
只需把dll或则so放到mysql安装目录下的lib/plugin目录下,然后登录mysql执行如下命令: DROP FUNCTION IF EXISTS `SNOWFLAKE`; CREATE FUNCTION `SNOWFLAKE` RETURNS INT SONAME 'snowflake.dll'; SELECT SNOWFLAKE...
在MySQL数据库系统中,开发人员有时需要根据特定需求扩展其功能,这可能涉及到为MySQL添加新的命令或系统函数。在MySQL 5.6版本中,虽然已经提供了丰富的SQL语句和存储过程,但若要自定义一个全新的命令,就需要深入...
总之,MySQL 5.7.18自定义安装包提供了一个强大的数据库管理工具,通过调试和优化,可以为开发和生产环境提供稳定、高效的数据库服务。对于开发者来说,理解和掌握MySQL 5.7的新特性和最佳实践是至关重要的,这将有...
- **实现自定义命令**:通过对 MySQL 的解析器进行扩展,可以在不改变现有语法的前提下增加新的 SQL 命令。 - **测试与调试**:编写完自定义命令后,需要对其进行详尽的测试和调试,确保新命令能够正确执行且不影响...
- 如果在命令行中执行`mysql`命令报错,可能是因为环境变量未正确设置。你需要将MySQL的bin目录添加到系统的PATH环境变量中。 3. **MySQL 常用命令** - 登录MySQL:`mysql -uroot -pmysqladmin` - 创建数据库:`...
除了上述基本参数,还有其他选项可用于自定义连接,例如`-P`指定端口号(默认为3306)、`-D`指定默认数据库、`-A`禁止自动选择数据库等。熟悉这些参数可以帮助你更灵活地与MySQL交互。 7. **安全性最佳实践**: -...
4. **指定安装路径**:虽然安装向导默认推荐的安装路径为`C:\Program Files\MySQL\MySQL Server 5.1`,但本教程建议修改为`C:\MySQL`,以便后续步骤中能够方便地引用这些路径。如果更改了安装路径,请确保在后续步骤...
例如,可以将安装路径设为`D:\Program Files\MySQL\MySQLServer5.1\`,并将数据文件存储路径设为`D:\Program Files\MySQL\MySQLServer5.1\`,避免占用C盘空间。 - 继续按照向导提示完成剩余步骤,直至安装结束。 #...
SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系数据库的标准语言,MySQL 支持 SQL 标准,使开发者能够通过简单的 SQL 命令来执行复杂的数据库操作。 MySQL 的架构设计为客户端/服务器模式...
确保你的计算机满足最低硬件需求,例如足够的内存(至少512MB,推荐1GB以上)和足够的硬盘空间(MySQL安装文件通常几百MB,但实际使用会随着数据增长而增加)。 1. **Windows上的MySQL安装**: - 下载MySQL安装...
6. **自定义路径**:如果MySQL安装在非默认路径,或者服务配置文件位置不同,可能需要使用`"C:\Program Files\MySQL\MySQL Server X.Y\bin\mysqld.exe" --service=MySQL服务名 start`这样的命令来指定完整路径。...
1. **解压文件**:使用 `tar` 命令解压文件,如 `tar -zxvf mysql-5.5.22.tar.gz`,这将创建一个名为 `mysql-5.5.22` 的目录,包含所有源代码。 2. **编译源码**:进入解压后的目录,使用 `./configure` 来配置编译...
3. **安装各个RPM包**:使用`yum install -y`命令安装解压后的多个RPM包,包括`mysql-community-common`、`mysql-community-devel`、`mysql-community-libs`、`mysql-community-libs-compat`、`mysql-community-...
- 监控MySQL性能,例如通过SHOW STATUS和SHOW VARIABLES命令查看服务器状态,分析慢查询日志优化SQL。 5. **社区支持**: - MySQL拥有庞大的开发者社区,遇到问题时,可以在网上找到大量的教程、问答和论坛讨论,...
5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 ...
5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 ...
- **性能监控**:MySQL 5.7 增加了更多的性能监控工具。 #### 安装包获取 根据提供的链接,可以获取到 MySQL 5.6.24 与 MySQL 5.7.17 的 64位版本安装包。需要注意的是,这些链接可能已经失效或被更新,请确保从...
而MySQL是目前最流行的开源数据库管理系统,它为各种应用提供数据存储和查询功能。在实际使用中,对于运行在MySQL数据库上的Zabbix监控系统,其性能往往依赖于数据库的表空间大小。因此,对于MySQL数据库的表空间...
- 下载完成后,运行mysql-5.5.23-win32.msi,按照安装向导进行安装,选择适合的安装类型(典型或自定义)。 - 在安装过程中,需要设置root用户的密码,这将用于以后的数据库访问。 - 安装后,MySQL服务会自动启动...
2. Linux/macOS:使用`systemctl start mysql`或`sudo service mysql start`命令。 然后,我们将进行**配置MySQL 5.5**: 1. **设置root密码**:首次安装后,root用户可能没有密码。使用命令行客户端执行`mysql_...