1.【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
2.如何使用mysql_install_db命令初始化MySQL数据目录并指定源码和安装目录?
3.MySQL XA事务源码分析
4.Python读取MySQL数据库基本操作
5.Ubuntu下编译安装MySQL双实例并配置主从复制
6.MySQL全文索引源码剖析之Insert语句执行过程
【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
基于 ARM 架构,码实为避免MySQL版本变化带来的码实额外成本,本文将指导你如何从头构建MySQL 5.7.的码实Docker镜像。首先,码实我们从官方镜像的码实Dockerfile入手,但官方仅提供MySQL 8.0以上版本的码实注册的源码ARM镜像,因此需要采取特殊步骤。码实 步骤一,码实使用dfimage获取MySQL 5.7.的码实原始Dockerfile,注意其原文件中通过yum安装的码实逻辑不适用于ARM,因为官方yum源缺少该版本的码实ARM rpm。所以,码实你需要:在ARM环境中安装必要的码实依赖
下载源码并安装
修改源码配置以适应ARM架构
编译源码生成rpm文件,结果存放在/root/rpmbuild/RPMS/aarch目录
构建镜像的码实Dockerfile、docker-entrypoint.sh脚本(解决Kylin V兼容性问题,码实会在后续文章详细说明)以及my.cnf文件是构建过程中的关键组件。虽然原Dockerfile需要调整以消除EOF块的报错,但整个过程需要细心处理和定制化以适应ARM平台。如何使用mysql_install_db命令初始化MySQL数据目录并指定源码和安装目录?
初始化MySQL数据目录是cas 源码导入eclipse一个关键步骤,可以借助mysql_install_db命令轻松完成。这个命令的目的是设置MySQL的基础结构,包括创建系统表,确保数据库的正常运行。 要使用mysql_install_db,首先要了解其基本语法格式:mysql_install_db [参数]。这个命令的核心功能可以通过传递参数来定制,例如:当你提供--srcdir参数时,如:mysql_install_db --srcdir=/data/source/mysql,它会指定MySQL源码的安装路径,这对于源码安装或者需要特定源文件的情况尤为重要。
另一个常用的参数是--basedir,如:mysql_install_db --basedir=/opt/mysql,它指定了MySQL的实际安装目录,这有助于安装后的配置和管理。
实例演示如下: 首先,在命令行中,以root用户身份运行: [root@linuxcool ~]# mysql_install_db --srcdir=/data/source/mysql 接着,stl源码剖析过时如果MySQL安装在其他位置,可以指定安装目录: [root@linuxcool ~]# mysql_install_db --basedir=/opt/mysql 通过这些参数,mysql_install_db命令确保了MySQL数据目录的初始化过程,为数据库的后续运行奠定了基础。MySQL XA事务源码分析
事务类型外部 XA PREPARE 流程
省流版:
详细版:
外部 XA COMMIT 过程
省流版:
详细版:
外部 XA 2PC 阶段 Log 落盘顺序
------------------- XA PREPARE START -------------------------
------------------- XA PREPARE END -------------------------
.
.
.
.
.
.
------------------- XA COMMIT START -------------------------
------------------- XA COMMIT END -------------------------
本地事务 commit 流程
省流版
与外部 XA PREPARE 2PC 的不同
与外部 XA COMMIT 的不同
详细版:
------------------- PREPARE START -------------------------
------------------- PREPARE END -------------------------
------------------- COMMIT START -------------------------
------------------- COMMIT END -------------------------
外部 XA ROLLBACK 流程
省流版(Not Prepared Rollback 和 Prepared Rollback 的不同之处)
详细版
Not Prepared Rollback(在 end - prepare 之间 rollback)
Prepared Rollback(在 prepare 之后 rollback)
外部 XA RECOVERY 流程
省流版
详细版
本地事务 RECOVERY 流程
省流版
详细版
为什么只遍历最后一个binlog文件:
rotate 到新的 binlog 文件前,redo log 强制落盘,因此redo commit记录会落盘,保证老的binlog文件没有正在提交的事务
Python读取MySQL数据库基本操作
Python通过pymysql库进行MySQL数据库的基本操作实例演示如下: 首先,确保已安装必要的库,如pymysql。使用以下语法创建数据库连接:engine = create_engine('mysql+pymysql://用户名:密码@服务器地址:/数据库名')
接下来,我们进行数据表查询和操作。例如,查询"期权的基本信息"和"期权的风险指标"两个表:从"option_inf"表中筛选"证券名称"列。
从"option_risk"表中筛选Gamma为0的行,以及Delta大于0.5且Gamma不为0的数据。
对数据进行排序,如对"option_risk"表按"收盘价"升序,ipad 开发源码"Delta"和"证券代码"降序。 执行连接操作,包括内连接(交集)、并集、左连接和右连接,以获取所需信息。 在"option_merge"数据框中,进行基础操作,如修改"行权方式"和"交割方式",添加、删除行和列,以及重新组织数据。 将修改后的option_merge数据框写入数据库。在使用数据库软件(如DBeaver或Navicat)时,确保表格式为utf8以支持中文字符。经过调整后,重新运行写入代码。 操作成功后,科技感 模版 源码数据库中应可见新增和修改的数据。为了避免命名规范问题,建议使用英文命名。 想要深入了解更多金融与Python的结合应用,可以考虑购买我的书籍《Python金融量化实战固定收益类产品分析》,它不仅适合初学者,还包含丰富的源代码、视频教程和AI入门资源。Ubuntu下编译安装MySQL双实例并配置主从复制
一.安装前准备,下载Mysql源码包推荐官方站点f /opt/mastermysql/etc/my.cnf。创建管理mysql数据库的shell脚本:mkdir /opt/mysql/init.d, cp support-files/mysql.server /opt/mastermysql/init.d/mysql。赋予shell脚本可执行权限:chmod +x /opt/mastermysql/init.d/mysql。
三. 安装slave实例。将第二步中所有的master字符替换成slave, configure中的DMYSQL_TCP_PORT参数换成。
四.配置master-slave。启动master-slave实例:/opt/mastermysql/init.d/mysql start, /opt/slavemysql/init.d/mysql start。配置master:vi /opt/mastermysql/etc/my.cnf,添加:server-id=1, log-bin=mysql-bin。登陆master实例,创建复制账户:/opt/mastermysql/bin/mysql -uroot,grant replication on *.* repl@localhost identified by ''。查询master状态:show master status\G;记录File,Position的值。登陆slave实例,配置master-slave:change master to master_host='.0.0.1',master_port=,master_user='repl',master_password='',master_log_file='上述File的内容',master_log_pos='上述Position的内容';start slave;
五.测试。在master上创建表,并插入数据,在slave上查看是否有此表和数据。
六.总结。上述步骤是在本人配置成功后边回忆边写的,难免有疏漏的地方,欢迎大家批评指正。只要能够明白源码安装的过程,主从复制便十分简单。
MySQL全文索引源码剖析之Insert语句执行过程
本文来源于华为云社区,作者为GaussDB数据库,探讨了MySQL全文索引源码中Insert语句的执行过程。
全文索引是一种常用于信息检索的技术,它通过倒排索引实现,即单词和文档的映射关系,如(单词,(文档,偏移))。以创建一个表并在opening_line列上建立全文索引为例,插入'Call me Ishmael.'时,文档会被分为'call', 'me', 'ishmael'等单词,并记录在全文索引中。
全文索引Cache的作用类似于Change Buffer,用于缓存分词结果,避免频繁刷盘。Innodb使用fts_cache_t结构来管理cache,每个全文索引的表都会在内存中创建一个fts_cache_t对象。
Insert语句的执行分为三个阶段:写入行记录阶段、事务提交阶段和刷脏阶段。写入行记录阶段生成doc_id并写入Innodb的行记录,并将doc_id缓存。事务提交阶段对文档进行分词,获取{ 单词,(文档,偏移)}关联对,并插入到cache。刷脏阶段后台线程将cache刷新到磁盘。
全文索引的并发插入可能导致OOM问题,可通过修复patch #解决。当MySQL进程崩溃时,fts_init_index函数会恢复crash前的cache数据。
MySQL 优化器源码入门-内核实现 FULL JOIN 功能
本文以实现MySQL内核的FULL JOIN功能为目标,深入解析了MySQL源码的优化器工作流程。首先,作者通过环境和知识准备,明确将重点放在Server执行流程的探索上,从语法规则的修改开始,如在`sql_yacc.yy`中添加新支持,以及在`parse_tree_nodes.cc`中处理FULL JOIN的语法树解析和打印。接着,作者逐步解析了词法、语法分析后的Query_expression、Query_block和Query_term结构,并在关键函数中设置了断点以跟踪执行流程。
在探索了JOIN的优化工作流程后,作者选择在hypergraph_optimizer中实现FULL JOIN,该部分涉及RelationalExpression、JoinHypergraph的构建和AccessPath的生成。尽管过程复杂,但作者通过逐步调试和修改,成功在HashJoinIterator中添加了对FULL JOIN的支持,包括添加新数据成员和状态标记,以及在LEFT JOIN后执行ANTI JOIN流程。
在测试阶段,作者确认了FULL JOIN功能的正确性,通过在代码关键位置的断点观察,确认了FULL OUTER_JOIN的出现,并展示了改造后的迭代器结构。整个过程中,作者强调了在实现过程中面临的挑战和对MySQL历史的参考,最终决定以最少改动的方式完成任务,以保持代码的简洁和性能。
通过这个项目,作者不仅深入理解了MySQL源码,还实现了FULL JOIN功能,为读者提供了一个从零开始实现新功能的实例。