1. 程式人生 > >MySQL 5.7 原始碼包編譯安裝

MySQL 5.7 原始碼包編譯安裝

1.1 軟體下載地址

連結:https://pan.baidu.com/s/1XMWprxseIRPQkiC_7O4W2A
提取碼:f7x2

1.2 系統基礎環境

[[email protected] ~]# cat /etc/redhat-release;uname -r;uname -m

CentOS release 6.8 (Final)

2.6.32-642.el6.x86_64

x86_64

[[email protected] ~]# getenforce

Disabled

[[email protected] ~]# /etc/init.d/iptables status

iptables: Firewall is not running.

[[email protected] ~]# free -h

total used free shared buffers cached

Mem: 3.7G 146M 3.6G 192K 8.4M 31M

-/+ buffers/cache: 106M 3.6G

Swap: 2.9G 0B 2.9G

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 26G 1.5G 23G 6% /

tmpfs 491M 0 491M 0% /dev/shm

/dev/sda1 976M 38M 888M 5% /boot

/dev/sdb1 50G 52M 47G 1% /data

1.3 前期安裝步驟

##解除安裝系統自帶的mysql

[[email protected] ~]# rpm -qa|grep mysql

mysql-libs-5.1.73-7.el6.x86_64

[[email protected] ~]# rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

[[email protected]

~]# rpm -qa|grep mysql

[[email protected] ~]#

##安裝相關的依賴包

[[email protected] ~]# yum install gcc bison ncurses ncurses-devel zlib libxml2 openssl libaio -y

[[email protected] ~]# rpm -qa gcc bison ncurses ncurses-devel zlib libxml2 openssl libaio

libxml2-2.7.6-21.el6_8.1.x86_64

zlib-1.2.3-29.el6.x86_64

ncurses-5.7-4.20090207.el6.x86_64

bison-2.4.1-5.el6.x86_64

gcc-4.4.7-23.el6.x86_64

ncurses-devel-5.7-4.20090207.el6.x86_64

libaio-0.3.107-10.el6.x86_64

openssl-1.0.1e-57.el6.x86_64

##建立mysql使用者,UID為800,不讓其登入,不建立家目錄

[[email protected] ~]# useradd -u800 -s /sbin/nologin -M mysql

[[email protected] ~]# id mysql

uid=800(mysql) gid=800(mysql) groups=800(mysql)

##建立相應的目錄

[[email protected] ~]# mkdir /apps /data/3306/{data,binlog,errlog,slowlog,relaylog,redolog} -p

[[email protected] ~]# ls -ld /apps/

drwxr-xr-x 2 root root 4096 Dec 1 20:10 /apps/

[[email protected] ~]# tree /data/3306/

/data/3306/

|-- binlog

|-- data

|-- errlog

|-- redolog

|-- relaylog

`-- slowlog

6 directories, 0 files

##編譯cmake軟體

[[email protected] ~]# mkdir tools

[[email protected] ~]# cd tools/

[[email protected] tools]# rz

[[email protected] tools]# ll cmake-3.5.2.tar.gz

-rw-r--r-- 1 root root 6863498 Dec 1 15:27 cmake-3.5.2.tar.gz

[[email protected] tools]# tar xf cmake-3.5.2.tar.gz -C /apps/

[[email protected] tools]# ln -sv /apps/cmake-3.5.2/ /apps/cmake

`/apps/cmake' -> `/apps/cmake-3.5.2/'

[[email protected] tools]# cd /apps/cmake

[[email protected] cmake]# ./bootstrap

[[email protected] cmake]# gmake

[[email protected] cmake]# gmake install

[[email protected] ~]# cmake --version|head -1

cmake version 3.5.2

##上傳mysql軟體包,準備編譯安裝

[[email protected] ~]# cd tools/

[[email protected] tools]# rz

[[email protected] tools]# ll mysql-boost-5.7.20.tar.gz

-rw-r--r-- 1 root root 48833145 Oct 28 17:30 mysql-boost-5.7.20.tar.gz

