1. 程式人生 > >centos7源碼安裝MySQL8.0.12

centos7源碼安裝MySQL8.0.12

build literal download files 幹凈 cfi star efault 字符

MySQL官方的安裝布局是:/usr/local/mysql{bin,docs,man,include,lib,share,support-files}

對於編譯布爾選項,可以將值指定為1或ON啟用該選項,0或OFF表示禁用該選項。許多選項配置可在服務器啟動時覆蓋編譯時的默認值的。

1.前期準備:

  卸載系統自帶的mysql及配置文件和庫,運行rpm -qa|grep -i mysq和rpm -qa|grep -i mariadb,使用rpm -e --nodes前兩個名利篩選出來的包,再看看/etc/my.cnf文件是否存在,如果在也刪掉;

  新建無法登陸的mysql用戶及組,運行groupadd mysql,useradd -r -s /sbin/nologin -g mysql mysql;

  安裝必要的軟件包,運行yum -y install install gcc gcc-c++ cmake make ncurses libaio openssl perl

2.解壓縮源碼包:

  先在/root目錄下創建bld目錄(該名稱隨便取),該目錄是用來執行cmake命令的,單獨出一個目錄是為了保持源文件的幹凈;再創建/usr/local/src/mysql目錄用來存放源碼包解壓後的文件,以備後續使用;

  運行tar -zxvf mysql-boost-8.0.12.tar.gz -C /usr/local/src/mysql

3.關於boost的處理:

  MySQL8的源碼包有含boost和不含boost的;如果源碼包不含boost時並且不單獨安裝boost時,那麽在執行cmake時記得加上這些選項 -DDOWNLOAD_BOOST=ON -DDOWNLOAD_BOOST_TIMEOUT=1200 -DWITH_BOOST=/usr/local/boost

  如果源碼包是包含了boost的話,在執行cmake時也要指定boost的位置,boost一般在源碼包解壓後的文件下的boost目錄裏面;

  這次使用含boost的源碼安裝,因為不含boost源碼安裝在下載boost時速度很慢即使把等待時間設置1200秒都可能會斷線。

4.關於字符集和排序字符集:

  服務器字符集。默認情況下,MySQL使用utf8mb4字符集。如果使用其它允許的字符集在mysql-srcfile/cmake/character_sets.cmake文件中列為值CHARSETS_AVAILABLE。

  服務器排序規則。默認情況下,MySQL使用utf8mb4_0900_ai_ci。使用默認字符集及校對規則。

4.執行cmake:

  centos7推薦使用systemd管理啟動任務,所以要開啟systemd的支持;

  cd /root/bld

  cmake /usr/local/src/mysql/mysql-8.0.12 \

  -DBUILD_CONFIG=mysql_release \

  -DWITH_SYSTEMD=ON \

  -DWITH_BOOST=/usr/local/src/mysql/mysql-8.0.12/boost

5.再執行make,如果機器性能一般的話會執行很久,差不多執行了2個小時;再執行make install

6.初始化數據庫

  進入MySQL的基目錄,運行./bin/mysqld --initialize-insecure --user=mysql這條命令不會生成root的初始密碼,如果使用--initialize代替--initialize-insecure的話,會生成root的初始密碼,使用grep password /var/log/mysqld.log即可查看到;

  bin目錄下的mysqld還可以帶參數--defaults-file=/etc/my.cnf,這個參數是指定服務器啟動時的配置參數,有些可以覆蓋編譯時的取值;

  mysqld會執行一下初始化序列:

  1. 檢查數據(data)目錄是否存在,如果不存在mysqld程序會創建它;如果數據目錄不為空,則會報錯,那樣的話就要刪掉data目錄了(編譯時默認是/usr/local/mysql/data,而且執行初始化時也沒有指定my.cnf文件嘛,即使指定了my.cnf文件但是該文件沒有寫明這個配置的話那也是使用編譯時的值或默認值);
  2. 在數據目錄中,服務器創建 mysql系統數據庫及其表,包括授權表,服務器端幫助表和時區表。
  3. 服務器初始化管理表所需的系統表空間和相關的數據結構InnoDB。
  4. 服務器創建‘root‘@‘localhost‘超級用戶賬戶和其它保留賬戶某些保留帳戶已被鎖定且客戶端無法使用,但‘root‘@‘localhost‘僅供管理使用。
  5. 如果在基目錄下的share目錄存在fill_help_tables.sql並可用的話,會執行該文件填充服務器端幫助表。
  6. 如果在執行初始化時帶了--init-file並且有效的話,會執行該參數後面的文件sql,這個文件主要是用於自定義引導序列(目前還不懂),當服務器在引導模式下運行時,某些功能不可用,這限制了文件中允許的語句。這些包括與帳戶管理(例如CREATE USERGRANT),復制和全局事務標識符相關的語句

7.啟動MySQL

  把MySQL的基目錄賦給mysql用戶及組:chown -R mysql:mysql /usr/local/mysql;

  執行systemctl start mysqld,因為在編譯時指定了-DWITH_SYSTEMD=ON,則使用systemd管理任務啟動,也就不會再安裝bin/mysqld_safe文件了;

8.配置自動啟動

  待續

  

  

centos7源碼安裝MySQL8.0.12