1 #!/bin/bash2
3 userdir=/usr/local4 basedir=/data5 port=3306
6 socket=/data/mysql/3306/run/mysql.sock7 newpwd="123456"
8 tarfile="mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz"
9 #------------------------------------------------------------------
10
11 tarfiledir="${tarfile%.tar.gz*}"
12 realpath=$(readlink -f "$0")13 realdir=$(dirname "$realpath")14
15 logfile=${realdir}/mysql_install.log16 true >${logfile}17
18 #adduser19 #mkdir -p ${userdir}20
21 yum install libaio libaio-devel expect -y> /dev/null 2>&1
22
23 id mysql >/dev/null 2>&1
24 if [ $? -eq 1]25 then
26 groupadd -r mysql27 useradd -g mysql -s /bin/false -r mysql28 echo "create user mysql by this script" >>${logfile}29 else
30 echo "user mysql has been created before run this script" >>${logfile}31 fi
32
33 #init dir
34
35
36 cd "${realdir}"
37 #wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
38 if [ ! -d ${tarfiledir} ]39 then
40 tar -xf ${tarfile} -C ${userdir}/src41 fi
42
43 if [ ! -d "${basedir}"]44 then
45
46 mkdir -p ${basedir}/mysql/3306/{data,tmp,log,innodb,relay-log,binlog,run,etc,redo,undo,ssl}47 fi
48
49
50 cd ${userdir}51
52 ln -s ${userdir}/src/mysql-5.7.22-linux-glibc2.12-x86_64 mysql53 cd ${userdir}/mysql54 mkdir mysql-files55 chmod 750 mysql-files56 cd ${userdir}57 chown mysql.mysql mysql/ -R58
59 cd ${basedir}60 chown -R mysql.mysql ${basedir}61
62 #init mysql63 cat > ${basedir}/mysql/3306/etc/my.cnf <
67 [mysql]68 default-character-set =utf8mb469 prompt=(\\u@\\h) [\\d]>\\_70
71 [mysqld]72 ########basic settings########73 server-id = 1001
74 port = 3306
75 user =mysql76 #skip-networking77 #bind_address=118.31.66.53
78 #autocommit = 0
79 character_set_server=utf8mb480 skip_name_resolve = 1
81 max_connections = 100000
82 max_connect_errors = 5000
83 datadir = /data/mysql/3306/data84 default_storage_engine=INNODB85 transaction_isolation = READ-COMMITTED86 explicit_defaults_for_timestamp = 1
87 join_buffer_size = 134217728
88 tmp_table_size = 67108864
89 tmpdir = /data/mysql/3306/tmp90 socket = /data/mysql/3306/run/mysql.sock91 pid-file = /data/mysql/3306/run/mysql.pid92 max_allowed_packet = 16777216
93 sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
94 interactive_timeout = 1800
95 wait_timeout = 1800
96 lock_wait_timeout = 1800
97 read_buffer_size = 16777216
98 read_rnd_buffer_size = 33554432
99 sort_buffer_size = 33554432
100 key_buffer_size = 2147483648
101 group_concat_max_len = 102400
102
103 ########log settings########104 log_bin = /data/mysql/3306/binlog/bin.log105 log_error = /data/mysql/3306/log/error.log106 slow_query_log = 1
107 slow_query_log_file = /data/mysql/3306/log/slow.log108 secure_file_priv='/root/'
109 log_queries_not_using_indexes = 1
110 log_slow_admin_statements = 1
111 log_slow_slave_statements = 1
112 log_throttle_queries_not_using_indexes = 10
113 expire_logs_days = 90
114 long_query_time = 0.75
115 min_examined_row_limit = 100
116
117
118 ########replication settings########119 master_info_repository =TABLE120 relay_log_info_repository =TABLE121 sync_binlog = 1
122 gtid_mode =on123 enforce_gtid_consistency = 1
124 log_slave_updates =on125 binlog_format =row126 relay_log = /data/mysql/3306/relay-log/relay.log127 relay_log_recovery = 1
128 binlog_gtid_simple_recovery = 1
129 slave_skip_errors =ddl_exist_errors130 #read_only =on131 #super_read_only =on132
133 ########innodb settings########134 innodb_data_home_dir = /data/mysql/3306/innodb135 innodb_data_file_path =ibdata1:1000M;ibdata2:1000M:autoextend136 innodb_page_size = 8192
137 innodb_buffer_pool_size =750M138 innodb_buffer_pool_instances = 8
139 innodb_buffer_pool_load_at_startup = 1
140 innodb_buffer_pool_dump_at_shutdown = 1
141 innodb_lru_scan_depth = 500
142 innodb_lock_wait_timeout = 100
143 innodb_io_capacity = 4000
144 innodb_io_capacity_max = 8000
145 innodb_flush_method =O_DIRECT146 innodb_flush_log_at_trx_commit = 1
147 innodb_file_format =Barracuda148 innodb_file_format_max =Barracuda149 innodb_log_group_home_dir = /data/mysql/3306/redo/
150 innodb_undo_directory = /data/mysql/3306/undo/
151 innodb_undo_logs = 128
152 innodb_undo_tablespaces = 3
153 innodb_flush_neighbors = 1
154 innodb_log_file_size =2G155 innodb_log_buffer_size = 33554432
156 innodb_purge_threads = 8
157 innodb_large_prefix = 1
158 innodb_thread_concurrency = 64
159 innodb_print_all_deadlocks = 1
160 innodb_strict_mode = 1
161 innodb_sort_buffer_size = 67108864
162 metadata_locks_hash_instances = 64
163 innodb_open_files = 4096
164 table_open_cache = 4096
165 table_definition_cache = 4096
166 table_open_cache_instances = 128
167 thread_cache_size = 64
168 innodb_online_alter_log_max_size=1G169
170 ########semi syncreplication settings########171 plugin_dir=/usr/local/mysql/lib/plugin172 plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
173 loose_rpl_semi_sync_master_enabled = 1
174 loose_rpl_semi_sync_slave_enabled = 1
175 loose_rpl_semi_sync_master_timeout = 5000
176
177 EOF178
179 ${userdir}/mysql/bin/mysqld --defaults-file=${basedir}/mysql/3306/etc/my.cnf --initialize --user=mysql && echo "init mysql successful"
180
181 ${userdir}/mysql/bin/mysql_ssl_rsa_setup --datadir=${basedir}/mysql/3306/ssl && echo "ssl setup successful"
182
183 ${userdir}/mysql/bin/mysqld_safe --defaults-file=${basedir}/mysql/3306/etc/my.cnf --user=mysql &
184
185
186 #update root's pwd
187
188 genpwd=$(cat ${basedir}/mysql/3306/log/error.log | grep "password is generated for root@localhost") || genpwd=""
189
190 oldpwd=${genpwd##*root@localhost: }191
192 #${userdir}/mysql/bin/mysql -uroot -p${oldpwd} -S $socket -e "alter user user() identified by \"${newpwd}\""
193
194 sleep 15
195
196 cd ${realdir}197 cat > tmp_expect.sh <" {send "alter user user() identified by \"${newpwd}\";\n"}203 }204 interact205 EOF206 chmod 755 ./tmp_expect.sh
207 expect ./tmp_expect.sh && rm -rf ./tmp_expect.sh