[[email protected] tools]# tar xf mysql-boost-5.7.20.tar.gz

[[email protected] tools]# cd mysql-5.7.20/

[[email protected] mysql-5.7.20]# cmake . -DCMAKE_INSTALL_PREFIX=/apps/mysql-5.7.20 \

-DMYSQL_DATADIR=/apps/mysql-5.7.20/data \

-DMYSQL_UNIX_ADDR=/apps/mysql-5.7.20/tmp/mysql.sock \

-DWITH_INNODBASE_STORAGE_ENGINE=1 \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_ZLIB=bundled \

-DWITH_DEBUG=0 \

-DEFAULT_CHARSET=utf8 \

-DEFAULT_COLLATION=utf8_general_ci \

-DWITH_EXTRA_CHARSET=all \

-DWITH_BOOST=/root/tools/mysql-5.7.20/boost/boost_1_59_0

編譯引數說明

cmake . -DCMAKE_INSTALL_PREFIX=/apps/mysql-5.7.20 \                #指定mysql程式的安裝目錄
-DMYSQL_DATADIR=/apps/mysql-5.7.20/data \                                  #指定資料的存放位置
-DMYSQL_UNIX_ADDR=/apps/mysql-5.7.20/tmp/mysql.sock \        #指定sock的存放位置
-DWITH_INNODBASE_STORAGE_ENGINE=1 \                                       #安裝innodb儲存引擎
-DWITH_MYISAM_STORAGE_ENGINE=1 \                                             #安裝myisam儲存引擎
-DENABLED_LOCAL_INFILE=1 \                                                                #允許本地資料匯入
-DWITH_ZLIB=bundled \                                                                           #允許壓縮
-DWITH_DEBUG=0 \                                                                                  #關閉除錯功能
-DEFAULT_CHARSET=utf8 \                                                                      #字符集utf8
-DEFAULT_COLLATION=utf8_general_ci \                                             #字符集utf8的校驗碼
-DWITH_EXTRA_CHARSET=all \                                                               #安裝額外所有的字符集
-DWITH_BOOST=/root/tools/mysql-5.7.20/boost/boost_1_59_0   #boost的存放位置


[[email protected] mysql-5.7.20]# echo $?

0

[[email protected] mysql-5.7.20]# make

[[email protected] mysql-5.7.20]# make install

#做軟連結、修改/apps/mysql/的屬主/組為mysql使用者,配置環境變數

[[email protected] ~]# ln -sv /apps/mysql-5.7.20/ /apps/mysql

`/apps/mysql' -> `/apps/mysql-5.7.20/'

[[email protected] ~]# chown -R mysql:mysql /apps/mysql/

[[email protected] ~]# ls -ld /apps/mysql/

drwxr-xr-x 10 mysql mysql 4096 Dec 1 21:41 /apps/mysql/

[[email protected] ~]# echo "PATH=/apps/mysql/bin:$PATH" >>/etc/bashrc

[[email protected] ~]# source /etc/bashrc

[[email protected] ~]# echo $PATH

/apps/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

1.4 編輯my.cnf檔案

[[email protected] ~]# vim /data/3306/my.cnf

[client]

port=3306

socket=/data/3306/mysql.sock

[mysql]

no_auto_rehash

[mysqld]

######## Basic Parameters

user=mysql

port=3306

basedir=/apps/mysql

datadir=/data/3306/data

socket=/data/3306/mysql.sock

pid_file=/data/3306/mysql.pid

character_set_server=utf8

skip_character_set_client_handshake=1

######## Server id

server_id=1

######## Log Parameters

log_output=FILE

log_timestamps=system

binlog_format=row

expire_logs_days=15

max_binlog_size=2M

binlog_cache_size=2M

max_binlog_cache_size=4M

sync_binlog=1

master_info_repository=table

binlog_rows_query_log_events=on

log_bin_trust_function_creators=1

log_bin=/data/3306/binlog/mysql_bin

