MySQL 編譯安裝並且開啟DEBUG模式


因為想分析下mysql中一些操作的內部執行過程,單純的看源碼太枯燥了,所以決定結合mysql的執行過程來分析,mysql作為一款成熟的數據庫軟件,在設計的時候就考慮到了調試的問題,只是想開啟調試模式的話,要編譯源代碼不能直接用rpm的安裝方式,我是編譯安裝的5.7.16的版本,這里記錄一下安裝過程,以后再用就不用四處查資料了。

這里記錄的只是最簡單的編譯安裝模式,只是開啟了DEBUG模式。首先編譯過程中會產生大於3.6G左右臨時文件,時間大約花費30分鍾左右。

編譯或者安裝過程中如果出現任何錯誤,推薦刪除緩存文件,從頭再來,筆者抱着僥幸的心試過,后期登錄數據庫的時候出現了段錯誤,深層原因是線程違規訪問了數據,最根本原因是缺失依賴導致沒走mysql的設置文件,走了默認設置,出現了類似不兼容的問題。

1.首先檢查必須的依賴軟件沖突:

檢查mariadb,這個如果不卸載,安裝完畢之后啟動服務會出錯。

[root@5201351 ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.41-2.el7_0.x86_64
[root@5201351 ~]# rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps

檢查是否安裝了必須的依賴,如果缺失,在cmake的時候會出現各種錯誤,gcc、gcc-c++、bison-devel、ncurses-devel。

2.首先下載源碼包:wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.16.tar.gz 。如果是服務器下載,最好是采用cdn的,速度能達到180+M/S,如果是個人電腦下載,可能mysql默認的是dev的網址,只要版本沒錯,應該就沒問題。

3.解壓:tar xvf mysql-5.7.16.tar.gz。

4.進入解壓的文件夾,執行cmake,執行的時候要帶編譯參數,帶參數的目的一部分是開啟調試模式,一部是因為mysql在編譯的時候回自動檢查部分依賴,如果沒有可以設置自動下載。

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mysql/data \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost \
-DWITH_DEBUG=1 \
-DCURSES_LIBRARY=/usr/lib/libncurses.so \
-DCURSES_INCLUDE_PATH=/usr/include

其中DDOWNLOAD_BOOST、DWITH_BOOST代表如果boost不存在是否自動下載,如果不設置並且本地沒有,編譯會失敗,DWITH_DEBUG=1表示開啟調試模式。如果編譯過程中出現缺失libncurses.so,仍舊是依賴沒有安裝完整,如果本機有,可以手動制定位置,如果沒有就安裝。

5.make:很多人喜歡make && make install,這里最好分開使用,那個地方出了錯,容易分辨。

6.make install:安裝,安裝完畢之后注意最后幾行記錄,它表示生成的mysql.server在什么位置,我的是在/usr/local/mysql/support-files文件夾下。mysql文件在/usr/local/mysql/bin文件夾下。

7.生成配置文件、生成權限。生成各種文件夾。

在/usr/local/mysql/support-files路徑下有mysql自帶的默認配置文件,將這個文件拷貝到/etc目錄下並重命名為my.cnf,mysql啟動的時候會首先在這個目錄下找配置文件,默認的配置文件內容太少了,而且沒指定錯誤文件的位置,這里修改一下,我的配置是:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=0
#
# innodb_buffer_pool_size = 128M
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

這里我手動指定了,數據文件,sock文件,pid文件和錯誤文件的路徑,這些路徑明確了,接下來就好新建文件夾並賦予權限了。

按照設置里面新建好對應的路徑文件:/var/lib/mysql;/var/log/;/var/run/mysqld/,並且給這些路徑都賦予mysql權限,如果不權限不足,后期mysql服務或者mysql登錄會有異常。

chown -R mysql.mysql /var/run/mysqld/
chown -R mysql.mysql /tmp
chown -R mysql.mysql /var/lib/mysq
chown -R mysql.mysql /var/log

因為前面編譯的時候指定了一個參數是:DMYSQL_UNIX_ADDR=/tmp/mysql.sock,這個如果不處理,連接mysql的時候會出現錯誤,其實錯誤的原因也是權限問題,我試着修改這個路徑的權限,但是沒解決問題,最后的方法是新建了快捷方式:ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock。

8.到這里基本的工作就做完了,接下來是生成第一次登陸的密碼,找到mysqld,使用mysqld --initialize命令來生成密碼,這個生成的密碼會打印到屏幕上,應該是在輸出的最后幾行,把這個密碼復制下來,備用。

9.所有工作完成之后,啟動系統,如果想開調試模式,啟動的時候要加參數:/usr/local/mysql/support-files/mysql.server start --debug --console &,如果不出錯誤,myslq就已調試的模式啟動了。調試文件在:/tmp/mysqld.trace中,注意:這個文件大小增長很快,如果不是硬盤很大,不建議mysql在調試模式下長期運行。

安裝過程中一定要仔細注意分析錯誤信息,只要能找准問題所在,解決方案google上都有,mysql在啟動或者登錄過程中出了錯誤,mysql的錯誤日志中也有詳細記錄,有問題先看日志。

安裝過程中參考了很多人的文章,不能一一列舉,感謝大家的幫助,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM