轉:Linux 編譯安裝 Mysql5.7

http://broqiang.com/2017/04/18/Mysql-Install-5.7.18-Linux-Compile/ 原文

Linux 編譯安裝 Mysql5.7

Ubuntu 下快速安裝直接 apt 方式便可, 通常的開發環境也足夠了html

我的比較喜歡新版本,通常有新版本就會嘗試一下mysql

此文檔適用於 Ubuntu 16.10 和 CentOS 7 , 其餘版本操做系統未測試linux

此文檔是在Ubuntu 16.10 環境下寫的, 理論上 CentOS 7 除了依賴關係不一樣, 其餘步驟相同便可c++

之後在 CentOS 7 上安裝時如遇到不一樣處會再進行修改,如參考此文檔遇到問題也能夠留言sql

安裝前準備

  • 獲取 Mysqlshell

    當前的最新版本是 5.7.19 ,有了集成 boost 的版本, 這個比較友善 5.7.17 的時候還要單獨去下載 80M 左右的 boost數據庫

    # 下載源碼包 $ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.19.tar.gz # 解壓到src sudo tar xzvf mysql-boost-5.7.19.tar.gz -C /usr/local/src/ # 修改權限 sudo chown bro:bro /usr/local/src/mysql-5.7.19 
  • 安裝依賴關係vim

    # 安裝開發工具包, 通常默認就會已經安裝了 sudo apt install -y build-essential cmake libncurses5-dev bison # CentoOS 用下面方式安裝依賴關係 # sudo yum install -y gcc gcc-c++ cmake bison bison-devel ncurses ncurses-devel autoconf # Fedora # sudo dnf install -y gcc gcc-c++ cmake bison bison-devel ncurses ncurses-devel autoconf 
  • 建立守護進程用戶ruby

    sudo useradd -M -s /sbin/nologin mysql 

編譯安裝

此處只配置了常規參數,更多參數請看 官方參數說明bash

# 進入到以前解壓的源碼包目錄 cd /usr/local/src/mysql-5.7.19/ # 建立編譯後的代碼保存位置 sudo mkdir build cd build # cmake 建立make須要的文件(makefile等) # 參數說明 # -DCMAKE_INSTALL_PREFIX= 指定安裝目錄 # -DEFAULT_CHARSET= 指定默認字符集,若是不設置,安裝完成後也能夠配置 sudo cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8mb4 \ -DWITH_BOOST=/usr/local/src/mysql-5.7.19/boost/boost_1_59_0 -DMYSQL_DATADIR=/data/mysql/data # 編譯,小內存雲主機會出問題,看後面的處理辦法 sudo make # 若是配置高能夠添加 -j number 參數,增長編譯速度 # 如: CPU 是8核的,能夠加上 make -j 6 # 安裝到 /usr/local/mysql $ make install 

配置環境變量

非必須,不過不配置的話之後就都要絕對路徑執行mysql命令……

能夠配置全局, 也能夠配置當前用戶, 我通常配置全局, 由於習慣平時使用普通用戶, 會和root用戶sudo或者su

# 在 /etc/profile.d 下建立一個mysql用的配置文件 # 建議不要直接寫在/etc/profile 中, 功能上沒有區別, 不過配置多了以後可讀性差點 sudo vim /etc/profile.d/mysql.sh # 寫入下面內容 export MYSQL_PATH=/usr/local/mysql export PATH=$PATH:$MYSQL_PATH/bin source /etc/profile.d/mysql.sh 

編輯配置文件

能夠直接放在/etc/my.cnf, 也能夠 /etc/mysql/my.cnf

此處選擇的第三種方式,我的比較喜歡全部和mysql相關的都放在一個目錄下, 方便查找和備份

