源碼編譯安裝Mysql-5.7.21 for Centos 7.x Linux

大概步驟如下:

  1. 關閉防火墻
  2. 配置sysctl.conf
  3. 檢查操作系統(tǒng)是否安裝了mysql
  4. 下載mysql源碼包
  5. 添加用戶和組
  6. 配置mysql環(huán)境便令
  7. 創(chuàng)建目錄并授權
  8. 解壓mysql
  9. 配置yum源绒极,安裝cmake
  10. 編譯安裝
  11. mysql參數配置
  12. 初始化mysql腳本
  13. 啟動mysql
  14. 登錄mysql

關閉防火墻

systemctl status firewalld 查看防火墻狀態(tài)
systemctl stop firewalld 關閉防火墻
關閉selinux
vi /etc/selinux/config杰妓,將SELNUX=enconfig更改為:disabled

配置sysctl.conf

正式服務器怜俐,配置,個人使用就配置霍狰,主要是優(yōu)化了mysql跟操作系統(tǒng)。

查看mysql是否安裝

rpm -qa |grep mysql
刪除mysql:rpm -e mysql.xxx / yum remove -y mysql
重點來了:
centos 7 因為mysql收費的原因赂摆,不在支持mysql,轉而內部集成mariadb揽涮,那么首先要卸載mariabd
rpm -qa | grep mariadb
如果有依賴,就強制卸載即可
rpm -e --nodeps mariadb-libs-5.x

下載mysql源碼包

http://mysql.com上下載通用的linux源碼
可以直接在服務器上安裝wget命令阴幌,得到mysql源碼下載目錄勺阐,即可下載。
如:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24.tar.gz

添加mysql組

查詢mysql是否存在矛双,id mysql
存在刪除 userdel -r msql
groupadd mysql
useradd -d /home/mysql -g mysql -m mysql
修改密碼:passwd mysql ...

設置環(huán)境變量

切換到mysql用戶下:su - mysql

vi .bash_profile
在PATH=PATH:HOME/bib:后面添加mysql bin目錄渊抽。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/u01/my3306/mysql/bin

export PATH

/u01/my3306/mysql/bin是我的mysql bin目錄
保存退出,執(zhí)行source .bash_profile,加載bash_profile

創(chuàng)建目錄并授權

mkdir -p /u01/my3306/mysql
mkdir -p /u01/my3306/mysql/data
mkdir -p /u01/my3306/mysql/tmp
mkdir -p /u01/my3306/mysql/log/iblog
mkdir -p /u01/my3306/mysql/log/binlog
mkdir -p /u01/my3306/mysql/run
授權:
chown -R mysql:mysql /u01/my3306
對/u01目錄授予mysql:mysql組用戶的權限
chmod -R 775 /u01/my3306
更改目錄權限

解壓mysql

tar -zxvf mysql-boost-5.7.21.tar.gz

安裝cmake編譯工具

yum install -y cmake gcc gcc-c++ ncurses-devel bison zlib libxml openssl

下載boost軟件

boost歷史版本

注意: mysql5.7.2x版本的必須指定1.5.9的boost背零,高版本不行
放到指定目錄解壓即可

進行cmake編譯mysql源文件

在mysql源代碼目錄下執(zhí)行

cmake \
-DCMAKE_INSTALL_PREFIX=/u01/my3306/mysql \
-DMYSQL_DATADIR=/u01/my3306/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/u01/my3306/mysql/run/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DENABLE_DOWNLOADS=1 \
-DWITH_BOOST=/u01/my3306/mysql/boost \
-DWITH_READLINE=on

通過閱讀官方文件http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html腰吟,去除選項-DWITH_READLINE=1和-DWITH_SSL=YES

報錯:

CMake Error at cmake/boost.cmake:81 (MESSAGE):
  You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

  This CMake script will look for boost in <directory>.  If it is not there,
  it will download and unpack it (in that directory) for you.

  If you are inside a firewall, you may need to use an http proxy:

  export http_proxy=http://example.com:80

Call Stack (most recent call first):
  cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)
  CMakeLists.txt:507 (INCLUDE)