log_slow_admin_statements=1

slow_query_log=on

long_query_time=2

log_queries_not_using_indexes=on

slow_query_log_file=/data/3306/slowlog/mysql_slow.log

log-error=/data/3306/errlog/mysql_error.log

######## Other Parameters

autocommit=on

skip_external_locking=on

skip_name_resolve=on

max_connections=800

max_connect_errors=1000

max_allowed_packet=200M

wait_timeout=1800

interactive_timeout=1800

open_files_limit=65535

group_concat_max_len=4294967295

symbolic_links=0

transaction_write_set_extraction=off

transaction_isolation=READ-COMMITTED

explicit_defaults_for_timestamp=1

sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"

######## Innodb Parameters

default_storage_engine=InnoDB

innodb_flush_log_at_trx_commit=1

innodb_buffer_pool_size=500M

innodb_buffer_pool_instances=8

innodb_buffer_pool_dump_at_shutdown=1

innodb_buffer_pool_dump_pct=40

innodb_buffer_pool_load_at_startup=1

innodb_file_per_table=1

innodb_change_buffering=all

innodb_doublewrite=on

innodb_autoextend_increment=64

innodb_temp_data_file_path=ibtmp1:200M:autoextend:max:20G

innodb_data_file_path=ibdata1:200M;ibdata2:200M;ibdata3:200M:autoextend:max:20G

innodb_flush_method=O_DIRECT

innodb_log_buffer_size=16M

innodb_log_file_size=4G

innodb_log_files_in_group=2

innodb_log_group_home_dir=/data/3306/redolog

innodb_undo_logs=128

innodb_undo_tablespaces=3

innodb_undo_log_truncate=1

innodb_max_undo_log_size=20G

innodb_purge_rseg_truncate_frequency=128

innodb_print_all_deadlocks=on

innodb_lock_wait_timeout=5

innodb_deadlock_detect=on

innodb_status_output_locks=on

innodb_strict_mode=1

innodb_sort_buffer_size=64M

innodb_open_files=65535

innodb_concurrency_tickets=5000

innodb_page_cleaners=4

innodb_old_blocks_time=1000

innodb_stats_on_metadata=0

innodb_checksum_algorithm=0

show_compatibility_56=on

innodb_lru_scan_depth=2000

innodb_flush_neighbors=1

innodb_purge_threads=4

innodb_large_prefix=1

1.5 編輯啟動指令碼

注意:

01:該指令碼中停用mysql的方法為:mysqladmin -uroot -pchenliang -S /data/3306/mysql.sock shutdown

02:如果你的mysql服務的root使用者密碼設定的不是chenliang

03:請你更改/data/3306/mysqld指令碼中的Pass變數的值

[[email protected] ~]# cat /data/3306/mysqld

#!/bin/bash

#

# Define variables

RETVAL=0

Port=3306

User=root

Pass=chenliang

Pid=/data/3306/mysql.pid

Sock=/data/3306/mysql.sock

My=/data/3306/my.cnf

Path=/apps/mysql-5.7.20/bin

# Determine the user to execute

if [ $UID -ne $RETVAL ];then

echo "Must be root to run scripts"

exit 1

fi

# Load the local functions

[ -f /etc/init.d/functions ] && source /etc/init.d/functions

# Define functions

start(){

if [ ! -f "$Pid" ];then

$Path/mysqld_safe --defaults-file=$My >/dev/null 2>&1 &

RETVAL=$?

if [ $RETVAL -eq 0 ];then

action "Start MySQL [3306]" /bin/true

else

action "Start MySQL [3306]" /bin/false

fi

else

echo "MySQL 3306 is running"

exit 1

fi

return $RETVAL

}

stop(){

if [ -f "$Pid" ];then

$Path/mysqladmin -u$User -p$Pass -S $Sock shutdown >/dev/null 2>&1

RETVAL=$?

if [ $RETVAL -eq 0 ];then

action "Stop MySQL[3306]" /bin/true

else

action "Stop MySQL[3306]" /bin/false

fi

else

echo "MySQL [3306] is not running"

exit 1

fi

return $RETVAL

}

