mysql5.7手動(dòng)、自動(dòng)安裝部署
#上傳安裝包和配置文件
mkdir /application
cd /application
rz -y mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz my.cnf
tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
##安裝依賴
yum -y install numactl.x86_64
##將安裝前工作
mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql/bin/
##創(chuàng)建啟動(dòng)賬號(hào)
groupadd mysql
useradd -g mysql -s /sbin/nologin -d /usr/local/mysql/ -M mysql
##創(chuàng)建數(shù)據(jù)目錄
mkdir /data/mysql/
chown mysql:mysql /data/mysql/
chown mysql:mysql /usr/local/mysql/
##數(shù)據(jù)庫初始化
./mysqld --defaults-file=/etc/my.cnf --initialize --user=user --basedir=/usr/local/mysql/ --datadir=/data/mysql/
##將mysql配置文件上傳
##可使用在線mysql配置文件生成工具
##
cp -r /application/my.cnf /etc/
##添加環(huán)境變量
cp -r /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
echo PATH=$PATH:/usr/local/mysql/bin >>/etc/profile
source /etc/profile
##啟動(dòng)
/etc/init.d/mysqld start
##登錄測試
mysql -uroot -p
#改密碼
### 添加跳過密碼登陸
vim /etc/my.cnf
##添加參數(shù)
skip-grant-tables
##重啟
/etc/init.d/mysqld restart
##更改密碼
mysql -uroot -p
UPDATE mysql.user SET authentication_string=PASSWORD('test@123') where USER='root';
ALTER USER USER() IDENTIFIED BY 'test@123';
##授權(quán)訪問(*.* databasename.tablename)(root@'192.0.0.1' 授權(quán)哪個(gè)賬號(hào)通過那個(gè)ip或ip段訪問)
grant all privileges on *.* to 'root'@'147.1.5.%' identified by 'test@123';
##刷新
FLUSH PRIVILEGES;
##注銷跳過密碼登陸
vim /etc/my.cnf
#skip-grant-tables
#重啟
/etc/init.d/mysqld restart
my.cnf
## my.cnf for MySQL 5.7/8.0
[client]
port = 3306
socket = /data/mysql/mysql.sock
[mysql]
prompt="\u@mysqldb \R:\m:\s [\d]> "
auto-rehash
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#skip-grant-tables
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /data/mysql/mysql.sock
lower_case_table_names=1
pid-file = mysqldb.pid
character-set-server = utf8mb4
skip_name_resolve = 1
default_time_zone = "+8:00"
open_files_limit = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 768
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
log_timestamps = SYSTEM
slow_query_log_file = /data/mysql/slow.log
log-error = /data/mysql/error.log
long_query_time = 2
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
log_slow_slave_statements = 1
server-id = 3309
log-bin = /data/mysql/mybinlog
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
binlog_format = row
binlog_checksum = 1
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = REPEATABLE-READ
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 9216M
innodb_buffer_pool_instances = 4
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/undolog
innodb_undo_tablespaces = 95
# 根據(jù)您的服務(wù)器IOPS能力適當(dāng)調(diào)整
# 一般配普通SSD盤的話,可以調(diào)整到 10000 - 20000
# 配置高端PCIe SSD卡的話,則可以調(diào)整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0
#注意:MySQL 8.0.16開始刪除該選項(xiàng)
internal_tmp_disk_storage_engine = InnoDB
# some var for MySQL 5.7
innodb_checksums = 1
#innodb_file_format = Barracuda
#innodb_file_format_max = Barracuda
query_cache_size = 0
query_cache_type = 0
innodb_undo_logs = 128
innodb_status_file = 1
#注意: 開啟 innodb_status_output & innodb_status_output_locks 后, 可能會(huì)導(dǎo)致log-error文件增長較快
innodb_status_output = 0
innodb_status_output_locks = 0
#performance_schema
performance_schema = 1
performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
#innodb monitor
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
[mysqldump]
quick
max_allowed_packet = 100M
自動(dòng)化安裝腳本
#!/bin/bash
#create by myq
#at 2017-12-12
#any question to call the phone number : 110
clear
echo "###################################################"
echo "Program this scripts is for relase your hands."
echo "Please read this illustrate carefully."
echo "It's auto install or uninstall mysql server."
echo "There is four file in the scripts directory."
echo "my.cnf is mysql configure file,do not remove."
echo "mysqld.service is used for add mysql to systemd on RedHat 7 or Centos 7."
echo "*.tar.gz is mysql binary package."
echo "The mysql server version must be 5.7 or later."
echo "The package is Linux - Generic tar file."
echo "Please carefull enter parameter when hint is appear."
echo "Any question to call the phone number : 110."
echo "May you be happy and prosperous."
echo "###################################################"
echo
#defind variables
#get hostname
hn=$(hostname)
#set mysql's birnary file directory
azdir=/usr/local
#set mysql's directory for datafile,logfile and so on
yxdir=/data
csdir=$(echo ${yxdir:1})
#set the binary install file directory
sourcedir=$(pwd)
#get binary install file name
filename=$(ls $sourcedir/mysql*.tar.gz | awk -F '/' '{print $3}')
#get memory info
mem=$(free -m|grep -i mem|awk '{print $2}')
smem=$(echo "$mem*0.8"|bc)
fmem=$(echo ${smem%.*}M)
#get os release
osrel=$(grep -o '[[:digit:]]' /etc/redhat-release|sed '2,$d')
#get install or uninstall message
echo "Are you want to install or unistall? 'i' for install; 'u' for uninstall:"
read isins
if [ $isins == 'i' ]; then
#clear installed mysql
echo "clear installed mysql"
rpm -e mysql --nodeps > /dev/null 2>&1
rpm -e mysql-devel --nodeps > /dev/null 2>&1
rpm -e mysql-server --nodeps > /dev/null 2>&1
echo "done..........................."
echo ""
#create user running mysql
echo "create user running mysql"
userdel -r mysql > /dev/null 2>&1
useradd -s /sbin/nologin mysql
echo "done..........................."
echo ""
#copy mysql source install package
echo "copy mysql source install package"
rm -rf $azdir/mysql
cp $sourcedir/$filename $azdir/
if [ $? == 0 ]; then
echo "done..........................."
else
echo "copy failed!!!"
exit 1
fi
echo ""
#untar install package
echo "untar install package"
cd $azdir
tar -zxf $azdir/$filename
rm -f $azdir/$filename
echo "done..........................."
echo ""
#change mode on install dir
echo "change mode $azdir/mysql"
mv $azdir/mysql-* $azdir/mysql
if [ $? == 0 ]; then
chown -R mysql.mysql $azdir/mysql
ln -fs $azdir/mysql/bin/* /usr/bin/
echo "done..........................."
else
echo "operation failed!!!"
exit 1
fi
echo ""
#create data relate directory
echo "create data relate directory"
mkdir -p $yxdir/mysql/data
mkdir -p $yxdir/mysql/logs
mkdir -p $yxdir/mysql/script
mkdir -p $yxdir/mysql/backup
if [ $? == 0 ]; then
chown -R mysql.mysql $yxdir/mysql
echo "done..........................."
else
echo "create dir failed !!!"
exit 1
fi
echo ""
if [ $osrel == '7' ]; then
#add to services
echo "add to services"
cp -f $sourcedir/mysqld.service /etc/systemd/system
if [ $? == 0 ]; then
systemctl enable mysqld.service > /dev/null 2>&1
if [ $? == 0 ]; then
chkconfig mysqld off
else
echo "add mysqld service failed!!!"
exit 1
fi
echo "done..........................."
else
echo "create dir failed !!!"
exit 1
fi
echo ""
else
#add to services
echo "add to services"
cp -f $azdir/mysql/support-files/mysql.server /etc/init.d/mysqld
if [ $? == 0 ]; then
chkconfig --add mysqld
if [ $? == 0 ]; then
chkconfig mysqld off
else
echo "add mysqld service failed!!!"
exit 1
fi
echo "done..........................."
else
echo "create dir failed !!!"
exit 1
fi
echo ""
fi
#add error log file
echo "add error log file"
touch $yxdir/mysql/logs/$hn.err
chown mysql:mysql $yxdir/mysql/logs/$hn.err
echo "done..........................."
echo ""
#initialize mysql
echo "initialize mysql"
$azdir/mysql/bin/mysqld --initialize --basedir=$azdir/mysql --datadir=$yxdir/mysql/data --user=mysql > /tmp/myqpwd.tt 2>&1
echo "done..........................."
echo ""
#copy configure file to /etc
echo "copy configure file to /etc"
rm -f /etc/my.cnf
cp $sourcedir/my.cnf /etc/
echo "done..........................."
echo ""
#modify my.cnf
echo "modify configure file"
#sed -i -e "s/db1/$hn/g" /etc/my.cnf
sid="1"$(date +"%H%M%S")
sed -i -e "s/server_id=1/server_id=$sid/g" /etc/my.cnf
sed -i -e "s/innodb_buffer_pool_size=256M/innodb_buffer_pool_size=$fmem/g" /etc/my.cnf
sed -i -e "s/datadir=\/var\/mysql\/data/datadir=\/$csdir\/mysql\/data/g" /etc/my.cnf
sed -i -e "s/pid-file=\/var\/mysql\/logs\/db1.pid/pid-file=\/$csdir\/mysql\/logs\/$hn.pid/g" /etc/my.cnf
sed -i -e "s/general_log_file=\/var\/mysql\/logs\/db1.general/general_log_file=\/$csdir\/mysql\/logs\/$hn.general/g" /etc/my.cnf
sed -i -e "s/log-bin=\/var\/mysql\/logs\/db1-bin/log-bin=\/$csdir\/mysql\/logs\/$hn-bin/g" /etc/my.cnf
sed -i -e "s/log_bin_index=\/var\/mysql\/logs\/db1.index/log_bin_index=\/$csdir\/mysql\/logs\/$hn.index/g" /etc/my.cnf
sed -i -e "s/slow_query_log_file=\/var\/mysql\/logs\/db1.slow/slow_query_log_file=\/$csdir\/mysql\/logs\/$hn.slow/g" /etc/my.cnf
sed -i -e "s/log_error=\/var\/mysql\/logs\/db1.err/log_error=\/$csdir\/mysql\/logs\/$hn.err/g" /etc/my.cnf
sed -i -e "s/relay_log=\/var\/mysql\/logs\/db1-relay/relay_log=\/$csdir\/mysql\/logs\/$hn-relay/g" /etc/my.cnf
echo "done..........................."
echo ""
#change root password
echo "change root password"
if [ $osrel == '7' ]; then
systemctl start mysqld.service
else
service mysqld start
fi
if [ $? == 0 ]; then
pwd=$(cat /tmp/myqpwd.tt | grep password | awk '{print $11}')
/usr/bin/mysqladmin -u root -p$pwd password 123 > /dev/null 2>&1
echo "done..........................."
else
echo "mysql start failed!!!"
exit 1
fi
echo ""
#install plugin and set parameters
echo "install semi plugin"
/usr/bin/mysql -e "install plugin rpl_semi_sync_master soname 'semisync_master.so';"
/usr/bin/mysql -e "install plugin rpl_semi_sync_slave soname 'semisync_slave.so';"
/usr/bin/mysql -e "reset master;"
sed -i -e "s/#rpl_semi_sync_master_enabled=on/rpl_semi_sync_master_enabled=on/g" /etc/my.cnf
sed -i -e "s/#rpl_semi_sync_master_timeout=1000/rpl_semi_sync_master_timeout=1000/g" /etc/my.cnf
sed -i -e "s/#rpl_semi_sync_slave_enabled=on/rpl_semi_sync_slave_enabled=on/g" /etc/my.cnf
echo "done.........................."
echo ""
#restart mysql server
rm -f /tmp/myqpwd.tt
/usr/bin/mysql -e "reset master;"
if [ $osrel == '7' ]; then
systemctl stop mysqld.service
rm -f $yxdir/mysql/logs/*bin* $yxdir/mysql/logs/*.general $yxdir/mysql/logs/*.slow $yxdir/mysql/logs/*.index $yxdir/my sql/logs/*relay*
systemctl start mysqld.service
else
service mysqld stop
rm -f $yxdir/mysql/logs/*bin* $yxdir/mysql/logs/*.general $yxdir/mysql/logs/*.slow $yxdir/mysql/logs/*.index $yxdir/mysql/logs/*relay*
service mysqld start
fi
echo "Congratulations,mysql install successful!!!"
echo "Install directory is /usr/local/mysql"
echo "Data directory is /var/mysql"
echo "Initial root password is : 123"
echo "On linux 6,use 'service mysqld start|stop' to manage mysql service"
echo "On linux 7,use 'systemctl start|stop mysqld.service' to manage mysql service"
elif [ $isins == 'u' ]; then
#clear installed mysql
echo "clear installed mysql"
rpm -e mysql --nodeps > /dev/null 2>&1
rpm -e mysql-devel --nodeps > /dev/null 2>&1
rpm -e mysql-server --nodeps > /dev/null 2>&1
echo "done..........................."
echo ""
#stop mysql service
if [ $osrel == '7' ]; then
systemctl stop mysqld.service > /dev/null 2>&1
#clear mysql service
echo "clear mysql service ................"
systemctl disable mysqld.service
rm -f /etc/systemd/system/mysqld.service
else
service mysqld stop > /dev/null 2>&1
chkconfig --del mysqld > /dev/null 2>&1
rm -f /etc/init.d/mysqld
fi
echo "done.............................."
echo ""
#remove data dir
echo "remove data dir ................"
rm -rf $yxdir/mysql
echo "done.............................."
echo ""
#remove install dir
echo "remove install dir ................"
rm -rf $azdir/mysql
echo "done.............................."
echo ""
#remove confiugre file
echo "remove confiugre file ................"
rm -rf /etc/my.cnf*
rm -f /usr/bin/mysql*
echo "done.............................."
echo ""
#remove mysql user
echo "remove mysql user ................"
userdel -r mysql > /dev/null 2>&1
echo "done.............................."
echo ""
echo "mysql uninstall done............."
else
clear
echo "Are you want to fly to the sky ..."
echo "Are you want to fly to the sky ..."
echo "Are you want to fly to the sky ..."
echo "Are you want to fly to the sky ..."
echo "Are you want to fly to the sky ..."
fi
配置文件
[client]
#default login user
user=root
#default password
password=123
[mysqld]
#########genarel config##########
#the user runnging mysqld process
user=mysql
#base directory
basedir=/usr/local/mysql
#data directory
datadir=/var/mysql/data
#db server character set
character_set_server=utf8
#default engine
default_storage_engine=innodb
#server id
server_id=1
#service port
port=3306
#max connections
max_connections=1000
#skip resolve name
#skip_name_resolve=on
#pid file's directory
pid-file=/var/mysql/logs/db1.pid
#ignore table name case
lower_case_table_names=1
log_bin_trust_function_creators=1
######log part####
#swith on genarel log
#general_log=on
#name and directory of genarel log
general_log_file=/var/mysql/logs/db1.general
#swith on binnary log and set the file
log-bin=/var/mysql/logs/db1-bin
#index of bannary log
log_bin_index=/var/mysql/logs/db1.index
#swith bannary log
slow_query_log=on
#name and directory of slow query log
slow_query_log_file=/var/mysql/logs/db1.slow
#the unit of slow log ,second
long_query_time=1
#record query not use index into slow log
log_queries_not_using_indexes=1
#error log setting
log_error=/var/mysql/logs/db1.err
#auto clear binnary log , day
expire_logs_days=14
log_timestamps=SYSTEM
######innodb setting ######
#innodb memory size,byte
innodb_buffer_pool_size=256M
#innodb instance number
innodb_buffer_pool_instances=2
#dump cache from memory to disk when server shutdown
innodb_buffer_pool_dump_at_shutdown=on
#record page cache immediate
innodb_buffer_pool_dump_now=on
#import cache from disk to memory when server startup
innodb_buffer_pool_load_at_startup=on
#immediate cache buffer_pool
innodb_buffer_pool_load_now=on
#log buffer 8M to 32M
innodb_log_buffer_size=8M
#the size of binnary log
innodb_log_file_size=256M
#the action of write log to disk:0--flush per second;1--flush on tranction commit(default); 2--0 and 1
innodb_flush_log_at_trx_commit=1
#enable innodb monitor
innodb_monitor_enable=all
######MyIsam setting######
key_buffer_size=256M
read_buffer_size=256K
read_rnd_buffer_size=256K
sort_buffer_size=256K
join_buffer_size=256K
####replication setting#########
log-bin-trust-function-creators=1
#enable gtid mode
gtid_mode=ON
#enforce gtid consistency
enforce_gtid_consistency=ON
#master info storage in table
master_info_repository=TABLE
#relay log info storage in table
relay_log_info_repository=TABLE
#relay log file name
relay_log=/var/mysql/logs/db1-relay
#write binlog when slave apply relay-log
log_slave_updates=ON
#binlog format
binlog_format=ROW
#semi_sync
#rpl_semi_sync_master_enabled=on
#rpl_semi_sync_master_timeout=1000
#rpl_semi_sync_slave_enabled=on
#multi thread
slave_parallel_type=logical_clock
slave_parallel_workers=4
#####group replication####
#slave_preserve_commit_order=1
#binlog_checksum=NONE
#collection trasaction information
#transaction_write_set_extraction=XXHASH64
#name of relication group
#loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
#do nothing when server start
#loose-group_replication_start_on_boot=off
#local host address and port
#loose-group_replication_local_address="10.2.5.15:33061"
#address and port of server in the replication group
#loose-group_replication_group_seeds="10.2.5.15:33061,10.2.5.16:33061,10.2.5.17:33061,10.2.5.18:33061"
#the init server set on,any time only one swtich on
#loose-group_replication_bootstrap_group=off
啟動(dòng)文件
[Unit]
Description=Mysql server 5.7.20
Documentation=http://doc.mysql.com
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/usr/local/mysql/support-files/mysql.server reload
[Install]
WantedBy=multi-user.target
自動(dòng)換安裝流程
上傳依賴包
rpm -ivh libaio*
上述三個(gè)文件放到同一個(gè)目錄
執(zhí)行腳本
安裝完成后根據(jù)配置信息更改(datadir,buffer_pool) #腳本默認(rèn)datadir為/data