-- Configuring incomplete, errors occurred!
See also "/u01/my3306/mysql-5.7.21/CMakeFiles/CMakeOutput.log".
See also "/u01/my3306/mysql-5.7.21/CMakeFiles/CMakeError.log".
需要添加boost
1. 下載boost
2. 解壓到mysql的安裝目錄下,新建一個boost目錄
3. 在cmake參數中添加
-DWITH_BOOST=/u01/my3306/mysql/boost \ 

boost下載:https://www.boost.org/users/download/
對應1.5.9版本

進行編譯安裝

make & make install
make 進行編譯徙瓶,這里時間比較久
make install 進行安裝

mysql參數my.cnf配置

[client]
port=3306
socket=/u01/my3306/mysql/run/mysql.sock

[mysql]
socket=/u01/my3306/mysql/run/mysql.sock

[mysqld]
autocommit=1
general_log=off
explicit_defaults_for_timestamp=true

# system
basedir=/u01/my3306/mysql
datadir=/u01/my3306/mysql/data/
open_files_limit=10240
# 控制mysql接收數據包的大小毛雇,主從應該保證一致
max_allowed_packet=32m
# 控制允許的最大連接數
max_connections=2000
# 最大用戶連接不宜過大
 max_user_connections=200
wait_timeout=100
pid_file=/u01/my3306/mysql/run/mysqld.pid
port=3306
server_id=101
# 禁用DNS查找
skip_name_resolve=ON
socket=/u01/my3306/mysql/run/mysql.sock
tmpdir=/u01/my3306/mysql/tmp
# 默認值5000
open_files_limit=5000
# 設置 LOAD DATA and  SELECT ... INTO OUTFILE 導出限制
secure_file_priv=''

# bin log 
log_bin=/u01/my3306/mysql/log/binlog/binlog
binlog_cache_size=32768
binlog_format=row
# 保留bin-log保存的日期
expire_logs_days=3
log_slave_updates=ON
max_binlog_size=512M
log-bin-index=binlog.index
# 控制mysql如何想磁盤刷新binlog,默認為0侦镇,建議設置為1,
sync_binlog=1

# logging
log_error=/u01/my3306/mysql/log/mysql_error.err
slow_query_log_file=/u01/my3306/mysql/log/slow.log
log_queries_not_using_indexes=0
slow_query_log=1
log_slave_updates=ON
log_slow_admin_statements=1
long_query_time=1

# relay
relay_log=/u01/my3306/mysql/log/relaylog
relay_log_index=/u01/my3306/mysql/log/relay.index
relay_log_info_file=/u01/my3306/mysql/log/relay-log.info

# slave 
slave_load_tmpdir=/u01/my3306/mysql/tmp
slave_skip_errors=OFF
# 禁止非super權限的用戶寫權限,一定要在從庫啟用
# read_only=1

# innodb
innodb_data_home_dir=/u01/my3306/mysql/log/iblog
innodb_log_group_home_dir=/u01/my3306/mysql/log/iblog
innodb_adaptive_flushing=ON
innodb_adaptive_hash_index=ON
innodb_autoinc_lock_mode=1
innodb_buffer_pool_instances=8

# default 
innodb_change_buffering=inserts
innodb_buffer_pool_size=256M
innodb_data_file_path=ibdata1:32M;ibdata2:16M:autoextend
# 控制雙寫緩沖灵疮,避免頁損壞
innodb_doublewrite=1
# 為每一張表建立一個單獨的表空間,不使用系統(tǒng)表空間
innodb_file_per_table=1
# 系統(tǒng)提交事務的方式: 2:每次事物提交壳繁,執(zhí)行l(wèi)og數據寫入catch震捣,每秒執(zhí)行一次flush log到磁盤
innodb_flush_log_at_trx_commit=2
# 文件交換的方式,linux服務器設置為O_DIRECT即可
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_lock_wait_timeout=10
innodb_log_buffer_size=20M
innodb_log_file_size=100M
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=60
# 不能大于open_file_limit
innodb_open_files=4000
innodb_purge_threads=1
innodb_read_io_threads=4
innodb_stats_on_metadata=OFF
innodb_support_xa=ON
innodb_use_native_aio=OFF
innodb_write_io_threads=10

[mysqldump]
quick
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
basedir=/u01/my3306/mysql
datadir=/u01/my3306/mysql/data
pid_file=/u01/my3306/mysql/run/mysqld.pid
tmpdir=/u01/my3306/mysql/tmp

