當前位置:首頁 » 操作系統 » cmysql源碼

cmysql源碼

發布時間: 2023-08-29 09:56:35

『壹』 編譯環境cmake+gcc怎麼編譯mysql源碼

方法/步驟

1
在安裝mysql資料庫伺服器前,確保你的linux系統是可以連接網路的,下面我們將通過源碼方式來安裝mysql首先通過putty登入進你的Linux系統,確保系統中已經安裝的gcc c++ 等編譯環境,因為mysql從5.5版本開始是使用cmake編譯的,如果三個環境都沒安裝,可以使用下面的命令進行安裝:yum -y install make gcc-c++ cmake bison-devel ncurses-devel

2
查找系統里是否已經安裝了mysql資料庫的相關組件,使用命令:rpm -qa | grep mysql 進行查找,如果查找到,可以使用下面命令進行強制卸載:rpm -e --nodeps 包名
如果你當時在安裝Linux系統時,使用的默認的安裝選項,這一步可以跳過;

『貳』 如何下載mysql資料庫源代碼

看有沒有SQL類,有的話重寫成MYSQL的類就行了,如果沒有的話,操作就多了;如果是想把SQLSE

『叄』 求c語言操作mysql資料庫實例

不知你用的是什麼代碼,不過據我實驗,以下代碼是可用的 【來自 http://blog.csdn.net/andy_yf/article/details/7487307】

#include<stdlib.h>
#include<stdio.h>
#include"mysql.h"

intmain(intargc,char*argv[])
{
MYSQL*conn_ptr;
conn_ptr=mysql_init(NULL);//連接初始化
if(!conn_ptr){
fprintf(stderr,"mysql_initfailed ");
returnEXIT_FAILURE;
}

conn_ptr=mysql_real_connect(conn_ptr,"localhost","mol","newpassword","mol_test",0,NULL,0);//建立實際連接
//參數分別為:初始化的連接句柄指針,主機名(或者IP),用戶名,密碼,資料庫名,0,NULL,0)後面三個參數在默認安裝mysql>的情況下不用改
if(conn_ptr){
printf("Connectionsuccess ");
}
else{
printf("Connectionfailed ");
}

mysql_close(conn_ptr);//關閉連接
returnEXIT_SUCCESS;
}


連接mysql資料庫需要以下步驟:

  1. 安裝mysql開發包, linux下是mysql安裝的時候全選就行了, linux 下直接安裝mysql-devel

  2. 新建工程,占貼代碼,注意修改實際的用戶名、密碼 ...

  3. 設置包含目錄, 在windows下, 找到你的mysql安裝位置,找到include文件夾, 設置ide增加該文件夾到包含目錄 【可能是 C:Program FilesMySQLMySQL Server 5.0include】

  4. 設置連接目錄, 同設置包含目錄一樣 找到mysql的lib目錄,設置ide 【可能是C:Program FilesMySQLMySQL Server 5.0libopt】

  5. 設置連接選項, 需要設置ide連接選項,增加 -lmysql

  6. 編譯連接運行

『肆』 CentOS5.3 - mysql-6.0.10-alpha 源代碼和設置