status(){

if [ -f "$Pid" ];then

echo "MySQL [3306] is running"

else

echo "MySQL [3306] is not running"

fi

return $RETVAL

}

# Case call functions

case "$1" in

start)

start

RETVAL=$?

;;

stop)

stop

RETVAL=$?

;;

restart)

stop

sleep 5

start

RETVAL=$?

;;

status)

status

RETVAL=$?

;;

*)

echo "USAGE:$0{start|stop|restart|status}"

exit 1

esac

# Scripts return values

exit $RETVAL

1.6 後期安裝步驟

#更改/data/3306/mysqld檔案的許可權為700

[[email protected] ~]# chmod 700 /data/3306/mysqld

[[email protected] ~]# ll /data/3306/mysqld

-rwx------ 1 mysql mysql 1603 Nov 4 19:36 /data/3306/mysqld

##建立錯誤日誌檔案

[[email protected] ~]# grep "errlog" /data/3306/my.cnf

log-error=/data/3306/errlog/mysql_error.log

[[email protected] ~]# touch /data/3306/errlog/mysql_error.log

[[email protected] ~]# ll /data/3306/errlog/mysql_error.log

-rw-r--r-- 1 root root 0 Dec 1 21:47 /data/3306/errlog/mysql_error.log

##更改/data/3306/目錄及子目錄下的檔案屬主/組為mysql使用者

[[email protected] ~]# chown -R mysql:mysql /data/3306/

[[email protected] ~]# ls -ld /data/3306/

drwxr-xr-x 8 mysql mysql 4096 Dec 1 21:46 /data/3306/

##初始化資料庫(3306例項)

[[email protected] ~]# mysqld --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/apps/mysql --datadir=/data/3306/data --initialize

[[email protected] ~]# echo $?

0

##啟動3306例項

[[email protected] ~]# /data/3306/mysqld start

Start MySQL [3306] [ OK ]

[[email protected] ~]# netstat -lntup|grep 3306

tcp 0 0 :::3306 :::* LISTEN 32330/mysqld

##修改[email protected]的密碼

[[email protected] ~]# grep "password" /data/3306/errlog/mysql_error.log

2018-12-01T21:56:02.351140+08:00 1 [Note] A temporary password is generated for [email protected]: Ts0C/02oRrY2

[[email protected] ~]# mysql -uroot -p -S /data/3306/mysql.sock

Enter password:

mysql>

mysql> alter user 'root'@'localhost' identified by 'chenliang';

Query OK, 0 rows affected (0.02 sec)

mysql>

mysql> select user,host,authentication_string,password_expired from mysql.user;

+---------------+-----------+-------------------------------------------+---------+

| user | host | authentication_string | assword_expired |

+---------------+-----------+-------------------------------------+--------------+

| root | localhost | *D072DB593E2E7B068E887A452EB1DB3981A5D844 | N |

| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | N |

| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | N |

+---------------+-----------+-------------------------------------------+--------+

3 rows in set (0.01 sec)

mysql>

mysql> exit

Bye

[[email protected] ~]# mysql -uroot -pchenliang -S /data/3306/mysql.sock -e "show global variables like \"character_set_%\";"

mysql: [Warning] Using a password on the command line interface can be insecure.

+--------------------------+------------------------------------+

| Variable_name | Value |

+--------------------------+------------------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /apps/mysql-5.7.20/share/charsets/ |

+--------------------------+------------------------------------+

##加入開機自啟動

[[email protected] ~]# echo -ne "\n# Boot start mysql service. USER:chenliang TIME:2018-11-23\n/data/3306/mysqld start\n" >>/etc/rc.local

[[email protected] ~]# tail -2 /etc/rc.local

# Boot start mysql service. USER:chenliang TIME:2018-11-23

/data/3306/mysqld start