|
|
楼主 |
发表于 2019-9-28 19:10:26
|
显示全部楼层
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn. w* G3 u. Q7 C }
& t8 E7 L+ x) q! C
" J l. B; U9 o) H) [
: g8 n" m6 y* wMysql5.7版本更新后有很多变化,比如json等,连安装都有变化,他安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost,还有后续文章percona-xtrabackup需要用到boost库
' z3 P1 O Z' F7 y, W8 I* Y3 C( b {* U% c
下载软件
( `$ t7 G7 x; e/ p到usr/local目录下:
# K- [: X2 Q' c: Z1 b# _7 c( [. M
" C2 @: {% w/ Qcd /usr/local, ?( D+ f" M6 U6 K
wget http://downloads.sourceforge.net ... boost_1_59_0.tar.gz5 P+ I5 a, D) P6 b& F
wget http://cdn.mysql.com//Downloads/ ... boost-5.7.11.tar.gz
& u' y/ Q9 Z; p( u1 @wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11.tar.gz
! {% b& s$ z1 L5 N J& Y/ `2 P安装boost0 ~1 |3 m6 A7 B- g. b" e
注:此处如果只为安装mysql其实可以不用安装的,解压就好,到时安装mysql时引用目录,不过percona-xtrabackup需要用到,所以我安装了。! V! t. A" F$ E0 J7 D5 x2 v& C
$ h& c/ f5 S. ~9 f- D9 Jtar xzf boost_1_59_0.tar.gz
0 j! i0 c8 o6 i5 U8 n3 S5 u$ Ucd boost_1_59_0
% D% H" ?: m& F+ Y( r; s./bootstrap.sh# b$ f' ^( `7 @; ^% E9 Z* }
./b2 install 5 R: r U# u2 r7 O* j
不带boost的mysql源码安装1 }5 X1 N& l& ^" K7 ?
1、安装依赖包
+ U6 c$ W/ _& }; C4 I$ W) H0 ~8 x: O0 I+ c( p Z P
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake0 ?: `" c. D& S( Y
2、添加禁止登陆的mysql用户
6 p& a X- S5 d
; _' S9 M$ h/ Bgroupadd mysql
# @: P5 k* y1 `. B1 E" Y7 tuseradd -r -g mysql -s /bin/false mysql
# V2 x' g/ ~, X& p& V3、编译安装
1 r8 k0 e! h1 R9 K$ q3 `+ a
! B- E. o) q- @) j从MySQL 5.7.5开始Boost库是必需的/ n- a T) t# k* a- B/ j
8 c: g% o" A+ K& C! `9 i复制代码9 ^+ U4 K9 p+ |2 |8 D
mkdir -p /data/mysql
2 \* g& \% a4 B: G/ q8 ~- h8 Atar xzf mysql-5.7.11.tar.gz
7 X4 M# d: J- W3 vcd mysql-5.7.11, [4 z+ r& \- y8 _
cmake . \9 B+ a, y" Y" {
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
: d& X$ f1 S- Q2 r -DMYSQL_DATADIR=/data/mysql \
, Y: |2 U$ H) h' k -DDOWNLOAD_BOOST=1 \
- @) n" a' f' [& y" ]3 C" c! t -DWITH_BOOST=/usr/local/boost_1_59_0 \) q ^+ e. ]1 U. Y
-DSYSCONFDIR=/etc \6 Y1 E+ v% j2 U8 p; M% U# A
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
7 r, g% [' `6 P1 U% ^8 N -DWITH_PARTITION_STORAGE_ENGINE=1 \
- O4 B; \6 V7 ]8 \* d3 C -DWITH_FEDERATED_STORAGE_ENGINE=1 \
& v7 Z' L3 L% x( j+ T. l Y( v -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
: s0 Z R0 S9 Y4 [ -DWITH_MYISAM_STORAGE_ENGINE=1 \
7 Q8 E7 r0 A3 e3 h0 X; W- \ -DENABLED_LOCAL_INFILE=1 \( g7 c4 {- B; C) W/ j1 J# e
-DENABLE_DTRACE=0 \2 d) e, X: Y7 {8 Y w
-DDEFAULT_CHARSET=utf8mb4 \
3 T5 e5 Q3 L$ x -DDEFAULT_COLLATION=utf8mb4_general_ci \/ P0 e8 F4 @% r
-DWITH_EMBEDDED_SERVER=1
! C- k% o" Q- Y! l/ M: G; d
' V. x4 _" c y% X+ Bmake
6 C! l, K& V; M4 _4 Amake install, B- J# N, Z: O. H
复制代码
! ^. Q; }% K8 W6 i
R& E2 m4 S. K$ a! L" t/ ]
; T9 F! W4 c" b; t4、配置开机启动项$ y, a; ~6 h7 X; |
- a7 X! x& Q* P0 @8 o3 C Rcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld* {: T8 c b" D
chmod +x /etc/init.d/mysqld* G$ ?$ u( b# f' N. _; q; _
chkconfig --add mysqld( n0 X+ \: C4 Y
chkconfig mysqld on
3 |( P' g9 n/ c$ r( a4 p5、配置/etc/my.cnf 仅供参考,可以不配,用默认的。2 v1 o1 v+ H# p: S: h
; ?, Q! Z& K5 F; T4 I8 G; B
复制代码$ n$ r; C& X; z) X% v
cat > /etc/my.cnf << EOF _5 O8 p$ Q4 f' R
[client]
6 d7 t9 Z% d! Vport = 3306
7 P" O9 F: @! {4 l8 c# A6 Esocket = /tmp/mysql.sock' v$ n0 T0 Y2 H4 {
default-character-set = utf8mb4
5 `: J+ ~; A0 }+ e& L. v l
. n4 O, i( t S: a3 k[mysqld]9 ~5 D3 d4 o, W4 v# w- i' s! q% k
port = 3306
3 O j3 H$ `; f, H; i: Z W5 asocket = /tmp/mysql.sock
7 P8 k3 }" z" c6 Y
3 R! R% m: v. |+ kbasedir = /usr/local/mysql: O2 `8 l$ J( `8 L$ W8 [
datadir = /data/mysql
: ^( w, Z- M7 k* e& n) @8 b Mpid-file = /data/mysql/mysql.pid$ n4 A4 [; c% Q5 A. q; n
user = mysql; [6 z) l1 d; p; V
bind-address = 0.0.0.0
, P7 G( t+ Q0 ~* f8 k8 |server-id = 1
4 z5 g P4 D/ d: K9 Z$ l # j5 _5 T2 u/ {& b6 o
init-connect = 'SET NAMES utf8mb4'7 D* I' L$ |9 i2 o4 R1 ~8 r
character-set-server = utf8mb4
% U* I& B& Q. Q
8 e/ y$ j7 ]1 j) |#skip-name-resolve
2 j U" ?, G) ]' t( T: K#skip-networking/ h2 s; ?8 G$ x. a% t2 Y
back_log = 300- R6 L% W3 q- {' I s4 p
- s9 R8 s* l u' D! A l6 ]max_connections = 1000
' p' S8 g" W# o/ ]* c, Jmax_connect_errors = 6000( F& {* \' T- a! B$ V
open_files_limit = 65535& |& s+ e( e& I% {
table_open_cache = 128* I& F- c& b5 u% ]! v; X$ C" b5 ]
max_allowed_packet = 4M& C6 J6 T2 }: s6 }' `6 ^% F
binlog_cache_size = 1M
3 Q0 L# M1 C+ m/ m4 ~1 P: V6 k* _max_heap_table_size = 8M1 B$ I' g8 |7 g3 b4 f! l
tmp_table_size = 16M
) A8 x: N; \& l- n% z $ y w a0 m2 t: G
read_buffer_size = 2M( @! N* Q# x4 v, f. t8 X
read_rnd_buffer_size = 8M3 S% E; t% H \# h* L* Y
sort_buffer_size = 8M( L" F8 L- _ d. a4 e5 H( u
join_buffer_size = 8M6 Z. B0 } c# ?. K: Q2 G
key_buffer_size = 4M
& ~+ S9 R/ v" q- s: {3 m 0 o8 L" U9 {2 R; ]0 H) ?
thread_cache_size = 80 ]: \/ N- p+ A! j- i! H e
+ S4 w% X3 I4 i" `+ T( k! q. o, Z
query_cache_type = 1
3 L" N8 ~3 n2 y2 S" ]5 rquery_cache_size = 8M; v5 Z9 s3 i# l. F6 `" y' I; l
query_cache_limit = 2M
1 J$ ^* \4 p# ]1 b ; P4 S) D, s8 r0 Z8 {
ft_min_word_len = 4) K( \; A& E P+ {+ G% k
r K9 t, Q8 f1 {# x- L$ G: k* t% U; M) |log_bin = mysql-bin# m& T& v+ t) P ` }; _ b' ]& ]
binlog_format = mixed# A- u8 x: G( M6 k
expire_logs_days = 30# Z* s/ t# W" b; F2 X0 Q5 b5 g
~- r- r$ d& e, Alog_error = /data/mysql/mysql-error.log
; h' n6 t2 L0 b& ]. c, N# m5 I6 lslow_query_log = 1
0 F2 M7 A$ Z# }- _9 _2 P% n& ~" I, \( Rlong_query_time = 1& i4 h& L4 q4 o
slow_query_log_file = /data/mysql/mysql-slow.log
# x& x5 x/ Z1 m9 z* C4 R
. t1 C0 N1 T8 C# i- Yperformance_schema = 0
6 s, Y c9 |/ e/ ?$ ~1 R; N/ k& uexplicit_defaults_for_timestamp
/ M* A- u+ t; H
4 X! _' t R7 A( R#lower_case_table_names = 1
4 L0 B ^" K8 J8 d# X% U
0 s/ \, x# b8 s- n3 Fskip-external-locking. ~. Q5 N5 |) F8 o$ j" F4 W
4 K' W @. z6 u
default_storage_engine = InnoDB
, o+ g. u) D0 w# J#default-storage-engine = MyISAM% D$ T9 G9 V: ~$ ^1 L
innodb_file_per_table = 1+ N5 u1 Y$ o* K& O. L @0 D! q
innodb_open_files = 5004 l# |! v9 F2 m2 s- h+ e' r
innodb_buffer_pool_size = 64M
" c# |9 S7 H1 E2 a+ linnodb_write_io_threads = 4$ x# n3 ]4 ~$ x, e/ r- Z J' h5 X2 W
innodb_read_io_threads = 4
7 m: J0 B$ Q- D/ P7 {* u( h1 iinnodb_thread_concurrency = 05 J* S9 D0 Z4 K3 w; i3 b
innodb_purge_threads = 1
. I1 m" Z$ w; a# Z6 W' Iinnodb_flush_log_at_trx_commit = 2
: l6 V" P* G4 q# t3 `innodb_log_buffer_size = 2M
+ R& f- I3 u1 k- dinnodb_log_file_size = 32M
2 d* `, o, V! \+ ^ Y7 C2 Z2 o- Tinnodb_log_files_in_group = 3
* b5 d. F7 o- E; s8 t5 w# }6 ^$ winnodb_max_dirty_pages_pct = 90
' D1 P' e$ m% _innodb_lock_wait_timeout = 120
' ^, _6 P$ r5 R) b1 P T2 m9 ~# i: A5 L& I
bulk_insert_buffer_size = 8M4 ^4 @! b! ?* [- d" Q
myisam_sort_buffer_size = 8M/ r B+ A+ w c. Z* B3 F4 ^ W! Y
myisam_max_sort_file_size = 10G
7 j Q. J; M- w% W; w* zmyisam_repair_threads = 1
u N% l" u* J" F2 z: f8 v( J
3 {- O' z3 B6 s8 K( Ointeractive_timeout = 28800
& L- L5 k; a. e) s9 s, G: Lwait_timeout = 28800
7 v* ~) M, X! I' K) S1 j , f- m, T, z- Q+ q$ F$ i9 N; U
[mysqldump]8 m! J. k0 y2 j! w7 a9 @6 V |/ i
quick
# ?" r8 q6 Y0 E; n Q/ Xmax_allowed_packet = 16M
' w4 r* M4 J# G' _; z. t - I) O2 V2 s ]% L7 v9 a* P
[myisamchk]6 x: ]; c3 r( y
key_buffer_size = 8M6 Q- ~4 M. O3 d9 z7 D1 E
sort_buffer_size = 8M, \( E# X+ z0 m# G
read_buffer = 4M
$ R; @: F6 \6 i1 `6 [6 x9 x3 vwrite_buffer = 4M( S" K' a0 I7 Q: d2 j! q
EOF
* @! T8 S$ r% w7 J% e- n0 I复制代码
, f5 u8 c9 n+ W6、初始化数据( e4 h. p& e& M8 H3 H+ o
8 x. L; }' b0 C+ q3 z1 H/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3 t$ x* f L# \) G! _- t
注: 之前版本mysql_install_db是在mysql_basedir/script下,5.7放在了mysql_install_db/bin目录下,且已被废弃
' p3 @( b4 L( ~, Q0 l7 L“–initialize”会生成一个随机密码(~/.mysql_secret),而”–initialize-insecure”不会生成密码
z$ a( j! J1 h/ v+ y0 h9 b–datadir目标目录下不能有数据文件5 c3 c) U5 P C' a' l: t
5 C @/ V$ ?4 W4 M; R
7、启动数据库
: w/ r' ~$ T- C+ F
6 v. u5 l; E$ r( c Rservice mysqld start# r% H. v- _7 \( e
' j6 s# K$ m' T6 V
6 @2 M4 n0 u2 ?带boost的mysql源码安装
8 y O( j7 Q# v2 K. C1、安装依赖包; f! s; D& C1 x' I. i' a# T
# T1 l3 K+ d1 b Y+ b6 x
yum -y install make gcc-c++ cmake bison-devel ncurses-devel bison perl perl-devel perl perl-devel 6 \0 r4 U; X9 Q0 m. b
2、解压到/usr/local目录下0 l6 k! [9 d3 b, F
. h! Y- S4 z2 ]6 f( d' k
tar -zxvf mysql-boost-5.7.11.tar.gz -C /usr/local+ p# p D( @: C. Y& H4 Z2 O
3、创建mysql组和用户
/ ^! y) s8 X* d! Z& b1 ?
- U- B! S1 Z3 j# l9 ]5 r+ Vgroupadd mysql- V5 ^8 K7 M8 }! X
useradd -r -g mysql -s /bin/false mysql
1 ^- r7 l' V( N: w4、编译mysql9 a2 ~8 J1 \) B- a; ?
t& N* a% C6 q4 v \cd /usr/local/mysql-5.7.11/
) h) n Q) W# u( ^" Q9 dcmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost6 m2 h h/ X8 `& U
make1 z( g6 R/ d, R+ r
make install5 L' }+ Z8 }3 Q
5、把原来的/etc/my.cnf备份
" [) k9 h$ B' p: Q* m$ B$ r2 }6 B0 w3 ^4 z
cp /etc/my.cnf /etc/my.cnf.bak
" a; ~& m$ ^! Nrm -f /etc/my.cnf1 t, A0 W6 y" g# t
6、把安装目录用户和组更改为mysql
, Y+ V4 }, c1 N8 H" q' I b& l0 O+ ]% Y+ n" N, m' J
cd /usr/local/mysql7 ^4 p3 ^8 y2 Z: o6 W c
chown -R mysql ." T2 o' z' y% K7 L; T0 u7 a
chgrp -R mysql .
: m& K# l }* H- i7、创建一个数据目录. }( v4 F0 P) \# ?6 x8 l- d1 O
2 h: t9 t4 n$ H2 L$ I
mkdir -p /data/mysql/data/! C7 E4 n$ b& L+ n" B
8、初始化mysql,及开启ssl新功能
: S% W- P8 _3 M9 @: W& t% O8 d: N
bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data 7 P, C% u2 L1 j8 E, t9 Z4 x4 y* s8 d
bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data / U- j' k5 ?+ e& N% g# Z
9、 设为root是为了防止普通用户不小心删除数据库4 i3 r1 s; B# O6 g& Q8 v6 c/ ]6 W
$ m; u p: S9 I# ]9 R3 f6 Y& p3 r1 _
chown -R root .7 E, b, i0 v5 f! }
chown -R mysql /data
7 o# ~6 u8 @2 h- b10、拷贝配置文件* u% R/ E5 d$ j" R
% o# z3 w$ B4 |0 R V+ ^
cp support-files//my-default.cnf /etc/my.cnf
' y# ~5 M1 d7 }1 n, P" j+ [: Rcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
/ d: d& ^0 S n# n11、修改环境变量$ G4 V9 h, P2 L- E+ c+ }
& f) w6 ? P$ ]% Q9 e( V
复制代码
+ z0 k" E8 d9 z Svi /etc/profile
" z% B8 c: M7 J2 o# 在profile文件末尾增加两行
/ o7 V: c; _8 D+ S: BPATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH ! p+ N4 |9 e9 m* f* T3 z
export PATH
8 i9 D. B( @% p. f- ?$ X0 X' R, f # 使PATH搜索路径立即生效:- k5 _( o: x8 a1 O4 z
source /etc/profile
! _+ p' N" X o, a复制代码6 s) V0 g! L3 i' A0 t- n ^8 b
12、修改配置文件4 C8 I- E' x+ S9 v- D4 n, k9 p& w6 ~7 Y
2 f2 j4 s, W: O2 T$ Q; yvi /etc/my.cnf
& q9 m1 S0 X% R#修改第19行(取消注释且修改为) datadir = /data/mysql/data/
( p9 u3 a) u5 F/ Z7 C: a13、启动7 H; S9 J% `" K
9 F9 ?0 A. g% G' p) r- v
service mysql start |
|