|
|
楼主 |
发表于 2019-9-28 19:10:26
|
显示全部楼层
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn
7 i# I" u5 }% Z) {" o0 v0 U5 [+ [3 s% V6 M3 E
7 V! D, h% W$ E4 L( F- t8 @/ }' A1 x7 O; j, M2 e( f
Mysql5.7版本更新后有很多变化,比如json等,连安装都有变化,他安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost,还有后续文章percona-xtrabackup需要用到boost库
. p4 O" o1 L7 l" v! {6 o7 Z. C% I8 B# a7 X6 u( o
下载软件, `! n: S" k% ?# }
到usr/local目录下:5 O2 C* v7 O5 @9 [
* |/ `+ J% J3 N3 D+ L) _& t
cd /usr/local1 k# A e1 A1 ? R0 h7 U- R
wget http://downloads.sourceforge.net ... boost_1_59_0.tar.gz8 T2 l! C3 e5 k& `0 `" i
wget http://cdn.mysql.com//Downloads/ ... boost-5.7.11.tar.gz" m/ V% a% Z9 ~2 V6 T4 v
wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11.tar.gz
3 c0 s% X% {. z3 S; n安装boost' h3 h9 D1 G/ H# ^5 T: f+ {
注:此处如果只为安装mysql其实可以不用安装的,解压就好,到时安装mysql时引用目录,不过percona-xtrabackup需要用到,所以我安装了。
* H+ |2 O- j; \7 I$ h0 t7 B" {2 S2 K/ K( Q
tar xzf boost_1_59_0.tar.gz" b! m2 c# ], c" T5 P
cd boost_1_59_0
* u3 z* d2 `* i+ w* H/ a./bootstrap.sh* l) i6 H& W$ _4 ^: f
./b2 install 7 y9 N, m0 w, J3 Y8 \' n, ]# X
不带boost的mysql源码安装
: ^9 k, ?) H i( Z1、安装依赖包
$ j' _. z% N- c& z% m7 Y" y2 {. Z6 l5 [7 I, S2 F) d
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake* Y: r" B2 {+ ^+ J q
2、添加禁止登陆的mysql用户- C; q0 M& a$ Y' E5 i! z
k3 }. U6 [7 A- `2 v2 _2 |7 \groupadd mysql
0 k% Z. n5 D; j6 Zuseradd -r -g mysql -s /bin/false mysql
! R" C- C. W+ K- W( a8 X4 M0 S3、编译安装5 q( z( j- b; j; a7 E( ~
" A' a& i5 ]# `) B
从MySQL 5.7.5开始Boost库是必需的, |5 J" K( \+ |, I; i Y8 o
9 `% n" O; q$ q' i- m! ~5 y- w
复制代码- c) E9 L( v" h) }( v
mkdir -p /data/mysql
- v0 ^" G% a$ i% A% x+ G4 _4 C/ k- ?tar xzf mysql-5.7.11.tar.gz) J, n. a4 v+ ?9 e5 b+ D, Z
cd mysql-5.7.11' V) w1 p* G4 X* T) s
cmake . \
7 |" B8 V t% m# Y/ l0 b4 q0 g( \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \- J3 W+ G* [, S; R* w# `5 p" n
-DMYSQL_DATADIR=/data/mysql \
# K* W/ q5 C/ A. ^! J" f+ R4 F -DDOWNLOAD_BOOST=1 \
[/ F- t4 i7 l( K8 |6 j -DWITH_BOOST=/usr/local/boost_1_59_0 \
' z- R5 @2 {. {0 _0 C1 a -DSYSCONFDIR=/etc \
: S9 B: }, l8 m) |# v, q -DWITH_INNOBASE_STORAGE_ENGINE=1 \4 n6 ~8 w% ?( [4 r4 V, r
-DWITH_PARTITION_STORAGE_ENGINE=1 \" X# X! t/ O4 w) \; g9 }- I
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
, r! C" V; J! Q8 T! M+ N$ C- p" u -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
0 ?+ x7 a+ [$ F7 S1 P7 S -DWITH_MYISAM_STORAGE_ENGINE=1 \
) h$ ^2 l! c& J3 B0 A: ` -DENABLED_LOCAL_INFILE=1 \
( q, i+ u$ l# p- h# x -DENABLE_DTRACE=0 \
3 o. y L$ M/ O/ z -DDEFAULT_CHARSET=utf8mb4 \
. B J! U1 [5 `; s9 s -DDEFAULT_COLLATION=utf8mb4_general_ci \3 a" E/ N4 ~3 X
-DWITH_EMBEDDED_SERVER=14 ?4 B$ R/ A/ z
4 V4 K" Z F+ g* E, Y4 {0 f( }
make5 A# _& N( h. Q1 O W+ `
make install$ w! F' _9 o! K
复制代码: f8 B5 ^8 w$ q
8 d2 C0 s9 d) D8 Q4 H
) D, ?0 z. |3 D! u6 y4、配置开机启动项1 i6 j2 U% M% N# L2 p* D9 q* W$ z" e
9 M# |6 s1 V: H) Q5 a/ Bcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld9 a1 T, s5 F; t; z1 P2 y4 Q7 m
chmod +x /etc/init.d/mysqld
5 u7 M8 i; z1 ?: P1 ychkconfig --add mysqld+ I3 t% y, k7 C1 F6 J+ o& p' X
chkconfig mysqld on
! b; I% P$ \2 Z$ Z# o5、配置/etc/my.cnf 仅供参考,可以不配,用默认的。
" {2 p0 P4 ~% P' `' Q t) ?6 E0 ^* y5 k
复制代码
' M* X$ n( ^5 H3 Ucat > /etc/my.cnf << EOF
! L, S2 H( F6 T3 Q( M[client], F% w9 Q( ?2 t0 A, x6 a
port = 3306; I4 ^/ O5 J* h3 m! B' T( R
socket = /tmp/mysql.sock& ~# B% w" z4 d& ^( m+ l
default-character-set = utf8mb4/ L) M# z/ x F7 E
3 Y z9 H) G5 W" |8 l3 T( w, ]
[mysqld]
- `& a% [7 Q* B0 w4 q! Sport = 3306. k; {$ u" m1 [: o$ m0 T2 W$ _
socket = /tmp/mysql.sock2 u1 p6 ], N5 ?8 N$ [! y
$ L5 S* v9 W* z" w
basedir = /usr/local/mysql9 c2 z& |" P& D) s- G7 y
datadir = /data/mysql
. a" {! K1 b0 k+ A8 vpid-file = /data/mysql/mysql.pid
2 o- F `/ t6 _+ cuser = mysql
7 H: B: e1 P5 w: Z! r/ x! _bind-address = 0.0.0.0
- p$ f/ v$ Q) a ^+ P( j3 z$ Fserver-id = 1
' i, m3 w& |# ]% L+ t5 Y 9 m" ~ I6 L8 k1 ~. k' G
init-connect = 'SET NAMES utf8mb4'% \+ v& `, E7 _- N" |+ n/ U! K
character-set-server = utf8mb48 Z3 c& ^ |7 r! ]& o
* H+ h$ E8 U, `#skip-name-resolve8 d' Y7 x' `' D6 m
#skip-networking
2 f1 } g( H. M& kback_log = 300
, H8 \% `6 U* R* V m0 ^2 N( A. m& W
; s& u8 E; d- R3 k2 zmax_connections = 1000
8 W- Y- ~# B$ I$ S9 ~& umax_connect_errors = 60003 ?% z1 A% N. J; }
open_files_limit = 65535 s4 ` i, T6 r/ M
table_open_cache = 128
& J% i$ q8 B9 P0 ?* Bmax_allowed_packet = 4M
) d a* u. a1 W+ `+ j" Z a. M7 \! Lbinlog_cache_size = 1M1 s. Y5 V0 b' a0 T- z5 p1 T# m; D' S
max_heap_table_size = 8M; X. c8 i! ]9 S
tmp_table_size = 16M
1 F/ |% q. o+ I2 A
A# q+ \7 a0 |7 f( Cread_buffer_size = 2M0 e- @9 C- ?# u& b5 B
read_rnd_buffer_size = 8M
; j x( V" e0 w/ b ~% l& [+ usort_buffer_size = 8M8 K* b' ^- K, _! v* ^
join_buffer_size = 8M! M& \: ?0 J# a( R. C% x
key_buffer_size = 4M4 @7 `1 D; ?. X( W6 `
2 f) l$ \* ], A
thread_cache_size = 8, J* Z2 r( M7 h1 N, }
( |4 @& Y W- \2 s
query_cache_type = 1
; F& J# W3 `* I9 t! Lquery_cache_size = 8M( c* \) B! B2 D3 b+ U8 `4 P6 @
query_cache_limit = 2M& ^& ~8 p7 s: Q1 m+ g! W
# W+ b! J" v( N4 S4 r1 Ift_min_word_len = 4( V } K r% B- E5 P- ^5 D5 m
) |5 ]8 a5 |: D
log_bin = mysql-bin8 Q: |4 Y5 M2 t" p
binlog_format = mixed3 F) {% w% c4 O+ [& t
expire_logs_days = 30; m! h9 W. k0 }" ]: [
! c9 M' y* ^+ F6 Qlog_error = /data/mysql/mysql-error.log
* O# B' c1 k- n1 }slow_query_log = 1/ Z1 I# w3 G) O, c
long_query_time = 1- |* u/ ~( x7 L8 J* m
slow_query_log_file = /data/mysql/mysql-slow.log. X3 f. } x9 |- i% e
, H* I$ J& Q/ c, h' ^* W- Eperformance_schema = 0
* Y/ `/ j& k" vexplicit_defaults_for_timestamp8 a8 B6 E% e8 N& W$ \) T0 F
+ b$ `8 p. D! Z9 T. c, [ }; L# U#lower_case_table_names = 1
! x' J4 X1 B, Y5 s3 l 1 Y( s- X; M7 O3 o+ Y# }
skip-external-locking2 T; W+ W* D6 `4 [# J$ E% v
% ^3 I7 z& [9 c M, fdefault_storage_engine = InnoDB4 a+ G) t: X- U" c p2 x+ X8 x+ T
#default-storage-engine = MyISAM
# z* v% p" m4 rinnodb_file_per_table = 1$ S, }* \4 Q6 c8 c* J
innodb_open_files = 5005 q" e5 \" R7 |% f3 l" x8 E2 V
innodb_buffer_pool_size = 64M
/ i0 V9 |6 s* L6 B3 Oinnodb_write_io_threads = 4* A$ q2 V. p0 S8 L d& f
innodb_read_io_threads = 42 _7 r+ x N7 H4 [( a' w/ }1 f
innodb_thread_concurrency = 0. {. u8 J0 K. t: C' d1 J
innodb_purge_threads = 1
6 _0 V1 ~0 a7 Sinnodb_flush_log_at_trx_commit = 2! a) v7 m. `, B: d
innodb_log_buffer_size = 2M
. h; O: J5 y2 w) p1 O( X; Iinnodb_log_file_size = 32M* b: p6 i8 b {3 o1 a$ ?/ l7 |
innodb_log_files_in_group = 37 w( E9 D" {$ N! D" {
innodb_max_dirty_pages_pct = 90
5 S% l! d x6 n0 Einnodb_lock_wait_timeout = 120, J- \" O3 [$ Q0 S$ j: [1 k
# }2 \! _$ T1 |7 ]( m0 Xbulk_insert_buffer_size = 8M5 m- |% z- T9 ~5 g, X* g) F G
myisam_sort_buffer_size = 8M
' g! }6 |# q8 V" n) s% u# U2 O6 T4 hmyisam_max_sort_file_size = 10G
& S9 ^! F' o% Emyisam_repair_threads = 18 f! e: P5 s7 I4 r, a- I; u2 z2 E0 V
% ~7 Y: J, Z$ u0 { G b- {4 A' n
interactive_timeout = 28800" w5 R! ^: j% ]9 W) |$ d/ M7 W; z2 W# G
wait_timeout = 28800- V% l6 X" w% a1 s! E( b. f
h8 {& O: I+ a& E
[mysqldump]
2 h# k. g) K3 f+ V Hquick
$ x, z# m5 h5 p5 z* ~max_allowed_packet = 16M
6 N! D) h, d2 j7 E % L9 ~+ y: ^9 t) L1 y
[myisamchk]
. E; a& x- _; I- s8 Kkey_buffer_size = 8M9 P U- O; K1 W* ]0 W$ z8 L
sort_buffer_size = 8M; I" V; |3 \( |7 x/ j
read_buffer = 4M$ c, w; A0 o# B- A
write_buffer = 4M- s5 c& C$ ~4 S
EOF# m! M$ |5 M4 n, E8 i% g
复制代码
6 R% f1 m' [, r; z6、初始化数据+ M, D! G# u+ c8 ]: D) ]
" r8 t- O& Z( l2 {5 v; N1 H Q: Z/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
) Y3 b3 `6 E( a9 Q6 z! d注: 之前版本mysql_install_db是在mysql_basedir/script下,5.7放在了mysql_install_db/bin目录下,且已被废弃
- G# x. E+ i8 ^( u5 s! A“–initialize”会生成一个随机密码(~/.mysql_secret),而”–initialize-insecure”不会生成密码
9 ~: }3 \1 T- R2 _5 _4 Q–datadir目标目录下不能有数据文件
+ B; W" @ ]$ ]0 k4 x& ^6 n3 X6 m+ r1 B
7、启动数据库
0 ]" q- h7 |3 `7 r& P5 `/ \! h8 x- I( r& a
service mysqld start4 Z6 j+ a- X- s2 d
7 y2 {& U7 d. Z9 P! V0 d( A0 V
' f Y$ t1 X, K" d& U ]+ v6 }
带boost的mysql源码安装
1 j& G+ f9 M5 U- J6 B. P! V1、安装依赖包& l% K7 Z2 v v# v; w! c1 ?
& o6 K" P: t1 R! xyum -y install make gcc-c++ cmake bison-devel ncurses-devel bison perl perl-devel perl perl-devel
% {% H4 m9 p) h( @2 a. n2、解压到/usr/local目录下' H* Y; Y) v$ {. [4 a
( h- b1 ~6 _4 p- ^
tar -zxvf mysql-boost-5.7.11.tar.gz -C /usr/local
& K C" M h" Z2 d& ~: n6 b' q# d3、创建mysql组和用户$ Z/ E4 S2 D2 s* l
# Q ?( C$ n0 P- x- Q
groupadd mysql. W' h% P* g3 E! }$ M
useradd -r -g mysql -s /bin/false mysql# q3 n3 J+ t* e5 Y# Z. k
4、编译mysql2 z" L' l. @) K
( F6 x* Z1 e# T8 J3 ncd /usr/local/mysql-5.7.11/
/ D; C m3 o/ L4 E! [# @& |7 Zcmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost
+ g. ^# s; V7 q1 Y5 u$ I6 ymake5 l) ~/ U" G) K9 f! l* {7 N0 j
make install
: d0 `' U) I, X5 F7 l# x7 n3 g$ f5、把原来的/etc/my.cnf备份4 y$ |( M7 s. W+ g6 P& J. y
5 j4 Y% l% z2 H: q: }* ^/ k6 a
cp /etc/my.cnf /etc/my.cnf.bak
( H6 G$ }2 p# t2 g3 u# ]" [& L% frm -f /etc/my.cnf
9 w4 f+ _7 c/ N- \8 ]. `; ]9 K6、把安装目录用户和组更改为mysql3 I- M2 B5 x- ~
1 X% m; ~9 h$ K& ^$ m
cd /usr/local/mysql
1 Y1 Q$ M: ]5 M; S+ c: pchown -R mysql .
: q( y$ ~1 c& Schgrp -R mysql .7 `' I9 K) [& }
7、创建一个数据目录& ?7 ]7 o8 Y, V' _5 A
1 d7 l+ t9 S `) ]$ N: e5 }
mkdir -p /data/mysql/data/
7 s* A; z" Y* \0 T+ ]8、初始化mysql,及开启ssl新功能# A. B1 M+ | m
/ v: U" {* ?/ R/ i4 W# ^2 X
bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
" R9 L/ A& Z3 s8 jbin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data $ y, |" ^* Y1 O$ D g
9、 设为root是为了防止普通用户不小心删除数据库2 a+ i% u9 I# T W9 h: ?$ s
5 I! y8 a4 M6 E4 y
chown -R root .0 V, Q+ r) K+ V( r! w9 t: Q) j
chown -R mysql /data- P+ F, n- V* C# s
10、拷贝配置文件# g) e8 D0 }! \
: @1 b, A* P6 Ucp support-files//my-default.cnf /etc/my.cnf
+ _0 ^* l: {" b" Ucp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql. ^$ b0 v+ D# n5 e6 y4 R
11、修改环境变量7 v5 D; x* S( v$ K" j3 C5 w
& c( [5 Z1 _0 ~, u5 _* x复制代码
+ t; B: n2 K& p: ]& D& t* {* nvi /etc/profile 3 a4 L1 d5 N9 Z, J2 J
# 在profile文件末尾增加两行 " }9 p2 A0 N- O
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH 6 ^- U) j' |4 R7 t$ y& b/ A
export PATH 4 H7 ~7 W) }" |2 d S
# 使PATH搜索路径立即生效:
6 u, ^2 q8 ~7 X, h! Ysource /etc/profile
6 ^5 M$ `8 h# ~# a复制代码
+ h/ G. K/ e! u: i1 b( ~+ r12、修改配置文件# S4 z e6 b- ~$ J
# r3 e: ^8 ~, X/ N
vi /etc/my.cnf
4 {" U( Y/ w6 i: a/ B" l) c#修改第19行(取消注释且修改为) datadir = /data/mysql/data/ # p) C" @2 [% s$ i% L
13、启动
( E/ s9 d+ }; e9 z5 Y) |0 t7 ~( f/ _: P: B# C
service mysql start |
|