博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql5.7 - 一键安装脚本
阅读量:7079 次
发布时间:2019-06-28

本文共 9993 字,大约阅读时间需要 33 分钟。

0. 概述

最近鼓捣出了一个mysql安装脚本,将该脚本,mysql的my.cnf文件,mysql的安装包这三个文件放在同一个目录下面,执行sh mysql-auto-install.sh就可以完成mysql的一键安装,是不是很方便呢。

 

1. 准备mysql的安装包

mysql的安装包下载地址:https://dev.mysql.com/downloads/mysql/

注意需要下载的是linux GA版本 64bit,图中我用红色圈出来的部分

 

2. 准备mysql-auto-install.sh

#!/bin/sh# author: yang bao# time: 2019-04-08 # note: this script is used to install mysql on a new machine.# 1. at first, you should prepare mysql install binary package like 'mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz' # and mysql-auto-install.sh and my.cnf under same directory such as /root.# 2. then exec 'sh mysql-auto-install.sh' and see the output.# prepare mysql related fileecho "$(date +"%Y%m%d %H:%M:%S") start to check mysql related file...."# check if there is mysql install binary package or notcnt1=`find . -maxdepth 1 -name 'mysql-*-linux-glibc2.12-x86_64.tar.gz' -type f | wc -l`if [ $cnt1 -lt 1 ]; then    echo "It seems there isn't mysql install binary package in current directory!"    exit 1elif [ $cnt1 -gt 1 ]; then    echo "It seems there are too many mysql install binary packages in current directory,\    please just keep one, rename or move the others!"    exit 1fi# check if there is my.cnf in current directory or notcnt2=`find . -maxdepth 1 -name 'my.cnf' -type f | wc -l`if [ $cnt2 -lt 1 ]; then    echo "It seems there isn't my.cnf in current directory!"    exit 1fi# check if there is my.cnf in /etc or notcnt3=`find /etc -maxdepth 1 -name 'my.cnf' -type f | wc -l`if [ $cnt3 -eq 1 ]; then    echo "It seems there is my.cnf in /etc already, please delete it first!"    exit 1fi# check if there is /opt/mydata in system or notcnt4=`find / -maxdepth 1 -name 'opt' -type d | wc -l`if [ $cnt4 -eq 1 ]; then    cnt5=`find /opt -maxdepth 1 -name 'mydata' -type d | wc -l`    if [ $cnt5 -eq 1 ]; then        echo "It seems there is /opt/mydata already, please delete it first!"        exit 1    fifiecho "$(date +"%Y%m%d %H:%M:%S") mysql related file is ok...."# check mysql userid mysql &> /dev/nullif [ $? -eq 0 ]; then    echo "mysql user is alreay exist, please delete it first!"    exit 1fi# prepare install mysqlecho "$(date +"%Y%m%d %H:%M:%S") start prepare install mysql...."# clear old versionrpm -qa | grep -i mysql | xargs rpm -ev --nodeps &> /dev/null# install required packageyum install -y libaio &> /dev/null# if the package is not install correctly, terminate the script.cnt6=`rpm -qa | grep libaio | wc -l`if [ $cnt6 -lt 1 ]; then    echo "libaio package is not install, please check!"    exit 1fi    # adjust some parameter in /etc/security/limits.confecho "mysql    soft    nproc    16384" >> /etc/security/limits.confecho "mysql    hard    nproc    16384" >> /etc/security/limits.confecho "mysql    soft    nofile    65536" >> /etc/security/limits.confecho "mysql    hard    nofile    65536" >> /etc/security/limits.confecho "mysql    soft    stack    1024000" >> /etc/security/limits.confecho "mysql    hard    stack    1024000" >> /etc/security/limits.conf# adjust some parameter in /etc/sysctl.confecho "vm.swappiness = 10" >> /etc/sysctl.conf sysctl -p &> /etc/null    # turn off firewall/etc/init.d/iptables stop &> /etc/nullchkconfig iptables off sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config# move my.cnf to /etcmv my.cnf /etc/# add user mysqlgroupadd -g 600 mysqluseradd -u 600 -g mysql mysqlecho "mysql" | passwd --stdin mysql &> /etc/null# prepare directory mkdir -p /opt/mydata/datamkdir -p /opt/mydata/log/binlogmkdir -p /opt/mydata/log/redomkdir -p /opt/mydata/log/undomkdir -p /opt/mydata/log/relaybinmkdir -p /opt/mydata/tmpchown -R mysql:mysql /opt/mydata# add path to profileecho 'export PATH=$PATH:/usr/local/mysql/bin' >> /root/.bash_profileecho 'export PATH=$PATH:/usr/local/mysql/bin' >> /home/mysql/.bash_profile# unpackage mysqlrm -rf /usr/local/mysql-*-linux-glibc2.12-x86_64 mysqltar -zxvf mysql-*-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ &> /etc/nullcd /usr/local/ln -s mysql-*-linux-glibc2.12-x86_64 mysqlecho "$(date +"%Y%m%d %H:%M:%S") prepare install mysql is ok...."# start install mysqlecho "$(date +"%Y%m%d %H:%M:%S") start install mysql...."cd mysql./bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestampif [ $? -ne 0 ]; then    echo "mysql initialize failed, please check the error log!"    exit 1fi./bin/mysql_ssl_rsa_setup &> /dev/nullchmod +r /opt/mydata/data/server-key.pem nohup bin/mysqld_safe --user=mysql &if [ $? -ne 0 ]; then    echo "mysql start failed, please check the error log!"    exit 1ficp support-files/mysql.server /etc/init.d/mysql# wait mysql startupcnt7=`ps -ef | grep mysqld | grep -v grep | wc -l`while [ $cnt7 -lt 2 ]    do        sleep 3        cnt7=`ps -ef | grep mysqld | grep -v grep | wc -l`    done# wait 10s for mysql startup completly and then change root passwordsleep 10pass=`grep "temporary password" /opt/mydata/log/error.log |awk -F " " '{print $11}'`/usr/local/mysql/bin/mysqladmin -uroot -p$pass password 'root' echo "system user mysql initial password is 'mysql', mysql db user root initial password is 'root'"echo "$(date +"%Y%m%d %H:%M:%S") install mysql complete...."exit 0
View Code

 

