mysql一键安装代码_Mysql5.7 - 一键安装脚本

0. 概述

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

1. 准备mysql的安装包

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

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

a114dec4a4c45908186f495a51693851.png

2. 准备mysql-auto-install.sh

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#!/bin/sh# author: yang bao

#time: 2019-04-08# note: this script is used toinstallmysql 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 relatedfile

echo "$(date +"%Y%m%d %H:%M:%S") start to check mysql related file...."# checkif there is mysql installbinary package or not

cnt1=`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!"exit1

elif [ $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 1

fi# checkif there is my.cnf incurrent directory or not

cnt2=`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!"exit1

fi# checkif there is my.cnf in /etc or not

cnt3=`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!"exit1

fi# checkif there is /opt/mydata insystem or not

cnt4=`find / -maxdepth 1 -name 'opt' -type d | wc -l`if [ $cnt4 -eq 1 ]; thencnt5=`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!"exit1

fi

fi

echo "$(date +"%Y%m%d %H:%M:%S") mysql related file is ok...."# check mysql userid mysql &> /dev/null

if [ $? -eq 0 ]; then

echo "mysql user is alreay exist, please delete it first!"exit1

fi# prepareinstallmysqlecho "$(date +"%Y%m%d %H:%M:%S") start prepare install mysql...."#clearold version

rpm-qa | grep -i mysql | grep -v libs | xargs rpm -ev --nodeps &> /dev/null#installrequired packageyum install -y libaio &> /dev/null#if the package is not installcorrectly, terminate the script.

cnt6=`rpm -qa | grep libaio | wc -l`if [ $cnt6 -lt 1 ]; then

echo "libaio package is not install, please check!"exit1

fi# adjust some parameterin /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 parameterin /etc/sysctl.confecho "vm.swappiness = 5" >> /etc/sysctl.conf

sysctl-p &> /etc/null# turn off firewall/etc/init.d/iptables stop &> /etc/nullchkconfig iptables offsed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# move my.cnf to/etcmv my.cnf /etc/# add user mysql

groupadd mysql

useradd-r -g mysql -s /bin/falsemysql

# prepare directorymkdir -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_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...."# startinstallmysqlecho "$(date +"%Y%m%d %H:%M:%S") start install mysql...."cd mysql

bin/mysqld --initialize --user=mysqlif [ $? -ne 0 ]; then

echo "mysql initialize failed, please check the error log!"exit1

fibin/mysql_ssl_rsa_setup &> /dev/null

chmod +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!"exit1

fi

cp support-files/mysql.server /etc/init.d/mysql

#waitmysql startup

cnt7=`ps -ef | grep mysqld | grep -v grep | wc -l`while [ $cnt7 -lt 2]do

sleep 3cnt7=`ps -ef | grep mysqld | grep -v grep | wc -l`done#wait 10s for mysql startup completly and thenchange 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 "mysql db user root initial password is 'root'"

echo "$(date +"%Y%m%d %H:%M:%S") install mysql complete...."exit0

View Code

3. 准备my.cnf文件

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

innodb_buffer_pool_size  # buffer pool大小,一般设置成物理内存 * 60%

innodb_max_undo_log_size  # undo表空间大小

innodb_log_file_size  # redo日志大小

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

[client]

port= 3306socket= /opt/mydata/data/mysql.sock

[mysql]

prompt="(\\u@\\h)[\\d]>"[mysqld]

# basic settings #

server-id = 128user=mysql

port= 3306basedir= /usr/local/mysql

datadir= /opt/mydata/data

tmpdir= /opt/mydata/tmp

pid-file = /opt/mydata/data/mysql.pid

socket= /opt/mydata/data/mysql.sock

character_set_server=utf8mb4

transaction_isolation= READ-COMMITTED

explicit_defaults_for_timestamp= 1max_allowed_packet=1024M

lower_case_table_names= 1secure_file_priv= ''open_files_limit= 65535# connection #

skip_name_resolve= 1max_connections= 1000max_user_connections= 1000max_connect_errors= 1000000thread_cache_size= 512# memory&&myisam #

max_heap_table_size=128M

tmp_table_size=128M

join_buffer_size=16M

key_buffer_size=64M

bulk_insert_buffer_size=16M

myisam_sort_buffer_size=64M

myisam_max_sort_file_size=6G

myisam_recover_options=DEFAULT

# log settings #

log_error= /opt/mydata/log/error.log

log_timestamps=SYSTEM

slow_query_log_file= /opt/mydata/log/slowquery.log

slow_query_log= 1long_query_time= 10log_queries_not_using_indexes= 1log_throttle_queries_not_using_indexes= 10min_examined_row_limit= 100log_slow_admin_statements= 1log-bin = /opt/mydata/log/binlog/mysql-bin

binlog_format=row

expire_logs_days= 30binlog_rows_query_log_events= 1binlog_row_image=minimal

binlog_cache_size=8M

max_binlog_cache_size=4G

max_binlog_size=2G

log_bin_trust_function_creators= 1# innodb settings #

innodb_data_file_path=ibdata1:1024M:autoextend

innodb_buffer_pool_size=300M

innodb_lock_wait_timeout= 10innodb_io_capacity= 4000innodb_io_capacity_max= 8000innodb_flush_method=O_DIRECT

innodb_flush_neighbors= 0innodb_undo_directory= /opt/mydata/log/undo

innodb_undo_tablespaces= 3innodb_undo_log_truncate= 1innodb_max_undo_log_size=2G

innodb_log_group_home_dir= /opt/mydata/log/redo

innodb_log_file_size=1G

innodb_log_files_in_group= 4innodb_log_buffer_size=32M

innodb_thread_concurrency= 16innodb_print_all_deadlocks= 1innodb_sort_buffer_size=16M

innodb_write_io_threads= 4innodb_read_io_threads= 8innodb_rollback_on_timeout= 1innodb_file_per_table= 1innodb_open_files= 65535innodb_stats_persistent_sample_pages= 64innodb_autoinc_lock_mode= 2# Slave #

relay-log = /opt/mydata/log/relaybin/slave-relay-bin

log_slave_updates= 1relay_log_purge= 1relay_log_space_limit=30G

relay_log_recovery= 1relay_log_info_repository=TABLE

skip-slave-start

[mysqldump]

default_character_set= utf8mb4

View Code

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

[root@mysqltest ~]# pwd

/root

[root@mysqltest~]# ll

total629768

-rw-r--r--. 1 root root 2693 Apr 8 16:19my.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 fileis ok....20190408 16:22:32 start prepare installmysql....20190408 16:24:22 prepare installmysql is ok....20190408 16:24:22 start installmysql....

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 serverinplain text, use ssl connection to ensure password safety.mysql db user root initial password is 'root'

20190408 16:25:06 install mysql complete....

5. 新开一个窗口登陆mysql

[root@mysqltest ~]# mysql -uroot -proot

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connectionid 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 its

affiliates. Other names may be trademarks of their respective

owners.

Type'help;' or '\h' for help. Type '\c' to clearthe 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的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值