Linux中eclipse除錯mysql原始碼

Michael_DD發表於2015-07-24
Linux中eclipse除錯mysql原始碼



系統:Redhat Linux 6.4


準備的包:
 eclipse-cpp-luna-SR1-linux-gtk-x86_64 .tar.gz
 cmake-2.8.4.tar
 mysql-5.6.22.tar.gz
(可以到個人網盤地址下載:)




1.安裝eclipse
安裝JDK (略)
驗證辦法:
[root@mysqlsource BUILD]# java -version
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.4.1.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
[root@mysqlsource BUILD]# 


下載eclipse-cpp-luna-SR1-linux-gtk-x86_64 .tar.gz
並上傳至/usr/lib 目錄
[root@mysqlsource lib]# pwd
/usr/lib
[root@mysqlsource lib]# ll
-rw-r--r--.  1 root root  178101934 Jul 16 10:17 eclipse-cpp-luna-SR1-linux-gtk-x86_64.tar.gz


直接解壓即可:
[root@mysqlsource lib]# tar -zxvf eclipse-cpp-luna-SR1-linux-gtk-x86_64.tar.gz 
[root@mysqlsource lib]# ll
total 174036
drwxr-xr-x.  3 root root       4096 Jul  9  2014 anaconda-runtime
drwxr-xr-x.  3 root root       4096 Jul  9  2014 bonobo
drwxr-xr-x.  5 root root       4096 Jul  9  2014 ConsoleKit
drwxr-xr-x.  9 root root       4096 Jul  9  2014 cups
drwxrwsr-x.  9  100 users      4096 Jul 16 11:10 eclipse
-rw-r--r--.  1 root root  178101934 Jul 16 10:17 eclipse-cpp-luna-SR1-linux-gtk-x86_64.tar.gz


安裝一個vnc,可以登入圖形化介面,即可執行
[root@mysqlsource lib]# cd /usr/lib/eclipse
[root@mysqlsource eclipse]# ./eclipse 






2. 編譯mysql
安裝cmake
#tar
#./configure
#make && make install


編譯mysql
[root@mysqlsource eclipse]# cd /root/mysql-5.6.22/BUILD
[root@mysqlsource BUILD]# ls
autorun.sh          compile-dist           compile-pentium-debug-max         compile-pentium-valgrind-max         SETUP.sh
build_mccge.sh      compile-pentium        compile-pentium-debug-max-no-ndb  compile-pentium-valgrind-max-no-ndb  VERSION.dep
cmake_configure.sh  compile-pentium64      compile-pentium-gcov              extra                                zlib
CMakeFiles          compile-pentium-debug  compile-pentium-gprof             README
[root@mysqlsource BUILD]#


[root@mysqlsource BUILD]# ./compile-pentium-debug-max-no-ndb -c


提示報錯:


-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,


      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:128 (FIND_CURSES)
  cmake/readline.cmake:202 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:406 (MYSQL_CHECK_EDITLINE)


redhat 安裝  ncurses-devel
ubuntu 安裝  libncurses5-dev


redhat 直接 yum install ncurses-devel  即可!!


刪除掉CMakeCache.txt再次執行編譯
[root@mysqlsource BUILD]# ./compile-pentium-debug-max-no-ndb -c




3. 建立eclipse工程


新建C++工程,選擇Empty Project
在工程上右擊
選擇新建資料夾,命名該資料夾,並開啟Advanced,在Link tofolder in the file system中選擇剛才解壓出來的mysql解壓目錄
右擊專案名,在屬性 中,在C/C++ Build選項中,將Builddirectory選擇為mysql解壓後的目錄。確定之後,貌似會自動編譯並生成二進位制檔案。




4.執行
配置。選擇二進位制檔案中的mysqld,右鍵,進行執行配置,主要介紹配置引數:
  --socket=/tmp/mysql.sock  (這裡的mysql.sock要首先手動建立,用於客戶端和mysqld通訊)
  --basedir=/home/liyong/Downloads/mysql-5.6.15/ (不在是預設安裝時的/var/lib/mysql)
  --datadir=/home/liyong/Downloads/mysql-5.6.15/data(這裡的data目錄也要手動建立,以後會存放所有的mysql資料)


執行。錯誤比較都,需要一個一個解決。
a.在/usr/share找不到errmsg.sys
這是出錯時使用哪種語言來報錯,這些檔案全都在安裝檔案的sql/share/目錄下,例如把english目錄下的errmsg.sys複製到/usr/share目錄下即可


b.有一個error,讓呼叫client/mysql_upgrade升級當前資料庫,其實不用升級。


c.有一個error,說沒有許可權訪問mysql.user表,其實是因為還沒有初始化mysql資料庫。
  進入scripts/目錄,執行mysql_install_db.sh來初始化資料庫:
   首先建立mysql組和使用者:
   ./groupadd mysql
   ./useradd mysql -g mysql
   ./mysql_install_db.sh--datadir=/home/liyong/Downloads/mysql-5.6.15/data/--srcdir=/home/liyong/Downloads/mysql-5.6.15
(注意:透過以上方法編譯出來的可執行檔案不全,很多工具沒有,如果要執行mysql_install_db.sh指令碼,還需要在原始碼根目錄下執行cmake.; make ; sudo make install; 
安裝所有的可執行檔案才行)


可能會報許可權錯誤,把data目錄刪掉,新建data目錄,然後把data目錄的許可權改為當前使用者為擁有者。


d.用mysql--socket=/tmp/mysql.sock連線伺服器,此時是使用當前使用者連線資料庫,所以連線上去之後沒有建立database的許可權,只能看到test和information_schema兩個database,如果要建立資料庫報沒有許可權修改""@localhost,兩種方法:
   進入scripts目錄,執行:
   ./mysqld_safe --skip-grant-table --no-defaults
   使用root連線伺服器,刪除使用者名稱為""的使用者:
    delete fromUSER where username="";
    再次使用其他賬戶連線伺服器(因為""賬戶已經被刪除)
    或者直接用root登陸 :
    mysql --socket=/tmp/mysql.sock -u root










來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1749757/,如需轉載,請註明出處,否則將追究法律責任。

相關文章