3. 准备my.cnf文件

由于我这个是测试环境,所以内存值调的比较小,生产上面可以将下面两个参数进行调整

innodb_buffer_pool_size = 物理内存 * 60%
innodb_buffer_pool_instances = innodb_buffer_pool_size/128m,个人觉得不需要设太大,16即可

[client]port = 3306socket = /opt/mydata/data/mysql.sock[mysql]prompt="(\\u@\\h)[\\d]> "[mysqld]# basic settings #port = 3306basedir = /usr/local/mysqldatadir = /opt/mydata/datatmpdir = /opt/mydata/tmppid-file = /opt/mydata/data/mysql.pidsocket = /opt/mydata/data/mysql.sockuser = mysqlcharacter_set_server = utf8mb4transaction_isolation = READ-COMMITTEDexplicit_defaults_for_timestamp = 1max_allowed_packet = 1024Mevent_scheduler = 1lower_case_table_names = 1max_heap_table_size = 256Mthread_cache_size = 512secure_file_priv = ''# connection #skip_name_resolve = 1max_connections = 1000max_user_connections = 1000 max_connect_errors = 1000000# session memory setting #read_buffer_size = 8Mread_rnd_buffer_size = 4Msort_buffer_size = 4Mtmp_table_size = 128Mjoin_buffer_size = 8M# log settings #log_error = /opt/mydata/log/error.logslow_query_log = 1long_query_time = 10slow_query_log_file = /opt/mydata/log/slowquery.loglog_queries_not_using_indexes = 1log_throttle_queries_not_using_indexes = 10min_examined_row_limit = 100log_slow_admin_statements = 1expire_logs_days = 30binlog_rows_query_log_events = 1binlog_row_image = minimalbinlog_cache_size = 4Mmax_binlog_cache_size = 4Gmax_binlog_size = 2Glog_bin_trust_function_creators = 1log_timestamps = SYSTEM# innodb settings #innodb_data_file_path = ibdata1:1024M:autoextendinnodb_buffer_pool_size = 300Minnodb_buffer_pool_instances = 2innodb_lock_wait_timeout = 10innodb_io_capacity = 4000innodb_io_capacity_max = 8000innodb_flush_method = O_DIRECTinnodb_undo_directory = /opt/mydata/log/undoinnodb_undo_tablespaces = 3innodb_flush_neighbors = 0innodb_undo_log_truncate = 1innodb_max_undo_log_size = 2Ginnodb_log_group_home_dir = /opt/mydata/log/redoinnodb_log_file_size = 1Ginnodb_log_files_in_group = 4innodb_log_buffer_size = 8Minnodb_thread_concurrency = 16innodb_print_all_deadlocks = 1innodb_sort_buffer_size = 4Minnodb_write_io_threads = 4             innodb_read_io_threads = 8 innodb_rollback_on_timeout = 1innodb_file_per_table = 1innodb_stats_persistent_sample_pages = 64innodb_autoinc_lock_mode = 2# MyISAM #key_buffer_size = 64Mbulk_insert_buffer_size = 16Mmyisam_sort_buffer_size = 64Mmyisam_max_sort_file_size = 6Gmyisam_recover_options = DEFAULT# Master #server-id = 128log-bin = /opt/mydata/log/binlog/mysql-binbinlog_format = ROW# Slave #relay-log = /opt/mydata/log/relaybin/slave-relay-binreplicate_wild_ignore_table = mysql.%log_slave_updates = 1relay_log_purge = 1relay_log_space_limit = 30Grelay_log_recovery = 1relay_log_info_repository = TABLE[mysqld_safe]user = mysqlopen_files_limit = 8192[mysqldump]default_character_set = utf8mb4
View Code

 

