mysql 7 二进制版本安装
使用如下脚本,直接安装即可
mysql版本:mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
备份工具:percona-xtrabackup-2.4.20-Linux-x86_64.el7.tar.gz
1 #!/bin/bash 2 3 if ! id -u 'mysql' >/dev/null 2>&1; then 4 groupadd mysql; 5 useradd mysql -g mysql -M -s /sbin/nologin; 6 fi 7 8 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz; 9 mkdir -p /data/lib/mysql/{data,run,logs,conf,logbin,tmp,shell,backup} 10 mkdir -p /data/logs/mysql 11 12 tar -xf mysql5.7.21/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz 13 mv mysql-5.7.21-linux-glibc2.12-x86_64 /data/logs/mysql/mysql-server 14 15 echo '[client] 16 port=3306 17 socket=/data/lib/mysql/run/mysql.sock 18 19 [mysql] 20 #在mysql提示符中显示当前用户、数据库、时间等信息 21 prompt="\\u@\\h [\\d]>" 22 #不使用自动补全功能 23 no-auto-rehash 24 25 [mysqld] 26 #定义mysql主程序目录 27 basedir=/data/lib/mysql/ 28 #定义数据目录 29 datadir=/data/lib/mysql/data/ 30 socket=/data/lib/mysql/run/mysql.sock 31 #定义临时目录 32 tmpdir=/data/lib/mysql/tmp 33 #pid 文件 34 pid-file=/data/lib/mysql/run/mysqld.pid 35 #启动的用户 36 user=mysql 37 #定义端口 38 port=3306 39 #server id,需要修改,集群之间不能冲突 40 server-id=36 41 #指定客户端字符集 42 character-set-server=utf8mb4 43 #开启EVENT支持 44 event_scheduler=1 45 #清空sql_mode规则 46 sql_mode='' 47 48 #time zone 49 default-time-zone=SYSTEM 50 log_timestamps=SYSTEM 51 52 #timeout 53 interactive_timeout=28800 54 wait_timeout=28800 55 56 #定义打开最大文件数 57 open_files_limit=65535 58 #设置最大连接数 59 max_connections=13000 60 #设置每个主机的连接请求异常中断的最大次数 61 max_connect_errors=10000 62 #大小写不敏感 63 lower_case_table_names=1 64 #关闭dns解析 65 skip_name_resolve=1 66 67 #开启gtid模式 68 gtid-mode=on 69 enforce-gtid-consistency=1 70 lock_wait_timeout=3600 71 72 ###### 慢日志 ###### 73 #slow存储方式 74 log-output=file 75 #开启慢查询日志记录功能 76 slow_query_log=1 77 #慢日志记录超过1秒的SQL执行语句,可调小到0.1秒 78 long_query_time=5 79 #慢日志文件 80 slow_query_log_file=/data/lib/mysql/logs/slow-mysql.log 81 #记录由Slave所产生的慢查询 82 #log-slow-slave-statements=1 83 #开启DDL等语句慢记录到slow log 84 log_slow_admin_statements=1 85 #记录没有走索引的查询语句 86 log_queries_not_using_indexes=1 87 #表示每分钟允许记录到slow log的且未使用索引的SQL语句次数 88 log_throttle_queries_not_using_indexes=60 89 #查询检查返回少于该参数指定行的SQL不被记录到慢查询日志 90 min_examined_row_limit=100 91 92 ###### mysql错误日志文件 ###### 93 log-error=/data/lib/mysql/logs/error-server.log 94 #将新发起连接时产生的"失败的连接"和"拒绝访问"类的错误信息也记录进错误日志 95 log_warnings = 2 96 97 ####### binlog config ###### 98 #binlog 格式 99 binlog_format=row 100 #binlog文件 101 log-bin=/data/lib/mysql/logbin/mysql-server-bin 102 #binlog的cache大小 103 binlog_cache_size=4M 104 #binlog 能够使用的最大cache 105 max_binlog_cache_size=2G 106 #最大的binlog file size 107 max_binlog_size=1G 108 #当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,注重binlog安全性可以设为1 109 sync_binlog=0 110 #procedure 111 log_bin_trust_function_creators=1 112 #保存bin log的天数 113 expire_logs_days=14 114 115 #限制mysqld的导入导出只能发生在/tmp/目录下 116 secure_file_priv="/data/lib/mysql/tmp/" 117 118 ####################### relay log ####################### 119 #复制进程就不会随着数据库的启动而启动 120 skip_slave_start=1 121 #relay log的最大的大小 122 max_relay_log_size=128M 123 #SQL线程在执行完一个relay log后自动将其删除 124 relay_log_purge=1 125 #relay log受损后,重新从主上拉取最新的一份进行重放 126 relay_log_recovery=1 127 #relay log文件 128 relay-log=/data/lib/mysql/logbin/relay-bin 129 relay-log-index=/data/lib/mysql/logbin/relay-bin.index 130 #开启slave写realy log到binlog中 131 log_slave_updates 132 #开启relay log自动清理,如果是MHA架构,需要关闭 133 relay-log-purge=1 134 #设置relay log保存在mysql表里面 135 master_info_repository=TABLE 136 relay_log_info_repository=TABLE 137 138 #关闭query 139 query_cache_size=0 140 query_cache_type=0 141 142 #buffers & cache 143 table_open_cache=1024 144 table_definition_cache=1024 145 table_open_cache_instances=64 146 147 max_heap_table_size=96M 148 sort_buffer_size=16M 149 join_buffer_size=16M 150 thread_cache_size=200 151 152 #每个连接线程被创建时,MySQL给它分配的内存大小,单位:K 153 thread_stack=512K 154 tmp_table_size=96M 155 key_buffer_size=32M 156 read_buffer_size=8M 157 #MySql的随机读缓冲区大小 158 read_rnd_buffer_size=16M 159 bulk_insert_buffer_size=64M 160 161 thread_cache_size=7518 162 back_log=1024 163 164 ###### myisam ###### 165 #MyISAM表发生变化时重新排序所需的缓冲 166 myisam_sort_buffer_size=128M 167 #MySQL重建索引时所允许的最大临时文件的大小 168 myisam_max_sort_file_size=1G 169 #如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们 170 myisam_repair_threads=1 171 172 ###### innodb ###### 173 #pool的大小 174 innodb_buffer_pool_size=2G 175 #pool的个数 176 innodb_buffer_pool_instances=8 177 #开启实例down了,dump出innodb buffer 178 innodb_buffer_pool_dump_at_shutdown=1 179 #开启实例重启后,预加载innodb buffer 180 innodb_buffer_pool_load_at_startup=1 181 #mysql数据字典文件 182 innodb_data_file_path=ibdata1:1G:autoextend 183 #事物提交,redo log不写入硬盘而是写入系统缓存,就认为事务成功,日志仍然会每秒flush到硬盘,安全性要求高的话,可以设置为1 184 innodb_flush_log_at_trx_commit=2 185 #存redo log的buffer大小 186 innodb_log_buffer_size=8M 187 #redo log文件大小 188 innodb_log_file_size=1G 189 #一组redo log的文件个数 190 innodb_log_files_in_group=3 191 #脏页占innodb buffer pool到50%,触发刷新 192 innodb_max_dirty_pages_pct=50 193 #开启独立表空间模式 194 innodb_file_per_table=1 195 #事务因加锁超时,回滚整个事务 196 innodb_rollback_on_timeout 197 #事务隔离级别为RR模式 198 transaction_isolation=REPEATABLE-READ 199 #innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log 200 innodb_flush_method=O_DIRECT 201 #关闭查询I_S库的相关统计表时,触发更新统计信息 202 innodb_stats_on_metadata=0 203 204 #innodb_max_undo_log_size=4G 205 #事务等待获取资源等待的最长时间,单位秒 206 innodb_lock_wait_timeout=10 207 #事务B在锁等待超时后是回滚事务内所有的statement还是最后一条语句,0表示rollback最后一条语句,默认值;1表示回滚事务B内所有的statements; 208 innodb_rollback_on_timeout=1 209 #开启死锁相关信息保存到MySQL错误日志 210 innodb_print_all_deadlocks=1 211 212 #使用哪个存储引擎来管理磁盘上的内部临时表 213 internal_tmp_disk_storage_engine=InnoDB 214 215 innodb_write_io_threads=8 216 innodb_read_io_threads=8 217 innodb_purge_threads=4 218 innodb_page_cleaners=4 219 220 #performance_schema 221 performance_schema=OFF 222 performance_schema_instrument='%=OFF' 223 224 #单盘SAS/SATA --> 200 225 #SAS*12 RAID10 --> 2000 226 #SSD --> 10000-20000 227 #PCIe --> 50000 228 #调整刷新脏页的数量 229 #一次刷新2000个页到磁盘,SAS raid10建议2000,ssd建议1000,单盘建议200 230 innodb_io_capacity=200 231 innodb_io_capacity_max=400 232 #刷新脏页时,检查相邻页 233 innodb_flush_neighbors=1 234 235 #打开计数器innodb monitor 236 innodb_monitor_enable="module_innodb" 237 innodb_monitor_enable="module_server" 238 innodb_monitor_enable="module_dml" 239 innodb_monitor_enable="module_ddl" 240 innodb_monitor_enable="module_trx" 241 innodb_monitor_enable="module_os" 242 innodb_monitor_enable="module_purge" 243 innodb_monitor_enable="module_log" 244 innodb_monitor_enable="module_lock" 245 innodb_monitor_enable="module_buffer" 246 innodb_monitor_enable="module_index" 247 innodb_monitor_enable="module_ibuf_system" 248 innodb_monitor_enable="module_buffer_page" 249 innodb_monitor_enable="module_adaptive_hash" 250 251 [mysqld_safe] 252 log-error=/data/lib/mysql/logs/mysql_error.log 253 pid-file=/data/lib/mysql/run/mysqld.pid 254 255 [mysqldump] 256 quick 257 max_allowed_packet=32M 258 259 [xtrabackup] 260 socket=/data/lib/mysql/run/mysql.sock' > /data/lib/mysql/conf/my.cnf; 261 262 chown -R mysql:mysql /data/lib/mysql; 263 chown -R mysql:mysql /data/logs/mysql; 264 265 /data/logs/mysql/mysql-server/bin/mysqld --defaults-file=/data/lib/mysql/conf/my.cnf --basedir=/data/lib/mysql/ --datadir=/data/lib/mysql/data/ --user=mysql --initialize-insecure; 266 267 echo "########################### install XtraBackup ###################################" 268 wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.20/binary/tarball/percona-xtrabackup-2.4.20-Linux-x86_64.el7.tar.gz; 269 270 tar -xf percona-xtrabackup-2.4.20-Linux-x86_64.el7.tar.gz 271 mv percona-xtrabackup-2.4.20-Linux-x86_64 /data/lib/mysql/xtrabackup 272 273 echo 'export XBK=/data/lib/mysql/xtrabackup/' >> /etc/profile.d/xbk.sh 274 echo 'export PATH=$XBK/bin:$PATH' >> /etc/profile.d/xbk.sh 275 source /etc/profile.d/xbk.sh 276 chown -R mysql:mysql /data/lib/mysql; 277 chown mysql:mysql /etc/profile.d/xbk.sh; 278 279 xtrabackup --version 280 echo "########################### XtraBackup end #######################################" 281 282 echo "set global validate_password_policy=0;set global validate_password_length=1;ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxxxx';" 283 284 echo "[program:mysqld] 285 command=/data/logs/mysql/mysql-server/bin/mysqld --basedir=/data/lib/mysql --datadir=/data/lib/mysql/data --plugin-dir=/data/logs/mysql/mysql-server/lib/plugin --log-error=/data/logs/mysql/mysqld.log --pid-file=/data/lib/mysql/run/mysqld.pid --socket=/data/lib/mysql/run/mysql.sock 286 priority=99 287 user=mysql 288 directory=/data/tmp 289 autostart=true 290 autorestart=true 291 startsecs=3 292 startretries=999999 293 redirect_stderr=false 294 stdout_logfile=/data/logs/supervisord/mysqld.log" >> /data/etc/supervisor/conf.d/vanish.conf 295 296 echo """ 297 grant all on *.* to root@'localhost' identified by 'xxxxxx'; 298 grant all on *.* to xxxx@'%' identified by 'xxxxxxxx'; 299 300 create user 'slave_name'@'x.x.x.%' identified by 'xxxxxxxx'; 301 grant replication slave on *.* to slave_name@'x.x.x.%'; 302 303 #select Host,User,authentication_string from mysql.user; 304 #set password=''; 305 #delete from mysql.user where user='xxxx' and Host='x.x.x.%'; 306 #flush privileges; 307 """