1,下載mysql資料庫 源代碼 : mysql-6.0.10-alpha.tar.gz 2, 解壓 文件比較多,解壓也一段時間。 src]# tar vxzf mysql-6.0.10-alpha.tar.gz 3, 進入目錄進行 -> 配置,編譯,安裝 ]# cd mysql-6.0.10-alpha 配置生成 makefile 文件 ]# ./configure --sysconfdir=/etc checking for termcap functions library... configure: error: No curses/termcap library found 出現錯誤,也就是生成 makefile 文件出錯了。 [root@localhost mysql-6.0.10-alpha]# make make: *** No targets specified and no makefile found. Stop. 如果你硬要輸入 make 命令是不行的,因為 makefile 根本沒有生成成功。 解決辦法: 我們加入 --with-named-curses-libs=/usr/lib/libncursesw.so.5 進行生成 makefile ./configure --sysconfdir=/etc --with-named-curses-libs=/usr/lib/libncursesw.so.5 Thank you for choosing MySQL! 看到這句話,生成 makefile 成功了。 下面進行make編譯: 需要的時間比較長。 ]# make 編譯安裝雖然花費的時間比較長,但是它應該可以適合任何一個發行版本的 Linux,編譯的中途過程我就不播放視頻出來了,截斷一部分。我現在已經編譯完成。 make[1]: Leaving directory `/opt/mysql-6.0.10-alpha/sql-bench' Making all in win make[1]: Entering directory `/opt/mysql-6.0.10-alpha/win' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/opt/mysql-6.0.10-alpha/win' 最後進行安裝 ]# make install 編譯安裝完畢,有時候需要很長時間,如何判斷是否死機? 注意觀察主機的硬碟燈,編譯安裝時候 硬碟燈是一閃一閃的,有數據讀取。 下面拷貝配置文件 ]# cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf 以後配置mysql ,就修改 /etc/my.cnf 即可 4, 初始化資料庫 # useradd -d /usr/local/var mysql # su - mysql $ /usr/local/bin/mysql_install_db 初始化出現錯誤。 Installing MySQL system tables... 090518 7:16:41 [ERROR] /usr/local/libexec/mysqld: unknown option '--skip-federated' 090518 7:16:41 [ERROR] Aborting 090518 7:16:41 [Note] /usr/local/libexec/mysqld: Shutdown complete 我們解決辦法是,先 刪掉 /usr/local/var 下的 mysql 文件夾 rm -rf /usr/local/var/mysql 然後修改 vi /etc/my.cnf 找到skip-federated 注釋掉 ,也就是改成 ####skip-federated 然後保存退出 su - mysql 用會 mysql 身份, 來重新初始化 /usr/local/bin/mysql_install_db 這次成功了吧,沒有出現錯誤信息。 5, 啟動伺服器 [mysql@localhost var]$ /usr/local/bin/mysqld_safe & 現在成功了, 用 netstat -tnl 看到 3306 熟悉的 mysql默認埠 6, 登陸測試 [mysql@localhost local]$ mysql -u root 成功的話, 出現 mysql> mysql>\s mysql>\q 可以使用 show databases; 一般,如果你是編譯安裝mysql ,建議你像我下面的做法 提升為 root 用戶, su - cp /usr/local/share/mysql/mysql.server /etc/init.d/mysqld mysql 關閉的命令為:/etc/init.d/mysqld stop [root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL.090518 07:26:41 mysqld_safe mysqld from pid file /usr/local/var/localhost.localdomain.pid ended SUCCESS! 就會顯示 關閉成功。 mysql 啟動的命令為:/etc/init.d/mysqld start [root@localhost ~]# /etc/init.d/mysqld start Starting MySQL. SUCCESS! 下面修改 伺服器啟動時候,就自動運行 mysql 6.0 vi /etc/rc.d/rc.local 我把它運行在 tomcat 前面, 然後保存退出。 ##################### 分隔 ###################### --查看資料庫的字元集 show variables like 'character\_set\_%'; show variables like 'collation_%'; 13:15 瀏覽(587) 評論(0) 分類: CentOS 2009-07-21 縮略顯示 CentOS5.3 編譯 mod_jk 1.2.15 鏈接器 整合apache httpd 和 tomcat關鍵字: centos mod_jk 現在我們來做一個整合,也就是當訪問 apache 80 埠時候 遇到 jsp 文件也可以正常訪問。 如果不整合, 你的apache 80 是不能運行jsp文件的, 只能使用8080埠,也就是tomcat 來訪問。 如何整合呢 ? 要藉助一個叫做 apache tomcat 的鏈接器。 下面是官方網站的下載地址,目前為止最新版是 1.2.15。。。 http://archive.apache.org/dist/jakarta/tomcat-connectors/jk/source/jk-1.2.15/ 文章最後我會把這個工具提供下載,如果官方網站太慢的話。 首先下載 jakarta-tomcat-connectors-1.2.15-src.tar.gz 到伺服器 解壓 ]# tar xzvf jakarta-tomcat-connectors-1.2.15-src.tar.gz 注意是進入: jk/native 這個目錄 ]# cd jakarta-tomcat-connectors-1.2.15-src/jk/native 請確認你的 apache 的 apxs 文件位置 native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs 編譯生成mod_jk native]# make 拷貝編譯完成生成的 mod_jk.so 文件, 這里也是要注意你的apache moles 目錄位置 native]# cp ./apache-2.0/mod_jk.so /usr/local/apache2/moles/ =============================================== 修改apache 配置文件 # vi /etc/httpd.conf 在DirectoryIndex中添加 index.jsp <IfMole dir_mole> DirectoryIndex index.html index.jsp </IfMole> 增加關於載入mod_jk的語句: LoadMole jk_mole moles/mod_jk.so Include /usr/local/apache2/conf/mod_jk.conf 添加以下內容( 添加的時候去掉注釋,可能文件不能顯示中文 ): ###### 指出mod_jk模塊工作所需要的工作文件workers.properties的位置 JkWorkersFile /usr/local/apache2/conf/workers.properties ###### Where to put jk logs JkLogFile /usr/local/apache2/logs/mod_jk.log ###### Set the jk log level [debug/error/info] JkLogLevel info ###### Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" ###### JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories ###### JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" ###### 將所有servlet 和jsp請求通過ajp13的協議送給Tomcat,讓Tomcat來處理 JkMount /servlet/* worker1 JkMount /*.jsp worker1 JkMount /*.do worker1 把一些注釋去掉吧,只些一些起作用的語句上去。保存退出。 =================================================== 在/usr/local/apache2/conf/ 下面 建立兩個配置文件mod_jk.conf和workers.propertie 注意: ( 如果沒有 conf 目錄,可以建立,因為我安裝時指定把 httpd.conf 放在 /etc 下的,就沒有 conf 目錄了 ) # vi mod_jk.conf 添加以下內容( 添加的時候去掉注釋,可能文件不能顯示中文 ): ###### 指出mod_jk模塊工作所需要的工作文件workers.properties的位置 JkWorkersFile /usr/local/apache2/conf/workers.properties ###### Where to put jk logs JkLogFile /usr/local/apache2/logs/mod_jk.log ###### Set the jk log level [debug/error/info] JkLogLevel info ###### Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" ###### JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories ###### JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" ###### 將所有servlet 和jsp請求通過ajp13的協議送給Tomcat,讓Tomcat來處理 JkMount /servlet/* worker1 JkMount /*.jsp worker1 JkMount /*.do worker1 ------------------------------------------------------------ # vi workers.properties 添加以下內容: ####### Defining a worker named worker1 and of type ajp13 worker.list=worker1 ####### Set properties for worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300 ------------------- 我的tomcat 配置文件路徑: /usr/local/tomcat/conf/server.xml 最後編輯Tomcat的配置文件server.xml,在 <Host 段中加入: <Context path="" docBase="/usr/local/apache2/htdocs" debug="0" reloadable="true" crossContext="true"/> 重新啟動Apache和Tomcat。。。 [root@localhost bin]# ./shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0 [root@localhost bin]# ./startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0 # /usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl start 剛才我在修改 httpd.conf 可能寫入了一些多餘信息 導致apache配置文件出錯,我注釋就可以了。 在/usr/local/apache2/htdocs/ 下 刪掉 index.html 建立一個index.jsp , 寫入一些簡單的內容: <% out.println( "Hello www.17rumen.com " ); %> 用瀏覽器訪問伺服器 http://192.168.138.128 ,看到正確的頁面了。 說明apache 遇到jsp頁面 ,它可以提交給 tomcat 去處理。。。 18:21 瀏覽(315) 評論(0) 分類: CentOS 2009-07-21 縮略顯示 centos「You don't have permission to access /index.html on this server.」關鍵字: centos Forbidden You don't have permission to access /index.html on this server. 開始我以為我配置出錯,花半天時間都沒有搞定,今天終於搞定了. 原因:index.html是用root用戶建的文件,apache許可權不夠。 解決方法:更改文件許可權;chmod 755 index.html 17:09 瀏覽(498) 評論(0) 分類: CentOS 2009-07-17 縮略顯示 CentOS5.3 編譯安裝 apache 2.2.11 web伺服器(httpd-2.2.11.tar.gz)關鍵字: centos apache (現檢測是否已經安裝apapche,如果有的話請卸載後重新安裝) 1, 首先你必須下載 : httpd-2.2.11.tar.gz 當然你也可以到官方 http://www.apache.org 上下載。 2, 解壓 src]# tar vxzf httpd-2.2.11.tar.gz 3, 進入目錄 # cd httpd-2.2.11 httpd-2.2.11]# ./configure --sysconfdir=/etc --enable-ssl --enable-moles 配置文件放在 /etc 下 no SSL-C headers found configure: error: ...No recognized SSL/TLS toolkit detected 沒有ssl 我們,生成makefile 文件失敗,以後再安裝 openssl 也可以 httpd-2.2.11]# ./configure --sysconfdir=/etc --enable-moles 好,這次沒有發現什麼錯誤, --enable-moles 這個強烈建議加上, 也就是說 以後apache 可以添加其他的模塊,方便很多。 下面進行編譯,make編譯 需要一定的時間,不過比起編譯mysql要快些。 httpd-2.2.11]# make 下面進行安裝 httpd-2.2.11]# make install 安裝完成了。。。 4, 啟動服務 測試一下吧。 ]# /usr/local/apache2/bin/apachectl start & # netstat -tnl 可以看到 80 埠,說明apache啟動了。 tcp 0 0 :::80 :::* LISTEN 打開瀏覽器進行訪問吧。 # ifconfig 查看 Linux 伺服器ip地址。 inet addr:192.168.138.128 http://192.168.138.128 看到It works! 說明正常工作了 cd /usr/local/apache2/ 可以看到 htdocs 就是 web 伺服器的 目錄所在 你可以想我這樣 vi test.html 上面寫一些信息,然後進行訪問。 讓Apache 自動啟動 # echo "/usr/local/apache2/bin/apachectl start &" >> /etc/rc.local (或者手動在/etc/rc.d/rc.local中設置) 好,然後重啟伺服器,就可以發現 apache 自動啟動了

