由於想分析下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的錯誤日誌中也有詳細記錄,有問題先看日誌。
安裝過程當中參考了不少人的文章,不能一一列舉,感謝你們的幫助,謝謝!