Mysql5.6 自动化部署

时间:2024-01-13 13:24:14

主机环境:Centos6.5

前提:

1. 配置yum源

2. 移除系统自带的mysql

3. 删除原先的mysql用户

4. 使用mysql二进制安装包:https://dev.mysql.com/downloads/file/?id=473278

[root@mysql ~]# ls -lrt

-rw-r--r-- 1 root root 328739574 Nov 11 00:40 mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
-rw-r--r-- 1 root root 7302 Nov 11 00:41 mysql_auto_install.sh
-rw-r--r-- 1 root root 866364 Nov 11 00:46 mysql-install.log

mysql_install.sh:注意替换软件包版本

[root@mysql ~]# cat mysql_auto_install.sh
###### 二进制自动安装数据库脚本root密码mysqld将脚本和安装包放在/root目录即可###############
######数据库目录/usr/local/mysql############
######数据目录/data/mysql############
######日志目录/log/mysql############
######端口号默认3306其余参数按需自行修改############
##################
#author:rrhelei@126.com#
##################
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:~/bin
export PATH
# Check if user is root
if [ $(id -u) != "0" ]; then
echo "Error: You must be root to run this script, please use root to install"
exit 1
fi
clear
echo "========================================================================="
echo "A tool to auto-compile & install MySQL 5.6.38 on Redhat/CentOS Linux "
echo "========================================================================="
cur_dir=$(pwd)
#set mysql root password
echo "==========================="
mysqlrootpwd="mysqld"
echo -e "Please input the root password of mysql:"
read -p "(Default password: mysqld):" mysqlrootpwd
if [ "$mysqlrootpwd" = "" ]; then
mysqlrootpwd="mysqld"
fi
echo "==========================="
echo "MySQL root password:$mysqlrootpwd"
echo "==========================="
#which MySQL Version do you want to install?
echo "==========================="
isinstallmysql56="n"
echo "Install MySQL 5.6.38,Please input y"
read -p "(Please input y , n):" isinstallmysql56
case "$isinstallmysql56" in
y|Y|Yes|YES|yes|yES|yEs|YeS|yeS)
echo "You will install MySQL 5.6.38"
isinstallmysql56="y"
;;
*)
echo "INPUT error,You will exit install MySQL 5.6.38"
isinstallmysql56="n"
exit
esac
get_char()
{
SAVEDSTTY=`stty -g`
stty -echo
stty cbreak
#dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
echo ""
echo "Press any key to start...or Press Ctrl+c to cancel"
char=`get_char`
# Initialize the installation related content.
function InitInstall()
{
cat /etc/issue
uname -a
MemTotal=`free -m | grep Mem | awk '{print $2}'`
echo -e "\n Memory is: ${MemTotal} MB "
#Set timezone
#rm -rf /etc/localtime
#ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#Delete Old Mysql program
rpm -qa|grep mysql
rpm -e mysql
#yum -y remove mysql-server mysql mysql-libs
#yum -y remove php-mysql
#yum -y install yum-fastestmirror
#yum -y update
#Disable SeLinux
if [ -s /etc/selinux/config ]; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
fi
setenforce 0
}
#Installation of depend on and optimization options.
function InstallDependsAndOpt()
{
cd $cur_dir
cat >>/etc/security/limits.conf<<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
EOF
echo "fs.file-max=65535" >> /etc/sysctl.conf
}
#Install MySQL
function InstallMySQL56()
{
echo "============================Install MySQL 5.6.22=================================="
cd $cur_dir
#Backup old my.cnf
#rm -f /etc/my.cnf
if [ -s /etc/my.cnf ]; then
mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M%S`.bak
fi
#mysql directory configuration
groupadd mysql -g 512
useradd -u 512 -g mysql -s /sbin/nologin -d /home/mysql mysql
tar xvf /root/mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
mv /root/mysql-5.6.38-linux-glibc2.12-x86_64 /usr/local/mysql
mkdir -p /data/mysql
mkdir -p /log/mysql
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /log
#edit /etc/my.cnf
SERVERID=`ifconfig eth0 | grep "inet addr" | awk '{ print $2}'| awk -F. '{ print $3$4}'`
cat >>/etc/my.cnf<<EOF
[client]
port= 3306
socket= /tmp/mysql.sock
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
port= 3306
socket= /tmp/mysql.sock
basedir= /usr/local/mysql
datadir= /data/mysql
open_files_limit = 3072
back_log = 103
max_connections = 800
max_connect_errors = 100000
table_open_cache = 512
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 51
query_cache_size = 32M
tmp_table_size = 96M
max_heap_table_size = 96M
slow_query_log = 1
slow_query_log_file = /log/mysql/slow.log
log-error = /log/mysql/error.log
long_query_time = 1
server-id = $SERVERID
log-bin = mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 4096M
max_binlog_size = 1024M
expire_logs_days = 60
key_buffer_size = 32M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
character-set-server=utf8
default-storage-engine = InnoDB
binlog_format = row
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1
binlog_rows_query_log_events = 1
explicit_defaults_for_timestamp = 1
#log_slave_updates=1
#gtid_mode=on
#enforce_gtid_consistency=1
#innodb_write_io_threads = 8
#innodb_read_io_threads = 8
#innodb_thread_concurrency = 0
transaction_isolation = REPEATABLE-READ
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
#innodb_data_home_dir =
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_max_dirty_pages_pct = 50
innodb_file_per_table = 1
innodb_locks_unsafe_for_binlog = 0
wait_timeout = 14400
interactive_timeout = 14400
skip-name-resolve
[mysqldump]
quick
max_allowed_packet = 32M
EOF
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --defaults-file=/etc/my.cnf --user=mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on
cat >> /etc/ld.so.conf.d/mysql-x86_64.conf<<EOF
/usr/local/mysql/lib
EOF
ldconfig
if [ -d "/proc/vz" ];then
ulimit -s unlimited
fi
/etc/init.d/mysqld start
cat >> /etc/profile <<EOF

export PATH=/usr/local/mysql/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

EOF
source /etc/profile
/usr/local/mysql/bin/mysqladmin -u root password $mysqlrootpwd
cat > /tmp/mysql_sec_script<<EOF
use mysql;
delete from mysql.user where user!='root' or host!='localhost';
grant all privileges on *.* to 'sys_admin'@'%' identified by 'mysqld';
flush privileges;
EOF
/usr/local/mysql/bin/mysql -u root -p$mysqlrootpwd -h localhost < /tmp/mysql_sec_script
#rm -f /tmp/mysql_sec_script
/etc/init.d/mysqld restart
echo "============================MySQL 5.6.38 install completed========================="
}
function CheckInstall()
{
echo "===================================== Check install ==================================="
clear
ismysql=""
echo "Checking..."
if [ -s /usr/local/mysql/bin/mysql ] && [ -s /usr/local/mysql/bin/mysqld_safe ] && [ -s /etc/my.cnf ]; then
echo "MySQL: OK"
ismysql="ok"
else
echo "Error: /usr/local/mysql not found!!!MySQL install failed."
fi
if [ "$ismysql" = "ok" ]; then
echo "Install MySQL 5.6.38 completed! enjoy it."
echo "========================================================================="
netstat -ntl
else
echo "Sorry,Failed to install MySQL!"
echo "You can tail /root/mysql-install.log from your server."
fi
}
#The installation log
InitInstall 2>&1 | tee /root/mysql-install.log
CheckAndDownloadFiles 2>&1 | tee -a /root/mysql-install.log
InstallDependsAndOpt 2>&1 | tee -a /root/mysql-install.log
InstallMySQL56 2>&1 | tee -a /root/mysql-install.log
CheckInstall 2>&1 | tee -a /root/mysql-install.log

安装过程:
[root@mysql ~]# sh mysql_auto_install.sh
=========================================================================
A tool to auto-compile & install MySQL 5.6.38 on Redhat/CentOS Linux
=========================================================================
===========================
Please input the root password of mysql:
(Default password: mysqld):
===========================
MySQL root password:mysqld
===========================
===========================
Install MySQL 5.6.38,Please input y
(Please input y , n):y
You will install MySQL 5.6.38

Press any key to start...or Press Ctrl+c to cancel
CentOS release 6.5 (Final)
Kernel \r on an \m

Linux mysql 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Memory is: 1862 MB
error: package mysql is not installed
setenforce: SELinux is disabled
mysql_auto_install.sh: line 243: CheckAndDownloadFiles: command not found
============================Install MySQL 5.6.22==================================
mysql-5.6.38-linux-glibc2.12-x86_64/share/polish/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/russian/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/german/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/spanish/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/italian/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/mysql_test_data_timezone.sql
mysql-5.6.38-linux-glibc2.12-x86_64/share/norwegian/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/slovak/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/serbian/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/dutch/errmsg.sys
mysql-5.6.38-linux-glibc2.12-x86_64/share/mysql_security_commands.sql
mysql-5.6.38-linux-glibc2.12-x86_64/share/dictionary.txt
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/latin1.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/Index.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/latin2.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/hp8.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/latin7.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/macroman.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/ascii.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/keybcs2.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/greek.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/hebrew.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/cp1257.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/swe7.xml
mysql-5.6.38-linux-glibc2.12-x86_64/share/charsets/cp866.xml
Installing MySQL system tables...2017-11-11 00:44:28 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2017-11-11 00:44:28 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.38-log) starting as process 3016 ...
OK

Filling help tables...2017-11-11 00:45:25 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2017-11-11 00:45:25 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.38-log) starting as process 3040 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h 192.168.48.50 password 'new-password'

Alternatively you can run:

/usr/local/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

cd . ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

New default config file was created as /usr/local/mysql/my.cnf and
will be used by default by the server when you start it.
You may edit this file to change server settings

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

Starting MySQL.. SUCCESS!
Warning: Using a password on the command line interface can be insecure.
Warning: Using a password on the command line interface can be insecure.
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!
============================MySQL 5.6.38 install completed=========================
^C===================================== Check install ===================================
Checking...
MySQL: OK
Install MySQL 5.6.38 completed! enjoy it.

转:https://blog.csdn.net/gumengkai/article/details/78502131