4. 执行脚本,并查看输出

[root@mysqltest ~]# pwd/root[root@mysqltest ~]# lltotal 629768-rw-r--r--. 1 root root      2693 Apr  8 16:19 my.cnf-rw-r--r--. 1 root root 644862820 Mar 12 10:47 mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz-rw-r--r--. 1 root root      4859 Apr  8 16:21 mysql-auto-install.sh[root@mysqltest ~]# sh mysql-auto-install.sh 20190408 16:22:32 start to check mysql related file....20190408 16:22:32 mysql related file is ok....20190408 16:22:32 start prepare install mysql....20190408 16:24:22 prepare install mysql is ok....20190408 16:24:22 start install mysql....nohup: appending output to `nohup.out'mysqladmin: [Warning] Using a password on the command line interface can be insecure.Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.system user mysql initial password is 'mysql', mysql db user root initial password is 'root'20190408 16:25:06 install mysql complete....

 

5. 新开一个窗口登陆mysql

[root@mysqltest ~]# mysql -uroot -prootmysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.7.25-log MySQL Community Server (GPL)Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.(root@localhost)[(none)]>

登陆成功,表示mysql安装以及启动,密码修改都已经成功。

 

6. 总结

在写这个脚本的时候,开始都很顺利,到后面执行mysqladmin修改root密码的时候老报错

mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/opt/mydata/data/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/opt/mydata/data/mysql.sock' exists!
询问了博客园大神ivictor[https://www.cnblogs.com/ivictor/]后,是因为我的mysql还没有起来,所以会报以上错误。因此我在脚本里面添加了sleep,等一段时间再修改密码。十分感谢ivictor的帮助

 

转载于:https://www.cnblogs.com/ddzj01/p/10678296.html

你可能感兴趣的文章
Netfilter/iptables的一些新进展
查看>>
程序员的人生规划
查看>>
PHP中抽象类与接口的应用场景
查看>>
ASP.NET中操作SQL数据库
查看>>
Android性能优化
查看>>
Ehcache BigMemory: 摆脱GC困扰
查看>>
C# socket实践 - 简易版FTP(Server & Client)
查看>>
解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率
查看>>
Matrix
查看>>
九乘九口诀算法
查看>>
js检查页面上有无重复id的代码分享
查看>>
jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js)...
查看>>
返回上一步
查看>>
Linux中断处理(一)
查看>>
冒泡排序
查看>>
WINDOWS 2003系统时间24小时制与12小时显示格式不一致问题与解决
查看>>
你可以做一个更好的Coder为了自己的将来
查看>>
《tortoisegit》 Network error:Connection refused
查看>>
SWFupload在IE9以上中的bug
查看>>
【Python】GUI 练习1--利率计算器
查看>>