本文目錄一覽:
mysql5.6.33源碼編譯
重點不是這裡,重點是下面的錯誤:
[ERROR] Plugin ‘InnoDB’ init function returned error.
[ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported table type: InnoDB
[ERROR] Aborting
把你的 datadir 數據目錄清空。重新運行mysql_install_db
如何在Windows下編譯或調試MySQL
用vs code 就可以了。
Visual Studio Code
Visual Studio Code(簡稱VS Code)是由微軟開發的,同時支持Windows、Linux和macOS操作系統的開源文本編輯器。它支持調試,內置了Git 版本控制功能,同時也具有開發環境功能,例如代碼補全(類似於IntelliSense)、代碼片段、代碼重構等。該編輯器支持用戶自定義配置,例如改變主題顏色、鍵盤快捷方式、編輯器屬性和其他參數,還支持擴展程序並在編輯器中內置了擴展程序管理的功能。
安裝LLDB
LLDB是LLVM編譯器的一部分,推薦使用Homebrew安裝LLVM工具集,不建議使用系統自帶的LLDB,安裝前必須先創建證書否則無法安裝,步驟如下:
創建完成後,開始安裝LLVM
brew install llvm –with-python@2 –with-lldb
安裝插件
VS Code自帶有debug功能,這裡我推薦使用LLDB Debugger插件。
接下來,為項目配置調試參數。
配置調試參數
使用VS Code打開MySQL源碼目錄,在側邊欄選擇debug欄目,添加配置,program輸入需要調試的程序路徑,這裡選擇你編譯好的mysqld路徑,args輸入程序啟動所需的參數,通常會指定mysqld的配置文件。這樣就配置好了,是不是很簡單。
啟動調試
點擊啟動按鈕,啟動後如果沒有設置斷點會mysqld會正常啟動,如果觸發了斷點會如下圖顯示。
整個調試窗口基本分為六部分,所有的調試操作都在這裡完成:
1: 顯示變量信息
2: 設置重點關注的變量
3: 顯示調用棧信息
4: 設置斷點信息,在代碼行號前也可以設置斷點
5: 代碼顯示區域,上方是調試按鈕,包括 continue/stepover/step in/step out/restart/stop
6: 調試終端輸入輸出區
斷點設置
在代碼行號前點擊即可在該行為設置斷點,也可以根據條件設置斷點。以設置ConditionalBreakpoint為例,當程序啟動後會按照你設置的條件表達式判斷是否觸發斷點。
Conditional Breakpoint這種方式用在目標變量達到某條件時觸發斷點,其餘則跳過繼續執行。比如:設置變量等於目標表名時觸發斷點,其餘表則跳過,相對函數名斷點省去很多手工跳過操作。
遠程調試
假如你想調試遠程Linux服務器上的MySQL上面的方法就不合適了,這時需要遠程調試。lldb和gdb都支持遠程調試,這裡以lldb為例。
需要先在遠程主機上安裝lldb,使用yum安裝,源地址在這裡
remote$ yum install -y llvm-toolset-7
安裝完成後,啟動lldb-server
remote$ /opt/rh/llvm-toolset-7/root/usr/bin/lldb-serverplatform –listen “*:9191” –server
接下來,在VS Code調試界面中新增配置項。
{
“type”: “lldb”,
“request”: “attach”,
“name”: “Remote attach”,
“program”: “~/mysql5626/usr/local/mysql/bin/mysqld”,
“pid”:”target_pid”,
“initCommands”: [
“platform select remote-linux”,
“platform connect connect://remote_host:9191”
],
“sourceMap”: {
“/export/home/pb2/build/sb_0-15908961-1436910670.17/mysql-5.6.26”: “/Users/hongbin/workbench/mysql-server”
}
},
program: 本機也要拷貝一份目標程序,加載
pid: 填寫遠程主機的mysqld進程id
sourceMap: 填寫mysqld編譯的代碼路徑與本機代碼庫路徑的映射,這樣調試時代碼才可以和程序關聯在一起看
注意:記得調試前將代碼切換到與目標程序版本一致的branch
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。。。 文章最後我會把這個工具提供下載,如果官方網站太慢的話。 首先下載 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 modules 目錄位置 native]# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/ =============================================== 修改apache 配置文件 # vi /etc/httpd.conf 在DirectoryIndex中添加 index.jsp IfModule dir_module DirectoryIndex index.html index.jsp /IfModule 增加關於加載mod_jk的語句: LoadModule jk_module modules/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 ” ); % 用瀏覽器訪問服務器 ,看到正確的頁面了。 說明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 當然你也可以到官方 上下載。 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-modules 配置文件放在 /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-modules 好,這次沒有發現什麼錯誤, –enable-modules 這個強烈建議加上, 也就是說 以後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 看到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 自動啟動了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/255191.html