1.1 前期规划
1.2 软件下载
1.3 系统环境
1.4 调整文件描述符
1.5 安装程序
1.6 准备配置文件
1.7 准备启动脚本
1.8 初始化mysql并完成安装
1.9 加入开机自启动
01:虚拟机一台,2vCPU,4G内存,部署mysql服务,端口3306。
02:MySQL程序的安装目录:/data/apps/mysql-5.7.22 要做软件链接:/data/apps/mysql
03:配置文件路径为:/data/mysql/3306/my.cnf
04:其它相关目录:/data/mysql/3306/{data,binlog,slowlog,errlog,redolog }
05:采用MySQL通用二进制包(mysql-5.7.22-linux-glibc2.12-x86_64.tar)
链接:https://pan.baidu.com/s/1Q6jl8UcoLCIbMShZREBSKw
提取码:litr
[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 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@db01 ~]# getenforce
Disabled
[root@db01 ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
10.0.0.10
[root@db01 ~]# ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}'
172.16.1.10
[root@db01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 26G 1.5G 23G 6% /
tmpfs 1.9G 0 1. 9G 0% /dev/shm
/dev/sda1 976M 38M 888M 5% /boot
/dev/sdb1 50G 52M 47G 1% /data
[root@db01 ~]# cat >>/etc/security/limits.conf <
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft stack 65535
* soft stack 65535
EOF
[root@db01 ~]# echo "* - proc 65535" > /etc/security/limits.d/90-nproc.conf
[root@db01 ~]# ulimit -a <==断开当前连接后重新连接,再查看
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31375
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 65535
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
##卸载系统自带的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 gcc-c++ bison ncurses ncurses-devel numactl zlib libxml2 openssl libaio libstdc++-devel -y
[root@db01 ~]# rpm -qa gcc gcc-c++ bison ncurses ncurses-devel numactl zlib libxml2 openssl libaio libstdc++-devel
libxml2-2.7.6-21.el6_8.1.x86_64
gcc-c++-4.4.7-23.el6.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
numactl-2.0.9-2.el6.x86_64
openssl-1.0.1e-57.el6.x86_64
gcc-4.4.7-23.el6.x86_64
ncurses-devel-5.7-4.20090207.el6.x86_64
libstdc++-devel-4.4.7-23.el6.x86_64
libaio-0.3.107-10.el6.x86_64
##创建mysql用户,不让其登录,不创建家目录
[root@db01 ~]# useradd -s /sbin/nologin -M mysql
[root@db01 ~]# id mysql
uid=501(mysql) gid=501(mysql) groups=501(mysql)
[root@db01 ~]# tail -1 /etc/passwd
mysql:x:501:501::/home/mysql:/sbin/nologin
##创建相关的目录
[root@db01 ~]# mkdir /data/apps /data/mysql/3306/{data,binlog,errlog,slowlog,redolog} -p
[root@db01 ~]# tree /data/
/data/
|-- apps
|-- lost+found
`-- mysql
`-- 3306
|-- binlog
|-- data
|-- errlog
|-- redolog
`-- slowlog
9 directories, 0 files
#创建/tools目录,我们把软件上传到这个目录下,然后进行操作
[root@db01 ~]# mkdir tools
[root@db01 ~]# cd tools/
[root@db01 tools]# rz
[root@db01 tools]# ll mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
-rw-r--r-- 1 root root 643790848 Nov 21 09:47 mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
[root@db01 tools]# tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /data/apps/
[root@db01 tools]# mv /data/apps/mysql-5.7.22-linux-glibc2.12-x86_64/ /data/apps/mysql-5.7.22
[root@db01 tools]# ln -s /data/apps/mysql-5.7.22/ /data/apps/mysql
[root@db01 tools]# ll /data/apps/mysql
lrwxrwxrwx 1 root root 24 Dec 10 10:44 /data/apps/mysql -> /data/apps/mysql-5.7.22/
[root@db01 tools]# chown -R mysql:mysql /data/apps/mysql/
[root@db01 ~]# echo "PATH=/data/apps/mysql/bin:$PATH" >>/etc/bashrc
[root@db01 ~]# source /etc/bashrc
[root@db01 ~]# echo $PATH
/data/apps/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
1.6 准备配置文件
[root@db01 tools]# vim /data/mysql/3306/my.cnf
[client]
port=3306
socket=/data/mysql/3306/mysql.sock
[mysql]
no_auto_rehash
[mysqld]
###Basic Parameters
user=mysql
port=3306
basedir=/data/apps/mysql
datadir=/data/mysql/3306/data
socket=/data/mysql/3306/mysql.sock
pid_file=/data/mysql/3306/mysql.pid
character_set_server=utf8
skip_character_set_client_handshake=1
###Server id
server_id=3306
###Binlog 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/mysql/3306/binlog/mysql_bin
###Slowlog Parameters
log_slow_admin_statements=1
slow_query_log=on
long_query_time=2
log_queries_not_using_indexes=on
slow_query_log_file=/data/mysql/3306/slowlog/mysql_slow.log
###Errlog Parameters
log-error=/data/mysql/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/mysql/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
注意:
01:该脚本中停止mysql的方法为:
mysqladmin -uUser -pPassword -S /data/mysql/3306/mysql.sock shutdown
02:脚本中有一个Pass变量,就是MySQL root用户的密码
03:当然你也可以设置成其它密码,但必须得改脚本中的Pass变量的值(前提是用这个脚本)
[root@db01 ~]# vim /data/mysql/3306/mysqld
#!/bin/bash # #MySQLbootscript #QQ:158316096 #Blog:http://blog.51cto.com/11576296 # #Definevariables RETVAL=0 Port=3306 User=root Pass=chenliang Pid=/data/mysql/3306/mysql.pid Sock=/data/mysql/3306/mysql.sock My=/data/mysql/3306/my.cnf Path=/data/apps/mysql/bin #Determinetheusertoexecute if[$UID-ne$RETVAL];then echo"Mustberoottorunscripts" exit1 fi #Loadthelocalfunctions [-f/etc/init.d/functions]&&source/etc/init.d/functions #Definefunctions start(){ if[!-f"$Pid"];then $Path/mysqld_safe--defaults-file=$My>/dev/null2>&1& RETVAL=$ if[$RETVAL-eq0];then action"StartMySQL[3306]"/bin/true else action"StartMySQL[3306]"/bin/false fi else echo"MySQL3306isrunning" exit1 fi return$RETVAL } stop(){ if[-f"$Pid"];then $Path/mysqladmin-u$User-p$Pass-S$Sockshutdown>/dev/null2>&1 RETVAL=$ if[$RETVAL-eq0];then action"StopMySQL[3306]"/bin/true else action"StopMySQL[3306]"/bin/false fi else echo"MySQL[3306]isnotrunning" exit1 fi return$RETVAL } status(){ if[-f"$Pid"];then echo"MySQL[3306]isrunning" else echo"MySQL[3306]isnotrunning" fi return$RETVAL } #Casecallfunctions case"$1"in start) start RETVAL=$ ;; stop) stop RETVAL=$ ;; restart) stop sleep5 start RETVAL=$ ;; status) status RETVAL=$ ;; *) echo"USAGE:$0{start|stop|restart|status}" exit1 esac #Scriptsreturnvalues exit$RETVAL
1.8 初始化mysql并完成安装
#更改/data/mysql/3306/mysqld脚本的权限为700(因为脚本中有密码)
[root@db01 ~]# chmod 700 /data/mysql/3306/mysqld
[root@db01 ~]# ll /data/mysql/3306/mysqld
-rwx------ 1 root root 1897 Dec 9 00:44 /data/mysql/3306/mysqld
#创建错误日志
[root@db01 ~]# grep "errlog" /data/mysql/3306/my.cnf
log-error=/data/mysql/3306/errlog/mysql_error.log
[root@db01 ~]# touch /data/mysql/3306/errlog/mysql_error.log
[root@db01 ~]# ll /data/mysql/3306/errlog/mysql_error.log
-rw-r--r-- 1 root root 0 Dec 10 10:54 /data/mysql/3306/errlog/mysql_error.log
#更改/data/mysql/3306/目录及子目录下文件的属主/组为mysql
[root@db01 ~]# chown -R mysql:mysql /data/mysql/3306/
[root@db01 ~]# ls -ld /data/mysql/3306/
drwxr-xr-x 7 mysql mysql 4096 Dec 10 10:50 /data/mysql/3306/
#初始化mysql
[root@db01 ~]# mysqld --defaults-file=/data/mysql/3306/my.cnf --user=mysql --basedir=/data/apps/mysql --datadir=/data/mysql/3306/data/ --initialize
[root@db01 ~]# echo $
0
#启动mysql服务并修改密码为chenliang
[root@db01 ~]# /data/mysql/3306/mysqld start
Start MySQL [3306] [ OK ]
[root@db01 ~]# netstat -lntup|grep 3306
tcp 0 0 :::3306 :::* LISTEN 3384/mysqld
[root@db01 ~]# grep "password" /data/mysql/3306/errlog/mysql_error.log
2018-12-10T11:01:25.394681+08:00 1 [Note] A temporary password is generated for root@localhost: z5D/BEBrcil
[root@db01 ~]# mysql -uroot -p -S /data/mysql/3306/mysql.sock
Enter password: <=输入密码z5D/BEBrcil
mysql>
mysql> alter user 'root'@'localhost' identified by 'chenliang';
Query OK, 0 rows affected (0.03 sec)
mysql> select user,host,authentication_string,password_expired from mysql.user where user='root' and host='localhost';
+------+-----------+-------------------------------------------+------------------+
| user | host | authentication_string | password_expired |
+------+-----------+-------------------------------------------+------------------+
| root | localhost | *D072DB593E2E7B068E887A452EB1DB3981A5D844 | N |
+------+-----------+-------------------------------------------+------------------+
1 row in set (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
[root@db01 ~]# mysql -uroot -p -S /data/mysql/3306/mysql.sock -e "show databases;"
Enter password: <==输入密码chenliang
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
[root@db01 ~]# echo -ne "\n# Boot start mysql service[3306].USER:chenliang TIME:2018-11-23\n/data/mysql/3306/mysqld start\n" >>/etc/rc.local
[root@db01 ~]# tail -2 /etc/rc.local
# Boot start mysql service[3306].USER:chenliang TIME:2018-11-23
/data/mysql/3306/mysqld start