『伍』 能夠看懂MySQL源碼是一種怎麼樣的體驗

首先mysql是c++開發的。

github地址:https://github.com/mysql/mysql-server

很多大型軟體基本都是c/c++開發的。你會了c/c++基本就具備了領略程序世界的大門的鑰匙。

mysql是一個完善的資料庫軟體。

最上層:處理連接,授權認證,安全等

第二層:核心服務功能:查詢解析,分析,優化,緩存以及所有內置函數(日期,時間,數據,加密等),存儲過程,觸發器,視圖等。

第三層:存儲引擎,存儲引擎負責mysql中數據的存儲和提取。每個引擎各有優勢。伺服器通過API與存儲引擎進行通信。介面屏蔽了不同引擎的差異,對上層的查詢過程透明。

你如果去讀它,你基本就可以深入到這些業務點中。然後獲取的提升絕對不是一星半點。你會發現開發一個web應用,開發一個中間件如此簡單。你獲取的是大神級工程師的開發思想,技巧。

舉個例子:MVCC ,innodb 隔離性實現的技術。

設計原理很簡單,也很巧妙。對數據安全和高並發做了平衡處理。

這個是單純學習計算機語言,演算法數據結構給不了的體驗。

當前,你得能看的下去,你有那個恆心。吹牛逼就不要在這里問了?

