MySQL 編譯安裝而且開啓DEBUG模式

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

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

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

1.首先檢查必須的依賴軟件衝突:c++

檢查mariadb,這個若是不卸載,安裝完畢以後啓動服務會出錯。sql

[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在編譯的時候回自動檢查部分依賴,若是沒有能夠設置自動下載。socket

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,仍舊是依賴沒有安裝完整,若是本機有,能夠手動制定位置,若是沒有就安裝。ui

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的錯誤日誌中也有詳細記錄,有問題先看日誌。

安裝過程當中參考了不少人的文章,不能一一列舉,感謝你們的幫助,謝謝!

相關文章
相關標籤/搜索