- 积分
- 16840
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2019-9-28 19:10:26
|
显示全部楼层
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn% J. Q& O0 ]/ t7 h
1 m. U; b( t- q0 Y; T # { N" f; ]) S% L, P
9 W4 c7 \) T3 _/ b9 v3 Z$ g$ `) o) ~; YMysql5.7版本更新后有很多变化,比如json等,连安装都有变化,他安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost,还有后续文章percona-xtrabackup需要用到boost库
. I3 Q& k! l8 H# X) J& H# e5 }. b9 E% x6 V A: Y# a S4 y
下载软件
: l1 P& D" h3 X# a到usr/local目录下:: r; f5 X: {; w, w2 O! [" b
+ ?& I+ P" }2 l& V7 _cd /usr/local
# G! J; Y. R: a% l: Hwget http://downloads.sourceforge.net ... boost_1_59_0.tar.gz
5 p: N. [1 o. B3 p, ^8 owget http://cdn.mysql.com//Downloads/ ... boost-5.7.11.tar.gz' z7 M- B* e& }3 M$ Y
wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11.tar.gz
( _2 F, Y8 | ^$ z! `5 l6 Z5 ]) b$ ]安装boost# p0 q5 R( L6 V8 Q3 p1 U$ n
注:此处如果只为安装mysql其实可以不用安装的,解压就好,到时安装mysql时引用目录,不过percona-xtrabackup需要用到,所以我安装了。
( o( ~ ?1 R- G: B" X4 }/ S
" `5 |" U% r6 `- {: f* P. V! Z9 Ntar xzf boost_1_59_0.tar.gz5 ^; D6 U/ L- x4 Y8 c7 W% b
cd boost_1_59_0: k) @5 r% g* V5 k* H9 h" o
./bootstrap.sh- g* F5 t) A! j) a1 Q% l8 N( k$ K
./b2 install
6 U9 s& P8 }* u& K$ ?* |* S* @9 S7 G3 R不带boost的mysql源码安装
5 ~! B. |) g, m. A, j+ p1、安装依赖包
" \) \9 F$ @2 k. {- _
' w1 H' S- V6 o5 Q! R/ A$ ]. j1 U) \1 qyum -y install gcc gcc-c++ ncurses ncurses-devel cmake! U8 v, @2 [# w0 @. m- K
2、添加禁止登陆的mysql用户
- f; ]5 x7 \. P9 h) w7 [3 t1 l$ Z1 I5 Q( J0 ?' D6 j1 L
groupadd mysql
8 I: C c/ a) I3 ]' quseradd -r -g mysql -s /bin/false mysql1 `) }7 b& M1 J4 j# ?- e; u: k
3、编译安装
$ c, G9 \" G# |; f3 N3 d
5 i, a& s- ?: L( D; o从MySQL 5.7.5开始Boost库是必需的
- @% ^, \) ~2 C- F7 r U; ~ I. z* Z/ ]; t
复制代码9 x+ r* M" H b; L1 p
mkdir -p /data/mysql: U4 y$ r$ \! q0 I
tar xzf mysql-5.7.11.tar.gz0 Q- u6 I* r# `1 Z3 {; c, I$ \
cd mysql-5.7.11
' F- O( U( l: r5 K2 _/ H cmake . \( m% G w; ]1 `; g
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
6 F! G" b l3 Y8 s -DMYSQL_DATADIR=/data/mysql \
) B7 U& m: d! ` A- h% O' A' Z8 M -DDOWNLOAD_BOOST=1 \$ E) k# h2 u7 L( W( k0 Z( b
-DWITH_BOOST=/usr/local/boost_1_59_0 \
; j; M; R. }: _- Z -DSYSCONFDIR=/etc \1 W* n- V: S! ?, K" W
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
$ I) J& a6 a8 A -DWITH_PARTITION_STORAGE_ENGINE=1 \ m" _- r. K1 ^; a; ~8 p
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
% O! `. Q/ o: z1 ?+ U7 G$ ^ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \1 [ v. c& x; J; C: r8 H0 c" S
-DWITH_MYISAM_STORAGE_ENGINE=1 \( y; I* T1 `/ ?# `! v! N# Q# c& V
-DENABLED_LOCAL_INFILE=1 \) v; p, e u( |6 K( g
-DENABLE_DTRACE=0 \3 w, c) _0 w; d2 q/ n8 c
-DDEFAULT_CHARSET=utf8mb4 \
4 U0 T" i1 ]# i% f v -DDEFAULT_COLLATION=utf8mb4_general_ci \
9 p' {2 \' Y5 j6 Z2 u: m6 ?5 I -DWITH_EMBEDDED_SERVER=1
' ^# I3 F) C( C+ W* A: \+ C' m u$ J( c" e& T( j2 l
make
+ V% F( x/ c5 w" \' M* dmake install
7 U, H$ P1 q8 \+ @# Z7 b复制代码1 |& q6 _+ L7 b L- T( ^/ L; b* ]
! n" p# Y7 J* c' O0 Q2 L. l2 a+ u+ Z; m0 |6 T# ^
4、配置开机启动项, j) n1 \9 E# h' j8 f9 ^
% Y V% b" A! y* Xcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld& K2 c7 h) P$ W
chmod +x /etc/init.d/mysqld
8 }+ A, Z/ g7 `chkconfig --add mysqld6 \# S+ g, L( W
chkconfig mysqld on
+ f6 h9 q! w5 C: r4 {1 K. t5、配置/etc/my.cnf 仅供参考,可以不配,用默认的。
9 E5 s* N1 X' R( r7 R5 }! s6 X% x, Y
$ K. }% S) M' a! J, K( Z复制代码3 X( W( K: |1 f ^, j
cat > /etc/my.cnf << EOF
. x5 n9 I" {# Y% T c* E[client]; G+ f4 z6 B2 ~4 X, K& ?$ ?# K# p# h( \
port = 3306
5 b& P; A- V6 Y+ p# Fsocket = /tmp/mysql.sock
: o( \4 s5 E. O6 Y9 Ddefault-character-set = utf8mb4& z; Y4 F" B X& ^/ W4 e' x( ?( m
0 c+ G+ L+ h P5 ^[mysqld]
7 v6 { C9 R& X4 r; v$ M. ~, C/ eport = 3306
( M9 M7 g! V4 i; n( K2 A, Ssocket = /tmp/mysql.sock
( Q# I! s" M0 f ! Y |. e% l% A" i$ j$ r
basedir = /usr/local/mysql
+ z8 I6 P+ }, F" vdatadir = /data/mysql- Q I* [, `6 n' e
pid-file = /data/mysql/mysql.pid- b) B2 }/ i. K% ]4 S/ U
user = mysql
/ u+ A1 u, ]( \1 ^bind-address = 0.0.0.0% H, V5 S; O3 ^- g9 t/ _1 T/ }0 E
server-id = 1
- A5 `8 R5 Y' w% Z
5 r2 b l0 n- l0 ainit-connect = 'SET NAMES utf8mb4'4 X& x- W4 b6 }' d6 {% p
character-set-server = utf8mb4( ~- ? r3 N- a8 ?; f
# E3 M) K+ |$ `8 G3 f
#skip-name-resolve# i# F" B; d2 e# o1 F
#skip-networking/ E; R0 x1 X" v( m$ N" Z
back_log = 300
6 l( _5 N% _" d$ B8 `) G, U
7 @# Q# {9 x/ _$ r3 i9 }max_connections = 1000
! u# k; ?8 g4 y; {* Omax_connect_errors = 60008 I9 R# ^4 ?6 [1 a r; u; M
open_files_limit = 65535) j6 M% P0 L. m. F5 N& ?
table_open_cache = 128
* B! {8 y5 E3 u! P3 {max_allowed_packet = 4M
$ ]0 _- I4 _5 dbinlog_cache_size = 1M
+ X+ s6 o6 f% g5 N6 n# }9 c! Q* a$ dmax_heap_table_size = 8M. J5 ~' D5 X7 H7 Y' P( N& ?0 ]! j' o
tmp_table_size = 16M C( b, F, v* Z# A" w O
9 \: N; |0 `! |- k0 u0 @
read_buffer_size = 2M
( t# h6 _4 z1 Tread_rnd_buffer_size = 8M8 ~* }4 r/ I6 z# x4 |
sort_buffer_size = 8M0 ?2 r+ r o1 ^5 _' l- t4 ^
join_buffer_size = 8M
1 R" d$ m* M: ?3 M8 Bkey_buffer_size = 4M
- {$ _) Y" F# O 5 Z5 l' @* |, L" n
thread_cache_size = 81 @. X5 d5 _8 m0 c4 f( o
; f& K- ^1 R1 _/ Z# Gquery_cache_type = 1# o9 ~# F% r- {3 `
query_cache_size = 8M
' n2 R. N% X' q% r5 J! H/ gquery_cache_limit = 2M' f) @/ f8 t% F" n8 }) F& g
7 v- y0 Q3 {3 e' e2 wft_min_word_len = 4
/ U- u. X' k- y1 ]: _, [ # z3 p8 @! W0 c9 K' w; d2 A
log_bin = mysql-bin
% }' L1 D. E6 N: f) `" abinlog_format = mixed l5 _+ P! Z# r
expire_logs_days = 30; {9 U' L1 v3 `& I
. T: u8 z7 |; p! V7 Vlog_error = /data/mysql/mysql-error.log! R2 f+ G1 T4 _
slow_query_log = 1 _0 G% T; m2 f3 v8 G7 t
long_query_time = 12 j. T4 L3 |" T9 h' |9 H# M
slow_query_log_file = /data/mysql/mysql-slow.log9 q+ d+ y$ C. ?, B. ^" n# v, ^
: I7 O4 d4 I+ r5 zperformance_schema = 0& y$ L/ O; X% q/ R; C
explicit_defaults_for_timestamp
7 w) U' D" ^) `7 ]6 k
Y2 c4 ]' v$ l* g% P#lower_case_table_names = 1( C) L3 W& Q5 }8 u! I" ~
7 \/ b6 h/ b5 _8 ^' X& Fskip-external-locking7 |; m- c2 s. A
' y+ n# }, J$ n6 V" Ndefault_storage_engine = InnoDB
, o! h4 T7 x8 }2 N0 A$ C+ v( e* z#default-storage-engine = MyISAM
8 I8 C* |; V( m* t6 ~& U- }: Ainnodb_file_per_table = 1
, I W3 H/ i: L0 `1 n6 ^innodb_open_files = 500
8 D( c" {: q3 Ginnodb_buffer_pool_size = 64M8 x; F6 D6 p0 n/ j6 n7 b
innodb_write_io_threads = 4
3 l6 u* ?, V1 B: ]innodb_read_io_threads = 4) }9 O# I4 |+ G1 t8 w
innodb_thread_concurrency = 0
. O m$ o$ j- ]7 ^( ]innodb_purge_threads = 1" a! |' L$ b( G% R, I
innodb_flush_log_at_trx_commit = 2- y. W# |+ D. g( J
innodb_log_buffer_size = 2M& i, h$ k# r: P; h
innodb_log_file_size = 32M* I: x) A. v9 C( m" N
innodb_log_files_in_group = 3% I+ C) q4 z E4 T
innodb_max_dirty_pages_pct = 90
; r- h N/ r( R( Z, ^innodb_lock_wait_timeout = 120
. y8 i) h* |+ E) D. A3 q. Q C. T
4 o7 T6 R( n. K8 F A# }bulk_insert_buffer_size = 8M V! _& ^! [2 I
myisam_sort_buffer_size = 8M6 q" Z# v6 Z3 r2 i$ c9 z' R
myisam_max_sort_file_size = 10G
. G( c. Q: w6 ^- cmyisam_repair_threads = 1& ]' s/ A1 }; m, _
# S$ t6 D( F1 D, Y+ L2 kinteractive_timeout = 28800' J& v) d' X6 f& b
wait_timeout = 28800( X. {, M6 ~5 p7 A
1 F$ d: X3 }* r[mysqldump]8 L7 F' m4 W, f6 ^( x3 V
quick
, P& M# i7 A- B0 i* Z% jmax_allowed_packet = 16M
+ L* g5 n* x! p, Y; @/ Z
8 d4 ?4 a9 l! P; j* h[myisamchk]
* }7 h& R! O1 l: p/ Jkey_buffer_size = 8M
5 P y) n; Y/ Y. E# O% C z z3 wsort_buffer_size = 8M% M/ E9 v& w" }
read_buffer = 4M9 ]- }2 O6 Y+ e; b2 n+ o
write_buffer = 4M
$ v! o* S2 T# _9 h- `: IEOF
, i1 t& c' C* E, Z# @6 h! ^复制代码
, B3 e; J' K5 w: p$ ^, |6、初始化数据7 ]) u/ I+ U7 }% L4 S
: o- }. B( B0 P4 f) d1 [/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql' A! I" y' G4 c# |4 @' K
注: 之前版本mysql_install_db是在mysql_basedir/script下,5.7放在了mysql_install_db/bin目录下,且已被废弃
+ v1 d1 c! w0 z9 p“–initialize”会生成一个随机密码(~/.mysql_secret),而”–initialize-insecure”不会生成密码6 A4 c# m$ x6 `" w" m7 `) c
–datadir目标目录下不能有数据文件% T/ C- t- F( g" v0 W
! W l. ~- R9 S( X' H' I4 F7、启动数据库" @4 C* h% z& G) V/ W% G4 f
8 f, v' M3 X$ o j1 b3 K: q! bservice mysqld start
: x i5 ~( m! H! V 9 d4 x) g0 \% `. O
; d; F* z+ Q- ~3 m
带boost的mysql源码安装
3 \% ?6 [8 L+ K: I3 l, o# Z. A4 e; t1、安装依赖包
* X8 M/ B3 J, s# g4 j5 i0 K
1 N1 h* H6 S: ]$ i. q) Vyum -y install make gcc-c++ cmake bison-devel ncurses-devel bison perl perl-devel perl perl-devel 7 I7 v+ R, q- E3 v/ {8 w, V3 n
2、解压到/usr/local目录下: r% y" J8 P3 T; C
4 V4 n u% X/ i2 D! Z0 atar -zxvf mysql-boost-5.7.11.tar.gz -C /usr/local
0 H. m- r7 x, M3、创建mysql组和用户
/ n) a7 u) K9 F$ C" d f5 C8 b4 m% I: U9 r9 l
groupadd mysql+ ]/ ?: ?$ N. C# a& `
useradd -r -g mysql -s /bin/false mysql6 X* x T. l h& t
4、编译mysql# J, p) ^' G4 z
& p1 Y+ t) P+ I! m! i# N
cd /usr/local/mysql-5.7.11/
, O( A8 S3 ^# c- Acmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost% d% m' N3 [+ ]8 C( [1 W+ ^
make* \" Z/ P6 v$ B2 O6 H7 m
make install
( [3 S* c0 Z; B# L0 y5、把原来的/etc/my.cnf备份
# e1 _/ `$ r: d1 ]9 n1 [: X+ M5 x% p: V' K3 ]1 r- f
cp /etc/my.cnf /etc/my.cnf.bak
( A7 ~+ {$ |: d: ^6 Drm -f /etc/my.cnf
3 @( }4 q5 i; T7 U% H" m6 X6、把安装目录用户和组更改为mysql: b) Q, l$ i8 o9 ^( I9 p2 ?
" X0 f+ l7 }. U2 H8 `! Ccd /usr/local/mysql8 L, @* ^ I( [" Y' H! `
chown -R mysql .
* }8 p) a1 K( ?) P) ?- R% }chgrp -R mysql .
9 W9 ]1 _' `' d' |" z% M8 h7、创建一个数据目录- E& b/ B# a H/ f% N1 X5 w
" C: L7 N$ C% q. o* amkdir -p /data/mysql/data/
3 t" d- i$ ]2 H6 A: Y3 x" V8、初始化mysql,及开启ssl新功能+ ~' [- Q! U, A8 ~7 E
) X. q( V# P* M8 D4 w; e! ^0 k
bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data ) t1 g. U5 _( U. @$ s, N- h$ e
bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data 5 q9 C U" ]* I8 G
9、 设为root是为了防止普通用户不小心删除数据库7 n) O' H' R1 d' E
; ?% v7 I: x. s' i: k0 f4 x+ c3 b; fchown -R root .
( X1 s3 i; ?1 y1 Pchown -R mysql /data
# K* j' b7 k* i% q10、拷贝配置文件
5 ~+ U0 j2 m9 x' e
9 i1 ?% O, d" \, `! z. H2 Kcp support-files//my-default.cnf /etc/my.cnf
# P7 R: u8 p: t& e3 U7 {! Ccp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
9 d2 k. U- K: \9 j0 `0 ?( i+ K$ h11、修改环境变量) p6 N0 O& l: a- ^' ^/ [! X0 Z4 v
( `8 L$ i) d4 F复制代码, G7 V. K5 ^6 h6 X
vi /etc/profile $ ]. F% ?$ ]% j0 D7 Z. h
# 在profile文件末尾增加两行 * A y+ `. f; u& x% W" a
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH ; w9 `" |1 W3 X5 U( W
export PATH 9 J* f1 e5 t+ R+ ]
# 使PATH搜索路径立即生效:2 z5 U6 x4 P* R
source /etc/profile
( O" z7 A2 ], m1 D' B) P复制代码! V# ?! a* r7 r6 Z6 b# {$ N
12、修改配置文件
+ W. g$ d7 C, r @
+ c. W2 Q4 y! e, [vi /etc/my.cnf5 U0 q: n4 x/ _# D! \1 a8 x( s3 C
#修改第19行(取消注释且修改为) datadir = /data/mysql/data/
# K" k# D& O) E# G) h13、启动
/ u: K" x7 v. ^6 Z; k/ k" A9 b, N7 {
s$ m6 I8 A$ @- E+ a: C( K1 @service mysql start |
|