1.1 软件下载地址
1.2 系统基础环境
[root@db01 ~]# cat /etc/redhat-release;uname -r;uname -m
CentOS release 6.8 (Final)
2.6.32-642.el6.x86_64
x86_64
[root@db01 ~]# getenforce
Disabled
[root@db01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@db01 ~]# 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
[root@db01 ~]# 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
[root@db01 ~]# rpm -qa|grep mysql
mysql-libs-5.1.73-7.el6.x86_64
[root@db01 ~]# rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
[root@db01 ~]# rpm -qa|grep mysql
[root@db01 ~]#
##安装相关的依赖包
[root@db01 ~]# yum install gcc bison ncurses ncurses-devel zlib libxml2 openssl libaio -y
[root@db01 ~]# 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,不让其登录,不创建家目录
[root@db01 ~]# useradd -u800 -s /sbin/nologin -M mysql
[root@db01 ~]# id mysql
uid=800(mysql) gid=800(mysql) groups=800(mysql)
##创建相应的目录
[root@db01 ~]# mkdir /apps /data/3306/{data,binlog,errlog,slowlog,relaylog,redolog} -p
[root@db01 ~]# ls -ld /apps/
drwxr-xr-x 2 root root 4096 Dec 1 20:10 /apps/
[root@db01 ~]# tree /data/3306/
/data/3306/
|-- binlog
|-- data
|-- errlog
|-- redolog
|-- relaylog
`-- slowlog
6 directories, 0 files
##编译cmake软件
[root@db01 ~]# mkdir tools
[root@db01 ~]# cd tools/
[root@db01 tools]# rz
[root@db01 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
[root@db01 tools]# tar xf cmake-3.5.2.tar.gz -C /apps/
[root@db01 tools]# ln -sv /apps/cmake-3.5.2/ /apps/cmake
`/apps/cmake' -> `/apps/cmake-3.5.2/'
[root@db01 tools]# cd /apps/cmake
[root@db01 cmake]# ./bootstrap
[root@db01 cmake]# gmake
[root@db01 cmake]# gmake install
[root@db01 ~]# cmake --version|head -1
cmake version 3.5.2
##上传mysql软件包,准备编译安装
[root@db01 ~]# cd tools/
[root@db01 tools]# rz
[root@db01 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
[root@db01 tools]# tar xf mysql-boost-5.7.20.tar.gz
[root@db01 tools]# cd mysql-5.7.20/
[root@db01 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的存放位置
[root@db01 mysql-5.7.20]# echo $?
0
[root@db01 mysql-5.7.20]# make
[root@db01 mysql-5.7.20]# make install
#做软链接、修改/apps/mysql/的属主/组为mysql用户,配置环境变量
[root@db01 ~]# ln -sv /apps/mysql-5.7.20/ /apps/mysql
`/apps/mysql' -> `/apps/mysql-5.7.20/'
[root@db01 ~]# chown -R mysql:mysql /apps/mysql/
[root@db01 ~]# ls -ld /apps/mysql/
drwxr-xr-x 10 mysql mysql 4096 Dec 1 21:41 /apps/mysql/
[root@db01 ~]# echo "PATH=/apps/mysql/bin:$PATH" >>/etc/bashrc
[root@db01 ~]# source /etc/bashrc
[root@db01 ~]# echo $PATH
/apps/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
1.4 编辑my.cnf文件
[root@db01 ~]# 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变量的值
[root@db01 ~]# 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
[root@db01 ~]# chmod 700 /data/3306/mysqld
[root@db01 ~]# ll /data/3306/mysqld
-rwx------ 1 mysql mysql 1603 Nov 4 19:36 /data/3306/mysqld
##创建错误日志文件
[root@db01 ~]# grep "errlog" /data/3306/my.cnf
log-error=/data/3306/errlog/mysql_error.log
[root@db01 ~]# touch /data/3306/errlog/mysql_error.log
[root@db01 ~]# 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用户
[root@db01 ~]# chown -R mysql:mysql /data/3306/
[root@db01 ~]# ls -ld /data/3306/
drwxr-xr-x 8 mysql mysql 4096 Dec 1 21:46 /data/3306/
##初始化数据库(3306实例)
[root@db01 ~]# mysqld --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/apps/mysql --datadir=/data/3306/data --initialize
[root@db01 ~]# echo $?
0
##启动3306实例
[root@db01 ~]# /data/3306/mysqld start
Start MySQL [3306] [ OK ]
[root@db01 ~]# netstat -lntup|grep 3306
tcp 0 0 :::3306 :::* LISTEN 32330/mysqld
##修改root@localhost的密码
[root@db01 ~]# grep "password" /data/3306/errlog/mysql_error.log
2018-12-01T21:56:02.351140+08:00 1 [Note] A temporary password is generated for root@localhost: Ts0C/02oRrY2
[root@db01 ~]# 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
[root@db01 ~]# 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/ |
+--------------------------+------------------------------------+
##加入开机自启动
[root@db01 ~]# echo -ne "\n# Boot start mysql service. USER:chenliang TIME:2018-11-23\n/data/3306/mysqld start\n" >>/etc/rc.local
[root@db01 ~]# tail -2 /etc/rc.local
# Boot start mysql service. USER:chenliang TIME:2018-11-23
/data/3306/mysqld start