首先,能看懂 MySQL 源碼的人物,我感覺肯定在技術上是一位大牛,能夠將 C/C++ 語言的 MySQL 源碼看懂,肯定也是一位非常有耐心的技術人,能夠耐著性子去專研。 如果能夠將Mysql源碼研究的很透徹的話,我相信出去到大廠找資料庫內核開發的崗位時,絕對是一個非常巨大的優勢。

能看懂 Mysql 的源碼,首先第一點需要對 C/C++ 語言的知識點非常的熟悉,因為 MySQL 底層幾乎都是 C/C++ 語言寫的,比如指針等。 對於 MySQL 源碼能夠看得的話,我相信在和別人談論資料庫相關的問題時,其實也會更加有專業性和深度,能夠快速的理解對方所說的資料庫問題。

同時,如果對 MySQL 源碼有著很深入了解的話,其實對於資料庫的相關配置優化等也會掌握的更好,因為你對底層原理了解的很透徹,對於自己做的每一件事情都是有理有據。每個資料庫參數是什麼含義,為什麼要這樣設置,背後都有你自己的理解和原因。這對於公司來說,也是非常需要這樣的人才。

當初我校招的時候,其實准備想投資料庫開發相關的崗位,當時其實自己也自學過 MySQL 底層的原理(不過我沒有去研究過源碼)。 MySQL 最主要的還是底層可插拔式的存儲引擎,比如 InnoDB、MYISAM等,重點是 InnoDB存儲引擎。學習看 MySQL 源碼的話,我建議可以選擇其中一個模塊開始入手。

我剛開始看 《MySQL 技術內幕:InnoDB存儲引擎》 這本書的時候,上面講解的非常多的 MySQL InnoDB 的原理。先從原理知識入手,再去看源碼會更加好一些,因為你掌握了整體的代碼邏輯方向。說實話直接上手看 MySQL 源碼,將會是很難的一件事情。我相信那些能夠看懂 MySQL 源碼的人,肯定在看源碼之前,有一定的技術知識儲備。

新同學在去研究某一門開源技術組件的源碼時,不建議直接上手去看代碼,你應該是先去整體了解一下該技術組件的整體原理和框架,源碼層則是更加細節方面的實現,你應該帶著某一個問題去看,有針對性和目的性的去看源碼,這樣你的提升才會更加的快速。

我會持續大數據、資料庫方面的內容,如果你有任何問題,也歡迎關注私信我,我會認真解答每一個問題。期待您的關注