進行初始化數據庫和密碼

./mysqld --initialize --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data --default-files=/u01/my3306/mysql/my.cnf
注意:所有的報錯信息都將會在配置的mysql-err.err日志中體現(xiàn)闹炉,如果沒有配置這個日志蒿赢,將會在控制臺直接輸出。

注意:此條語句執(zhí)行時容易報錯渣触,成功至少要滿足以下幾個條件
1. /u01/my3306/mysql/data目錄存在并且一定要為空目錄羡棵,否則報錯;
2. 如果本機已經存在了其余的mysql嗅钻,請確實/etc/my.cnf文件不存在皂冰,否則會按照/etc/my.cnf中的設置進行初始化店展,datadir會讀取另一個mysql實例的路徑,從而導致報錯秃流。遇到此情況赂蕴,可以先將已經存在的mysql實例停止,然后將/etc/my.cnf文件剪切到此實例對應的datadir目錄中舶胀,再啟動此實例概说,然后重新執(zhí)行初始化命令;

報錯:
2018-03-21T03:53:19.536884Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-03-21T03:53:19.539255Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2018-03-21T03:53:19.539297Z 0 [ERROR] Aborting
  1. 提示timestamp有警告峻贮,需要禁用某些非標準的行為席怪。
  2. data數據庫目錄已經存在文件,需要先刪除該目錄下的所有文件纤控。
    官網:詳情請查看

注意:my.cnf的權限設置為644,chmod 644 my.cnf 用戶設置為mysql 這是mysql的安全機制挂捻。

[root@lnlr bin]# ./mysqld --initialize --defaults-file=/u01/my3306/mysql/my.cnf --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data 
2018-03-21T03:42:15.884264Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-03-21T03:42:16.945180Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-03-21T03:42:17.242546Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-03-21T03:42:18.471497Z 0 [ERROR] unknown variable 'defaults-file=/u01/my3306/mysql/my.cnf'
2018-03-21T03:42:18.471564Z 0 [ERROR] Aborting
提示找不到--defaults-file=/u01/my3306/mysql/my.cnf這個變量
原因:
mysql尋找my.cnf的順序
/etc/my.cnf
/etc/mysql/my.cnf
$mysql_home/my.cnf
~/.my.cnf
解決辦法:
將/etc/my.cnf進行刪除,然后把啟動命令的順序進行調整船万。
將--defaults-file調整到--initialize前面即可
正確命令: ./mysqld  --defaults-file=/u01/my3306/mysql/my.cnf --initialize --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data 

正確后的輸出:
2018-03-21T03:59:48.606609Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-03-21T03:59:50.068792Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-03-21T03:59:50.164896Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-03-21T03:59:50.226389Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 4d9ac927-2cbc-11e8-932c-000c29ca223e.
2018-03-21T03:59:50.227839Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-03-21T03:59:50.532475Z 0 [Warning] CA certificate ca.pem is self signed.
2018-03-21T03:59:50.684543Z 1 [Note] A temporary password is generated for root@localhost: 6GttX,)_-paX
最后一行是密碼

初始化正確命令,無密碼

./mysqld --defaults-file=/u01/my3306/mysql/my.cnf --initialize-insecure --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data
參數說明:

--initialize 是使用mysqld初始化數據庫,并且生成數據庫密碼
--initialize-insecure  同上刻撒,但是不初始化數據庫密碼
無論平臺如何,都 --initialize用于“ 默認安全 ”安裝(即包括生成隨機初始`root`密碼)耿导。在這種情況下声怔,密碼被標記為過期,
您將需要選擇一個新密碼舱呻。使用該 --initialize-insecure選項醋火,不會 `root`生成密碼; 假設您在將服務器投入生產之前將及時為帳戶分配密碼。
--defaults-file 指定使用my.cnf配置文件
--basedir數據庫的根目錄
--datadir數據庫數據文件目錄

安全啟動mysql數據庫

