1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
cat
mysql.sh
#!/bin/sh
#auto install mysql5.7.10
#setting default directory
Port=$1
SoftDir=
"/opt/install"
tarbag=
"mysql-5.7.10-linux-glibc2.5-x86_64"
BaseDir=
"/opt/mysql"
DataDir=
"/opt/$Port"
mkdir
-p
/usr/local/mysql/data
#remove before being installed mysql
function
rmMysql() {
yum -y erase mysql >
/dev/null
2>&1
yum -y erase mysql-server >
/dev/null
2>&1
ret=`rpm -aq |
grep
-i
"mysql-5"
|
wc
-l`
num=`rpm -aq |
grep
-i
"mysql-server"
|
wc
-l`
test
$ret -
eq
1 &&
echo
"mysql uninstall failed"
&&
exit
1
test
$num -
eq
1 &&
echo
"mysql-server uninstall failed"
&&
exit
2
}
#libaio package is needed for mysql5.7.10
function
chkEnv() {
yum -y
install
libaio >
/dev/null
2>&1
res=`rpm -aq|
grep
libaio |
wc
-l`
test
$res -
ne
1 &&
echo
"libaio package install failed..."
&&
exit
3
}
#create mysql user and group, authorization, extract
function
preInstall() {
/usr/sbin/groupadd
mysql
/usr/sbin/useradd
-r -g mysql -s
/bin/false
mysql
mkdir
-p $BaseDir
mkdir
-p $DataDir
/data
chown
mysql.mysql $DataDir
if
test
-f $SoftDir/$tarbag.
tar
.gz
then
cd
$SoftDir &&
tar
-zxf $tarbag.
tar
.gz
cd
$SoftDir/$tarbag &&
cp
-r * $BaseDir
echo
ok
else
echo
"$tarbag.tar.gz is not found..."
exit
10
fi
}
function
multPreInstall() {
mkdir
-p $DataDir
/data
chown
mysql.mysql $DataDir
}
function
install_mysql() {
#initialize mysql database
$BaseDir
/bin/mysqld
\
--initialize \
--user=mysql \
--basedir=$BaseDir \
--datadir=$DataDir
/data
\
--character-
set
-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--initialize-insecure >
/dev/null
2>&1
}
#get my.cnf and start/stop script, attention alter parameters by your envionment
function
conf_mysql() {
cp
$SoftDir
/my
.cnf $DataDir
cp
$SoftDir
/mysql
.server $DataDir
/usr/bin/vim
$DataDir
/my
.cnf<<EOF >
/dev/null
2>&1
:%s
/3306/
$Port
/g
:wq
EOF
sed
-i
"s/port=3306/port=$Port/"
$DataDir
/mysql
.server
sed
-i
"s%CmdPath=\"\"%CmdPath=\"${BaseDir}\/bin\"%"
$DataDir
/mysql
.server
sed
-i
"s%mysql_sock=\"\"%mysql_sock=\"${DataDir}\/mysql.sock\"%"
$DataDir
/mysql
.server
chmod
600 $DataDir
/my
.cnf
chmod
700 $DataDir
/mysql
.server
$DataDir
/mysql
.server start >
/dev/null
2>&1
sleep
60
# ren=`netstat -natp|grep mysqld | grep "$1" | wc -l`
if
test
-e $DataDir
/mysql
.sock;
then
echo
"$DataDir/mysql.sock"
echo
-e
"\033[33;1mmysql install success...\033[0m"
pro=`
grep
$BaseDir
/root/
.bash_profile |
wc
-l`
if
test
"$pro"
-
ne
1;
then
# sed -i "s%PATH=\$PATH\:\$HOME\/bin%PATH=\$PATH\:\$HOME\/bin\:$BaseDir\/bin%" /root/.bash_profile
sed
-i
"s%PATH=\$PATH\:\$HOME\/bin%PATH=\$HOME\/bin\:$BaseDir\/bin%:\$PATH"
/root/
.bash_profile
source
/root/
.bash_profile
fi
else
echo
-e
"\033[31;1mmysql install failed...\033[0m"
fi
}
if
[[
"$1"
=~ ^[0-9]+$ ]];
then
inPort=`
netstat
-natp |
grep
"mysqld"
|
grep
"LISTEN"
|
awk
'{print $4}'
|
cut
-b 4-`
if
test
! -z
"$inPort"
;
then
for
myPort
in
$inPort
do
if
test
"$myPort"
-
eq
"$1"
;
then
echo
-e
"\033[33;1m$1 instance has already existed...\033[0m"
exit
1
fi
done
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1mStarting create new instance $1\033[0m"
multPreInstall
install_mysql
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1mconfiguration and starting $1 instance...\033[0m"
conf_mysql
else
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1mremove before being installed mysql...\033[0m"
rmMysql
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1minstall libaio package...\033[0m"
chkEnv
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1mget ready install envionment...\033[0m"
preInstall
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1mStarting install mysql ver5.7.10...\033[0m"
install_mysql
echo
-e
"\033[32;1m===========================================\033[0m"
echo
-e
"\033[32;1mconfiguration mysql and starting mysql...\033[0m"
conf_mysql
fi
else
echo
"Usage: $0 Port (Port is inteager)"
fi
source
/root/
.bash_profile
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
cat
mysql.server
#!/bin/sh
# This is an interactive program, we needthe current locale
[ -f
/etc/profile
.d
/lang
.sh ] && .
/etc/profile
.d
/lang
.sh
# We can't Japanese on normal console atboot time, so force.
if
[
"$LANG"
=
"ja"
-o
"$LANG"
=
"ja_JP.eucJP"
];
then
if
[
"$TERM"
=
"linux"
] ;
then
LANG=C
fi
fi
# Source function library.
.
/etc/init
.d
/functions
#init
port=3306
mysql_user=
"root"
mysql_pwd=
""
CmdPath=
""
mysql_sock=
""
#startup function
function_start_mysql()
{
if
[ ! -e
"$mysql_sock"
];
then
printf
"Starting MySQL...\n"
${CmdPath}
/mysqld_safe
--defaults-
file
=
/opt/
${port}
/my
.cnf --ledir=${CmdPath} 2>&1 >
/dev/null
&
sleep
2
else
printf
"MySQL is running...\n"
exit
fi
}
#stop function
function_stop_mysql()
{
if
[ ! -e
"$mysql_sock"
];
then
printf
"MySQL is stopped...\n"
exit
else
printf
"Stoping MySQL...\n"
${CmdPath}
/mysqladmin
-u ${mysql_user} -p${mysql_pwd} -S $mysql_sock
shutdown
sleep
2
fi
}
#restart function
function_restart_mysql()
{
printf
"Restarting MySQL...\n"
function_stop_mysql
sleep
2
function_start_mysql
}
case
$1
in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
status)
status mysqld
;;
*)
printf
"Usage: /opt/${port}/mysql {start|stop|restart|status}\n"
esac
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
cat
my.cnf
[client]
port = 3306
socket =
/opt/3306/mysql
.sock
character-
set
-server = utf8mb4
default-character-
set
= utf8mb4
[mysql]
no-auto-rehash
default-character-
set
= utf8mb4
[mysqld]
user = mysql
port = 3306
character-
set
-client-handshake = FALSE
character-
set
-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=
'SET NAMES utf8mb4'
#show_compatibility_56 = 1
socket =
/opt/3306/mysql
.sock
basedir =
/opt/mysql
datadir =
/opt/3306/data
explicit_defaults_for_timestamp =
true
skip-ssl
secure-
file
-priv = NULL
lower_case_table_names = 1
back_log = 300
max_connections = 3000
max_connect_errors = 100
table_open_cache = 4096
external-locking = FALSE
max_allowed_packet = 64M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 16
query_cache_size = 128M
query_cache_limit = 4M
ft_min_word_len = 8
thread_stack = 512K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 128M
max_heap_table_size = 128M
###*** slow query parameters
long_query_time = 6
slow_query_log
slow_query_log_file =
/opt/3306/slow
.log
###*** binlog parameters
log-bin =
/opt/3306/mysql-bin
binlog_cache_size = 4M
max_binlog_cache_size = 256M
max_binlog_size = 32M
#binlog_format = MIXED
binlog_format = row
expire_logs_days = 7
###*** relay-log parameters
#relay-log = /opt/3307/relay-bin
#relay-log-info-file = /opt/3307/relay-log.info
#master-info-repository = table
#relay-log-info-repository = table
#relay-log-recovery = 1
#*** MyISAM parameters
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 1M
#skip-name-resolve
###*** master-slave replication parameters
server-
id
= 105
slave-skip-errors = all
#*** Innodb storage engine parameters
innodb_buffer_pool_size = 2G
innodb_data_file_path = ibdata1:10M:autoextend
#innodb_file_io_threads = 8
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = on
sql_mode=
'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
[mysqldump]
quick
max_allowed_packet = 32M
[myisamchk]
key_buffer = 16M
sort_buffer_size = 16M
read_buffer = 8M
write_buffer = 8M
[mysqld_safe]
open
-files-limit = 8192
log-error=
/opt/3306/mysql_3306
.err
pid-
file
=
/opt/3306/mysqld
.pid
|
1
|
MySQL版本 mysql-5.7.10-linux-glibc2.5-x86_64.
tar
.gz
|
使用这个脚本注意的地方
-
/etc/my.cnf必须要移除掉
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1854369,如需转载请自行联系原作者