閱讀代碼,一般都是一件繁復的工作。程序員,只要工作需要、或有足夠的時間,都能夠勝任閱讀代碼的工作,特別是資料庫這類功能具體的系統。如果軟體的功能不確定,閱讀起來確實有莫名的困難。年輕時,得到「一套」Z80匯編碼,閑來無聊,嘗試閱讀,數周過去,不得要領。直到在一個忽略了的簡單文檔的闡述上下文中,意識到代碼可能是實現「導彈」穩定飛行的側滾控制系統時,閱讀中的問題瞬間都消失了。

拜託啦,我不只能看懂你的SQL,我還可以看懂VB、C++、資料庫我也看

『陸』 新手如何調試 MySQL看這一篇就夠了

前幾天看到姜老師的舊文 用 VSCode 編譯和調試 MySQL,每個 DBA 都應 get 的小技能[1] , 文末留了一個思考題,如何修改源碼,自定義版本,使得 select version() 輸出自定義內容

調試過程參考 macOS VSCode 編譯調試 MySQL 5.7[2]

內部 Item 對象參考 從SQL語句到MySQL內部對象[3]

源碼面前沒有秘密,建義對 DB 感興趣的嘗試 debug 調試。本文環境為 mac + vscode + lldb

vscode 插件:

mysql 源碼:

補丁: MySQL <= 8.0.21 需要對 cmake/mysql_version.cmake 文件打補丁 (沒有嚴格測試所有版本)

創建 cmake-build-debug 目錄,後續 mysql 編譯結果,以及啟動後生成的文件都在這里

在 mysql 工程目錄下面創建 .vscode/settings.json 文件

內容沒啥好說的,都是指定目錄及 boost 配置,其中 WITH_DEBUG 打開 debug 模式,會在 /tmp/debug.trace 生成 debug 信息

View -> Command Palette -> CMake: Configure 執行後生成 cmake 配置

View -> Command Palette -> CMake: Build 編譯生成最終 mysql 相關命令

發現老版本編譯很麻煩,各種報錯,mysql 5.7 代碼量遠超過 5.5, 只能硬著頭皮看 5.7

首先初始化 my.cnf 配置,簡單的就可以,共它均默認

初始化數據文件,非安全模式,調試用

由於用 vscode 接管 mysql, 所以需要配置 .vscode/launch.json

然後點擊 run and debug mysqld

mysql 啟動,看到輸出日誌無異常,此時可以用 mysql-client 連接

首先在 sql_parser.cc:5435 處打斷點

mysql_parse 是 sql 處理的入口,至於 tcp connection 連接先可以忽略

執行上述 sql 自動跳轉到斷點處, Step Into , Step Over , Step Out 這些調試熟悉下即可

接下來分別調用主要函數: mysql_execute_command , execute_sqlcom_select , handle_query , select->join->exec() , Query_result_send::send_data , Item::send , Item_string:val_str , Protocol_text::store , net_send_ok

啟動 mysql 時 init_common_variables 會初始化一堆變數,其中會調用 set_server_version 生成版本信息,修改這個就可以

看好條件編譯的是哪塊,修改即可, 重新 CMake: Build 編譯再運行

這里不做過深分析,簡單講

sql_yacc.cc 函數 PTI_function_call_generic_ident_sys 解析 sql, 識別出 version() 是一個函數調用

find_native_function_builder 查找 hash 表,找到對應 version 函數注冊的單例工廠函數

mysql 啟動時調用 item_create_init 將這些函數 builder 注冊到 hash 表 native_functions_hash


MySQL 代碼太龐大,5.1 大約 100w 行,5.5 130w 行,5.7 以後 330w 行,只能挑重點讀源碼。最近很多群里的人在背八股,沒必要,有那時間學著調試下源碼,讀讀多好

原文出處:https://mp.weixin.qq.com/s/lJqb0kMtnAUmqUIWCShkIQ

熱點內容
密碼按錯三次怎麼辦 發布:2025-02-01 08:00:24 瀏覽:848
傳送門什麼配置好玩 發布:2025-02-01 08:00:17 瀏覽:997
android監聽輸入法狀態 發布:2025-02-01 07:52:44 瀏覽:280
android仿58 發布:2025-02-01 07:52:41 瀏覽:889
ubuntu解壓zip文件 發布:2025-02-01 07:52:39 瀏覽:223
紅色物業競賽視頻腳本 發布:2025-02-01 07:39:56 瀏覽:715
我的世界領域伺服器 發布:2025-02-01 07:30:06 瀏覽:156
線性表有哪兩種存儲結構 發布:2025-02-01 07:30:04 瀏覽:216
坡向壓縮機 發布:2025-02-01 07:09:10 瀏覽:410
夏新手機初始密碼是什麼 發布:2025-02-01 06:58:23 瀏覽:790