文章目錄
- 1、準備階段
- 1.1、部署規劃
- 1.2、硬件準備
- 1.3、軟件準備
- 1.4、環境清理
- 2、實施階段
- 2.1、操作系統實施
- 2.2、數據庫部署實施
- 3、完成
1、準備階段
1.1、部署規劃
本次部署用于測試環境,單機模式,不需要主備;MySQL數據庫版本要MySQL5.7.26社區版;操作系統為CentOS7。(生產環境強烈建議不要裝單機,風險太高,單機只適合測試環境或者自己學習裝來用)
1.2、硬件準備
參數 | 要求 |
---|---|
內存 | >=8G |
swap | 8G |
磁盤 | / : 50G;/mysqldata : 100G |
CPU | >=4C |
1.3、軟件準備
下方鏈接是MySQL社區版下載官網地址,訪問后,根據部署規劃選擇需要的MySQL軟件包。
https://downloads.mysql.com/archives/community/
1.4、環境清理
rpm -qa | grep -i 'mysql\|mariadb'
yum remove mariadb-server mariadb-client mariadb-libs
yum remove mysql-community-server
yum remove mysql-community-client mysql-common
2、實施階段
2.1、操作系統實施
2.1.1、修改主機名(若已完成,則忽略)
hostnamectl set-hostname mysql1
2.1.2、關閉防火墻與SELINUX(若已完成,則忽略)
#關閉防火墻
systemctl stop firewalld
systemctl disable firewalld
#關閉selinux
setenforce 0
sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
2.1.3、檢查時區、時間(若已完成,則忽略)
#需要為東八區,時間正確
# date -R
Thu, 23 Apr 2020 04:50:47 -0400
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp: overwrite ‘/etc/localtime’? yes
# date -R
Thu, 23 Apr 2020 16:51:02 +0800
2.1.4、調整系統限制參數
cat >> /etc/security/limits.conf << EOF
########## mysql limit ##########
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535
EOF
2.1.5、關閉大透明頁
#1、查看系統有沒有開啟透明大頁
#cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
#cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
#方括號[]中的值代表當前有效值,如果其中是never,代表透明大頁被禁用,如果是always,代表透明大頁已啟用。
#2、直接禁用透明大頁(臨時)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
#3、永久禁用透明大頁
#編輯rc.local文件
vim /etc/rc.d/rc.local
#將下面內容寫入rc.local文件
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
#給rc.local文件增加執行權限
chmod +x /etc/rc.d/rc.local
2.1.6、關閉NUMA
#編輯GRUB文件
vim /etc/default/grub
#在GRUB_CMDLINE_LINUX參數末尾添加numa=off(保留原有參數)
#GRUB_CMDLINE_LINUX="...原有參數... numa=off"
#例如:
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off"#重新生成GRUB配置
grub2-mkconfig -o /etc/grub2.cfg
2.1.7、安裝系統包
yum install cmake -y
yum install make -y
yum install gcc -y
yum install gcc-c++ -y
yum install bison -y
yum install ncurses -y
yum install ncurses-devel -y
yum install libaio* -y
yum install net-tools -y
yum install iotop -y
yum install telnet -y
yum install sysstat -y
2.2、數據庫部署實施
2.2.1、創建MySQL用戶、組
groupadd mysql
useradd -g mysql mysql
#查看mysql用戶信息
id mysql
2.2.2、創建安裝目錄,并授權
mkdir -p /mysqldata/my3306/{data,etc,pid,socket,tmp,login,log}
chown -R mysql:mysql /mysqldata
2.2.3、上傳MySQL軟件壓縮包
#上傳壓縮包至tmp命令
tar -zxvf /tmp/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
#創建軟鏈接
ln -s /usr/local/mysql-5.7.26-linux-glibc2.12-x86_64/ /usr/local/mysql
#修改權限
chown -R mysql:mysql /usr/local/mysql/
2.2.4、添加MySQL可執行路徑
#編輯配置文件
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
#加載使其生效
source /etc/profile
2.2.5、配置my.cnf參數文件
my.cnf是MySQL的核心文件,其使用方括號[]來定義不同的模塊,每個模塊包含一組相關配置選項。這些模塊及其配置選項會對MySQL的運行與性能有直接影響,如果部署后要修改my.cnf,需要重啟mysql數據庫服務。請注意,本次的my.cnf是以8G內存、單機為基礎進行配置的。
mv /etc/my.cnf /etc/my.cnf.bak #/etc下沒有這個文件就忽略這條命令
vim /mysqldata/my3306/etc/my.cnf
#MySQL configuration for 8G memory
[client]
############# CLIENT #############
port = 3306
socket = /mysqldata/my3306/socket/mysql.sock
default-character-set = utf8[mysqld]
############# GENERAL #############
server-id = 1
autocommit = ON
character_set_server = utf8
collation_server = utf8_general_ci
explicit_defaults_for_timestamp = ON
lower_case_table_names = 1
port = 3306
transaction_isolation = READ-COMMITTED
default_time_zone = "+8:00"
log_timestamps =system
############### PATH ##############
basedir = /usr/local/mysql
datadir = /mysqldata/my3306/data
tmpdir = /mysqldata/my3306/tmp
socket = /mysqldata/my3306/socket/mysql.sock
pid_file = /mysqldata/my3306/pid/mysql.pid
innodb_data_file_path = ibdata1:1G:autoextend
innodb_data_home_dir = /mysqldata/my3306/data
innodb_temp_data_file_path = ibtmp1:12M:autoextend
log_error = /mysqldata/my3306/log/error.log
general_log_file = /mysqldata/my3306/log/general.log
slow_query_log_file = /mysqldata/my3306/log/slow.loglog_bin = /mysqldata/my3306/log/mysql-bin
log_bin_index = /mysqldata/my3306/log/mysql-bin.index
relay_log = /mysqldata/my3306/log/relay-log
relay_log_index = /mysqldata/my3306/log/relay-log.index
relay_log_purge = 1
innodb_log_group_home_dir = /mysqldata/my3306/data
innodb_undo_directory = /mysqldata/my3306/data
innodb_undo_tablespaces = 3
log_bin_trust_function_creators = on
############# INNODB #############
innodb_buffer_pool_size = 4G ##根據內存調整
innodb_buffer_pool_instances = 4 ##根據內存調整
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
innodb_log_buffer_size = 64M
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 1024M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_io_capacity = 50000 ###根據磁盤io調整
innodb_io_capacity_max = 50000 ###根據磁盤io調整
innodb_thread_concurrency = 0 ###默認值為0
innodb_autoinc_lock_mode = 2
innodb_lock_wait_timeout = 60
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_max_dirty_pages_pct = 80
innodb_autoextend_increment = 512
innodb_checksum_algorithm = CRC32
innodb_doublewrite = 1
innodb_use_native_aio = 1
innodb_open_files = 8192
innodb_flush_neighbors = 0 ### SSD 設置為0,HDD 設置為1
innodb_print_all_deadlocks = 1
innodb_online_alter_log_max_size = 4G
innodb_undo_logs = 128
back_log = 2048################ P_S ##################
performance-schema=1
performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
performance_schema_instrument = '%wait%=on'
performance-schema-instrument='wait/lock/metadata/sql/mdl=on'####### CACHES AND LIMITS #########
interactive_timeout = 600
lock_wait_timeout = 60 ###MDL鎖超時
max_connect_errors = 10000
max_connections = 2048
max_user_connections = 1024
thread_stack = 256K
thread_cache_size = 768
key_buffer_size = 32M
tmp_table_size = 64M
max_heap_table_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 2M
join_buffer_size = 2M
binlog_cache_size = 2M
table_open_cache = 8192
table_definition_cache = 8192
table_open_cache_instances = 16
bulk_insert_buffer_size = 64M############# LOGGING #############
general_log = 0
log_queries_not_using_indexes =ON
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 1000
log_slow_admin_statements = ON
log_error_verbosity =2
long_query_time = 1
slow_query_log = ONconnect_timeout = 300
wait_timeout = 86400
open_files_limit = 65535
skip_name_resolve
skip_ssl
skip_external_locking
explicit_defaults_for_timestamp = TRUE
############# relay_log #############
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=1############### mysqld_safe ###############
[mysqld_safe]
open_files_limit = 65535
2.2.6、mysql初始化安裝
/usr/local/mysql/bin/mysqld --defaults-file=/mysqldata/my3306/etc/my.cnf --initialize --basedir=/usr/local/mysql?--datadir=/mysqldata/my3306/data --explicit_defaults_for_timestamp --user=mysql
–initialize:該選項初始化時會在錯誤日志中寫一個隨機root密碼,初始化完成之后在錯誤日志中搜索password,緊跟其后的一串字符串就是這個隨機密碼,在初始化完成并啟動mysqld之后,初次登錄需要使用這個隨機密碼才能夠登錄。
2.2.7、啟動數據庫
/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysqldata/my3306/etc/my.cnf &
2.2.8、初始化mysql root用戶密碼
#操作系統執行
mysql -uroot -p'e*0PiBj4!;;C' -S /mysqldata/my3306/socket/mysql.sock
#mysql 命令行執行
alter user root@'localhost' identified by 'Zqd@123.+';
flush privileges;
#操作系統執行
mysql -uroot -pZqd@123.+ -S /mysqldata/my3306/socket/mysql.sock
2.2.9、關閉數據庫命令
mysqladmin -uroot -p -S /mysqldata/my3306/socket/mysql.sock shutdown
3、完成
部署完成了,開始測試吧。