啟動命令:
./mysqld_safe --user=mysql --defaults-file=/u01/my3306/mysql/my.cnf &
ctrl+c結束
ps -ef | grep mysql查看mysql進程
[root@lnlr bin]# ps -ef | grep mysql
root      8701 25911  0 13:24 pts/0    00:00:00 /bin/sh ./mysqld_safe --defaults-file=/u01/my3306/mysql/my.cnf
mysql     8761  8701  0 13:24 pts/0    00:00:00 /u01/my3306/mysql/bin/mysqld --defaults-file=/u01/my3306/mysql/my.cnf --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data --plugin-dir=/u01/my3306/mysql/lib/plugin --user=mysql --log-error=lnlr.err --pid-file=lnlr.pid
root      9218 25911  0 13:29 pts/0    00:00:00 ./mysql -uroot -p
root      9250  7572  0 13:29 pts/1    00:00:00 grep --color=auto mysql
啟動mysql數據庫:
1. 使用mysqld 啟動
2. 使用mysqld_safe安全啟動
卻別:
安全啟動的好處為在誤殺了mysql進程的時候箱吕,mysqld_safe守護進程將會自動的把mysqld進程啟動起來芥驳。
小板凳: 我使用mysqld_safe啟動的時候,拷貝命令將會報找不到--defaults-file茬高,手動敲入就可以兆旬。很奇怪。

登錄mysql怎栽,并修改密碼

./mysql -uroot -p
輸入密碼進行登錄
修改密碼:
alter user 'root'@'localhost' identified by 'root';

處理遠程登錄

通過以上步驟丽猬,在localhost可以使用mysql,但是想要遠程訪問,將會報錯熏瞄。
ERROR 1130: Host '192.168.21.249' is not allowed to connect to this MySQL
原因:防火墻或該用戶只能localhost訪問脚祟。
解決辦法:
1. 將mysql數據庫下user表中的host字段更改為%即可
use mysql; update user set host = '%' where user = 'root'; quit;
重新啟動mysql數據庫即可,三條命令一次性執(zhí)行;還可以將更改密碼同時放入强饮。

2. 可以利用授予權限
沒嘗試

后續(xù)設置

1. 將/u01/my3306/mysql/my.cnf拷貝到/etc目錄下愚铡,mysql默認先尋找該目錄,這樣免得每次啟動都需要帶上--defaults-file路徑
cp /u01/my3306/mysql/my.cnf /etc

2. 將安裝目錄下的/u01/my3306/mysql/support-files/mysql.server拷貝到/etc/init.d目錄下
cp /u01/my3306/mysql/support-files/mysql.server /etc/init.d

3. 添加mysql.server到服務中
chkconfig --add mysql.server

4. 測試使用systemctl 啟動mysql
systemctl start mysql.server

5. 查看是否啟動成功
ps -ef | grep mysql
有mysql服務則啟動成功

6. 添加到linux服務器開機自啟動
systemctl enable mysql.server

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沥寥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柠座,老刑警劉巖邑雅,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妈经,居然都是意外死亡淮野,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門吹泡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骤星,“玉大人,你說我怎么就攤上這事爆哑《茨眩” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵揭朝,是天一觀的道長队贱。 經常有香客問我,道長潭袱,這世上最難降的妖魔是什么柱嫌? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮屯换,結果婚禮上编丘,老公的妹妹穿的比我還像新娘。我一直安慰自己彤悔,他們只是感情好嘉抓,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜗巧,像睡著了一般掌眠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幕屹,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天蓝丙,我揣著相機與錄音,去河邊找鬼望拖。 笑死渺尘,一個胖子當著我的面吹牛权她,可吹牛的內容都是我干的昌抠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼秋忙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了医咨?” 一聲冷哼從身側響起枫匾,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拟淮,沒想到半個月后干茉,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡很泊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年角虫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片委造。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡戳鹅,死狀恐怖,靈堂內的尸體忽然破棺而出昏兆,到底是詐尸還是另有隱情枫虏,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布亮垫,位于F島的核電站模软,受9級特大地震影響,放射性物質發(fā)生泄漏饮潦。R本人自食惡果不足惜燃异,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望继蜡。 院中可真熱鬧回俐,春花似錦、人聲如沸稀并。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碘举。三九已至忘瓦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間引颈,已是汗流浹背耕皮。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝙场,地道東北人凌停。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像售滤,于是被迫代替她去往敵國和親罚拟。 傳聞我的和親對象是個殘疾皇子台诗,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容