1. 程式人生 > >CentOS 7 編譯安裝mysql 5.7

CentOS 7 編譯安裝mysql 5.7

終於把最後幾臺伺服器全部都從centos6 全部都升級到了centos7,雖說有不少運維指令碼得重寫,總體來說是值得得。

之前伺服器上部署得都是mysql5.5,今天也準備升級到5.7。
編譯mysql比較花費時間,也可以靜下心來寫寫部落格了。

安裝之前最好檢查一下是否已安裝了mysql和boost

rpm -qa | grep mysql    //檢視系統自帶mysql
yum -y remove mysql-*   //解除安裝mysql
rpm -e --nodeps mysql-5.1.73-3.el6_5.x86_64 //解除安裝mysql
rpm -qa | grep boost    //檢視系統自帶boost
yum -y remove boost-* //解除安裝boost rpm -e --nodeps boost-filesystem-1.41.0-11.el6_1.2.x86_64 //解除安裝boost

然後安裝其它得依賴包:

yum install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl cmake

2.準備安裝
首先將boost庫解壓出來

tar -zxvf boost_1_59_0.tar.gz

然後拷貝到一個目錄中

mv boost_1_59_0 /usr/local/boost

然後建立使用者組以及使用者

cat /etc/group | grep mysql     //檢視是否存在mysql使用者組
cat /etc/passwd | grep mysql    //檢視是否存在mysql使用者
groupadd mysql                  //建立使用者組
useradd -r -g mysql mysql       //建立使用者

上面得工作完成以後,就可以開始編譯mysql了,當然,先將mysql的原始碼解壓出來:

tar xzvf mysql-5.7.12.tar.gz 
cd mysql-5.7.12

使用cmake和make命令來進行編譯

cmake . -DCMAKE_INSTALL_PREFIX
=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost make

編譯會消耗較多的時間,期間可以喝杯茶,或者來建立幾個目錄,因為我們指定編譯引數得時候,指定了mysql得資料儲存的目錄,因此,這個時候可以先把目錄都創建出來:

mkdir /usr/local/mysql 
mkdir /usr/local/mysql/data
mkdir /usr/local/mysql/logs
mkdir /usr/local/mysql/pids

最後還有重要得一步,需要將目錄得所有權交給mysql使用者

chown -R mysql:mysql /usr/local/mysql  //需要root許可權

編譯的過程太漫長,上一張正在編譯的圖:
編譯進行中

編譯完成後執行make install 安裝即可
隨後,我們需要配置/etc/my.cnf檔案:

vim /etc/my.cnf                                          

然後寫入引數,最終如下;

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[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%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# 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
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid                                       

3.效能調優
由於編譯的時間是在太長了,這個地方的效能調優不涉及任何的sql優化,只針對一點:使用jemalloc來替換預設的記憶體管理
首先我們需要從網站上下載jemalloc,官網地址:
http://www.canonware.com/jemalloc/

編譯jemalloc:

./configure --libdir=/usr/local/lib
make
make install

為了保證能夠找到jemalloc庫,我們需要設定一下庫路徑,

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig //執行這個命令可以重新整理庫路徑

我們有兩種方式來使用jemalloc來優化mysql
在編譯的時候加入引數:

-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF

然後重新編譯一遍。
也可以修改 /usr/local/mysql/bin/mysqld_safe
在# executing mysqld_safe 下面加上

LD_PRELOAD=/usr/local/lib/libjemalloc.so

4.其它配置
通常我們需要重啟伺服器,最好在重啟伺服器的時候就啟動mysql

cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld //需要root許可權

然後將mysql新增到環境變數,修改/etc/profile檔案

vim /etc/profile   //需要root
//在檔案的最後面加入
#mysql path
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH

最後執行 source /etc/profile

隨後我們也需要多資料庫進行初始化操作。自 mysql5.7 開始,初始化系統表不再使用 mysql_install_db 工具, 而是使用 mysqld –initialize-insecure –user=mysql , 其中 –initialize 表示預設生成一個安全的密碼, –initialize-insecure 表示不生成密碼, 密碼為空

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

現在可以啟動mysql 伺服器:

chkconfig mysqld on

最後我們將root密碼修改一下:

mysql -u root
mysql> use mysql;
mysql>update user set authentication_string=password('123456') where user='root' and Host = 'localhost';
mysql> FLUSH PRIVILEGES;

特別提醒注意的一點是,新版的mysql資料庫下的user表中已經沒有Password欄位了

而是將加密後的使用者密碼儲存於authentication_string欄位
5.tips
執行make命令的時候可以加-j(多程序)引數來加快編譯速度
make -j “cpu 核數”

比如已知CPU是4核心的,可以使用:
make -j 4