# 在mysql根目錄下新建一個etc目錄 sudo mkdir /usr/local/mysql/etc # 建立my.cnf文件 sudo vim /usr/local/mysql/etc/my.cnf # 若是是CentOS7, 須要將 /etc/my.cnf 刪除,或者將配置文件直接寫到這個文件中 # 若是直接寫在這個文件中,後面初始化的時候也要指定配置文件爲這個位置,或者就不指定,默認會到 /etc/my.cnf 去找 # 寫入下面內容 [client] [mysqld] basedir=/usr/local/mysql datadir=/data/mysql/data socket=/tmp/mysql.sock character_set_filesystem = utf8mb4 character_set_server = utf8mb4 symbolic-links=0 log-error=/data/mysql/log/mysqld.log pid-file=/data/mysql/run/mysqld.pid 

初始化數據庫

須要注意:

  • MySQL 5.7.6 以前, 可使用 mysql_install_db 初始化數據庫

  • MySQL 5.7.6 以後, 就須要使用 mysqld with the –initialize or –initialize-insecure 初始化

# 建立數據倉庫目錄,日誌目錄,PID 目錄 sudo mkdir -p /data/mysql/{data,log,run} # 將 mysql 目錄權限改爲 mysql 用戶 sudo chown -R mysql:mysql /data/mysql # 初始化, 須要注意,配置文件及目錄必定要正確 sudo /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql

配置 Mysql 自啓動服務

# 複製啓動腳本到init.d下 sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 啓動服務 sudo /etc/init.d/mysqld start # 若是是CentOS,默認會存在一個 mariadb 的配置文件,將它刪除便可,刪除後再啓動就不會出現問題 # $ sudo rm -rf /etc/my.cnf # 中止服務 sudo /etc/init.d/mysqld stop # 配置開機自動啓動 # Ubuntu 自動啓動  sudo systemctl enable mysqld # CentOS 自動啓動 # $ sudo chkconfig mysqld on 

配置root@localhost用戶

Mysql 5.7 開始,初始化數據庫以後再也不是空的root密碼,而是在日誌文件中寫入一個隨機密碼

安裝完以後須要想默認給的密碼修改

# 查詢默認密碼, root@localhost: 後面是密碼 sudo grep 'root'@'localhost' /data/mysql/log/mysqld.log # 用查詢到的用戶登陸密碼 mysql $ /usr/local/mysql/bin/mysql -uroot -p mysql> ALTER USER root@localhost IDENTIFIED BY '1'; # 若是是5.7.6之前版本是下面方式 # mysql> SET PASSWORD FOR user = PASSWORD('new_password'); # 測試,執行下面語句,能夠查詢出用戶,配置正確 mysql> select user,host from mysql.user; # 順便查詢一下字符集, 看看配置文件中的配置是否生效 mysql> show variables like '%char%'; # 正常應該顯示下面結果 +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | utf8 | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.01 sec)

錯誤的處理方式

阿里雲小內存服務器編譯 45% 時候報錯

錯誤:

[ 45%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc.cc.o c++: internal compiler error: Killed (program cc1plus) Please submit a full bug report, ... 

雲主機是1G內存的,編譯到45%的時候會報錯,由於內存不足(阿里雲默認沒有啓用虛擬內存),

編譯 sql.dir 比較消耗內存,正常服務器通常不會配置1G內存,都會夠用

處理方法,本身設置虛擬內存,個人雲主機是1G的內存,因此我配置2G的虛擬內存

# 建立一個 2G 的虛擬文件 $ sudo dd if=/dev/zero of=/swapfile bs=1k count=2048000 # 建立swap文件 $ sudo mkswap /swapfile # 激活 $ sudo swapon /swapfile # 查看是否配置成功 $ sudo swapon -s $ free -m # 若是須要下次開機自動執行,將配置配置到fstab中,此處只是爲了編譯臨時配置,就不添加了 

配置完虛擬內存後觀察了下,用了大概800M的虛擬內存,因此服務器若是是2G的話應該是不會出現這個問題

之前虛擬機和服務器配置的時候都是4G起步,最近給人作項目,碰到了個奇葩的1核心1G阿里雲主機,纔出現了這個問題……

不過這樣處理後編譯的速度會慢一些,硬件配置就這麼多的時候也沒辦法了,享受慢速吧

更新日誌

2017-09-16

更新 Mysql 版本 從 5.7.18 到 5.7.19

2017-05-25

增長小內存服務器內存不足報錯處理方法

相關文章
相關標籤/搜索