#!/bin/bash# 安装依赖
apt-get update && apt-get install -y wget make gcc g++ cmake bison libncurses5-dev libssl-dev libtool pkg-config> /dev/null
# 安装包所在目录
packages="/usr/local/src"
# 数据目录
datadir="/hskj/mysql"
# pid文件
pidname=`hostname`.pid
# 默认使用root用户安装
# 创建mysql用户
create_user (){if id -u "mysql" >/dev/null 2>&1; thenecho "mysql user has been existed."elseaddgroup --system mysqladduser --system --no-create-home --disabled-login --ingroup mysql mysqlfi
}install_mysql (){# 创建数据目录mkdir -p $datadirchown -R mysql:mysql $datadircd $packageswget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.39.tar.gz# tar xf mysql-boost-5.7.39.tar.gzcd mysql-5.7.39echo "configuring mysql,please wait-----------------"cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/hskj/mysql/ \-DSYSCONFDIR=/etc \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_PARTITION_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \-DENABLE_DOWNLOADS=1 \-DENABLED_LOCAL_INFILE=1 \-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \-DMYSQL_TCP_PORT=3306 \-DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_SSL=yes \-DWITH_BOOST=boostif [ $? -ne 0 ];thenecho "configure failed ,please check it out!"exit 1fiecho "make mysql, please wait for 20 minutes"make -j 12if [ $? -ne 0 ];thenecho "make failed ,please check it out!"exit 1fimake installchown -R mysql:mysql /usr/local/mysqltouch /var/log/mysqld.logchown mysql:mysql /var/log/mysqld.logmkdir /var/lib/mysqlchown -R mysql:mysql /var/lib/mysqlcp ./support-files/mysql.server /etc/init.d/mysqldchmod u+x /etc/init.d/mysqld# 初始化后/usr/local/mysql/bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/hskj/mysql --user=mysqlif [ $? -eq 0 ];thenecho "initialize successful ! "fi
}set_service (){# 设置mysql.service,便于systemd管理
cat << EOF > /lib/systemd/system/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
PIDFile=$datadir/$pidname
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
#ExecStartPre=/usr/bin/mysqld_pre_systemd
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=$datadir/$pidname
# Use this to switch malloc implementation
#EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
EOF
}check_status (){
systemctl daemon-reload && systemctl enable mysqld
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
echo "接下来你需要作的是:"
echo "1.更新/etc/my.cnf配置文件"
echo "2.确认可以成功启动mysql服务"
echo "3.最后还需要执行安全加固操作:/usr/local/mysql/bin/mysql_secure_installation"
}create_user
install_mysql
set_service
check_status
附录一份配置文件:
/etc/my.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server = utf8
collation-server = utf8_general_ci
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
log_timestamps=SYSTEMbasedir = /usr/local/mysql
datadir = /hskj/mysql
skip-external-locking
skip-name-resolve
default-storage-engine = InnoDB
back_log = 2048
secure_file_priv=''max_connections = 1024
max_connect_errors = 256
max_allowed_packet = 64M
table_open_cache = 2048
sort_buffer_size = 16M
read_buffer_size = 16M
read_rnd_buffer_size = 64M
join_buffer_size = 512K
max_heap_table_size = 256M
tmp_table_size = 256M
tmpdir = /dev/shm
ft_min_word_len = 8
bulk_insert_buffer_size = 64M
thread_cache_size = 16384
thread_stack = 512K
key_buffer_size = 8G
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 15G
myisam_recover_options = DEFAULTserver-id = 2122log-bin=/hskj/mysql/mysql-bin
binlog_format=mixed
binlog_cache_size = 4M
max_binlog_size = 1024M
expire-logs-days = 3
slow_query_log = 1
long_query_time = 20
slow_query_log_file=/hskj/mysql/slow_query.log
log-error = /var/log/mysqld.log
net_read_timeout=200
net_write_timeout=300innodb_data_file_path = ibdata1:12M:autoextend
innodb_buffer_pool_size = 6G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 75
innodb_thread_concurrency = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_io_capacity = 1600
innodb_flush_method = O_DIRECT
innodb_strict_mode = 1
innodb_purge_threads = 1
innodb_change_buffering = all
transaction_isolation = REPEATABLE-READ
explicit_defaults_for_timestamp=truejoin_buffer_size = 64M
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_dump_pct = 40
innodb_sort_buffer_size = 32M
innodb_print_all_deadlocks = 1innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128[mysqldump]
quick
max_allowed_packet = 64M[mysql]
no-auto-rehash
default-character-set = utf8[myisamchk]
key_buffer_size = 1024M
sort_buffer_size = 1024M
read_buffer = 32M
write_buffer = 32M[mysqlhotcopy]
interactive-timeout[mysqld_safe]
open-files-limit = 65535
default-character-set = utf8
如果对你有帮助,一块也是爱