mysql 5.7*8.0/percona server/mariadb 10.x安裝與服務器參數優化

建議使用percona server linux generic版,從https://www.percona.com/downloads/Percona-Server-LATEST/下載,如今不在推薦使用mariadb是由於考慮到mariadb的愈來愈不兼容mysql原生。php

對於操做系統,僅推薦rhel以及centos,優先推薦客戶使用rhel(若是客戶買了服務的話,不然centos,否則yum無法使用,依賴包的安裝會及其麻煩),且生產環境咱們僅使用他們,不會使用windows,極少使用suse。html

對於mysql 8.0而言,沒有ssl 101版本,以下:mysql

 

此時須要升級ssl到102(自帶的極可能是101),參見linux下openssl升級指南。不然在初始化的時候會報找到openssl相關庫,如openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory。linux

下載後解壓、建立符號連接,ln -s Percona-Server-5.7.22-22-Linux.x86_64.ssl101 mysql。sql

[root@v-03-01-00223 mysql]# mkdir data
# 對於mariadb 10.0、10.一、10.二、10.3須要使用
scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql 進行初始化,不支持5.7版本的mysqld初始化,雖然10.1以後是5.7的分支
[root@v-03-01-00223 mysql]# bin/mysqld --initialize-insecure --datadir=/usr/local/app_1/mysql/data --basedir=/usr/local/app_1/mysql 2018-07-03T00:00:30.132880Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2018-07-03T00:00:31.585743Z 0 [Warning] InnoDB: New log files created, LSN=45790 2018-07-03T00:00:31.775344Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2018-07-03T00:00:31.855871Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 1a4f5171-7e54-11e8-96ba-00163e0d56df. 2018-07-03T00:00:31.859229Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2018-07-03T00:00:32.356281Z 0 [Warning] CA certificate ca.pem is self signed. 2018-07-03T00:00:32.636774Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. [root@v-03-01-00223 mysql]# chown -R mysql:mysql data
[root@v-03-01-00223 mysql]# ./mysqld_safe --defaults-file=/etc/my.cnf.57 --user=mysql #/etc/my.cnf.57中的主要參數推薦見下文
[root@v-03-01-00223 mysql]# ./mysql --defaults-file=/etc/my.cnf.57 -uroot -h127.0.0.1 -P3308 #由於一臺服務器安裝了多個mysql實例,因此指定配置文件和端口號,defaults-file限制只讀取指定的配置文件,且必須是第一個命令行選項,不然忽略 
alter user root@'localhost' identified by '123456';
create user root@'127.0.0.1' identified by '123456';
grant all on *.* to root@'127.0.0.1';

mysql> create user root@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)windows

mysql> grant all on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)centos


create user 'repl'@'10.20.24.89' identified by '123456'; #建立slave帳戶
grant REPLICATION SLAVE ON *.* TO 'repl'@'10.20.24.89'; #建立slave帳戶

主庫參數推薦

這些參數都是咱們在各金融交易系統中通過數百家客戶運行足夠穩定、出現問題時確保可以及時排查後提煉出的對性能、穩定性較爲重要的主要參數,而不是隨機查看官方文檔或者網上覆制粘貼的,而且咱們會按期對其進行更新以確保最適合咱們在用的mysql版本和分支。服務器

query_cache_size = 0
query_cache_type=0
innodb_undo_tablespaces=16(需初始化mysql時命令行中先包含)
innodb_undo_directory=(專用redo磁盤文件系統路徑)
innodb_thread_concurrency=(cpu數量+物理磁盤的數量)
innodb_strict_mode=true
tmpdir=/tmp
character_set_server=gbk或者utf8mb4(絕大多數系統應默認使用gbk,對於有特殊要求的建議在字段級別設置爲utf-8)
autocommit=0
innodb_buffer_pool_size=60%-75%物理內存
innodb_flush_method=O_DIRECT(若是不使用硬件RAID控制器或者使用SAN,則不要設置)
innodb_flush_log_at_trx_commit(核心交易系統設置爲1,默認爲1,其餘2或者0)
transaction-isolation=READ-COMMITTED
innodb_autoinc_lock_mode = 2
skip-name-resolve
large-pages(測試未看出明顯受益,主要是內存沒有足夠壓力,故當前不建議設置)
back-log=500
innodb-status-file=TRUE(推薦設置)
default-storage-engine=InnoDB
memlock=true(對於專用mysql服務器,建議禁用swap,此時此參數能夠不設置,在共享服務器上,若是設置了,那麼在內存不夠時,可能致使Mysql由於內存不夠而沒法啓動)
innodb_fast_shutdown=0
sync_binlog(核心交易系統設置爲1,默認爲1,其餘2或者0)
log-bin=mysql-bin
binlog_format(OLTP爲row,DSS系統爲mixed,如不肯定,請使用row)
binlog_checksum=NONE
binlog_row_image=full(mariadb沒有參數,設置了啓動會報錯)
binlog_cache_size = 8M
max_binlog_size = 500M
max_binlog_cache_size = 100M
expire_logs_days = 7
innodb_log_file_size=512m
innodb-log-buffer-size=8M
innodb-log-files-in-group=(3-5,視生成的日誌量而定)
innodb_log_group_home_dir=/usr/local/mysql/redo(專用redo磁盤文件系統路徑)
innodb_flush_neighbors(默認值爲1,SSD設置爲0,Neighbors指的是屬於一個extent的全部頁面,一個extent共64個頁面,出於硬盤IO順序寫的考慮,InnoDB一般會刷新一個extent中的全部頁面,由於SSD在隨機IO上沒有額外負載,因此不須要啓用該特性)
innodb_page_size(SSD設置爲4KB)
innodb_data_home_dir=/usr/local/mysql/data(專用data磁盤文件系統路徑)
# innodb_data_file_path=ibdata1:2000M;ibdata2:10M:autoextend (專用data磁盤文件系統路徑,存儲系統表空間,建議不要明確設置,如若否則的話,ibdata1的大小須要和實際大小相同)
innodb_change_buffer_max_size(InnoDB使用Change buffering以最小化隨機IO,一旦change buffer滿了,隨後的DMLs將直接在相應的表上進行更改,change buffer以固定的頻率(5.5不可更改,5.6由此參數控制,change buffer越接近該值,後臺執行越頻繁,每次合併的量由innodb_io_capacity控制(默認爲200,表明10K RPM的硬盤,對於5400或者7200 RPM的硬盤,能夠設置爲100,表明每次能夠執行100次IOPS(測試時每次大小可配置,這裏應該說的是基於16KB大小,可參考http://elf8848.iteye.com/blog/1731301)。對於RAID或者SSD,增長的話,會有所幫助,現代系統應該調整))由後臺進程合併到數據頁,寫入和讀取頻率接近的系統可設置爲50,默認爲25,表明buffer pool大小的25%,具體請諮詢DBA)
innodb_lock_wait_timeout=86400(根據實際狀況配置)
default-tmp-storage-engine=InnoDB
innodb-autoextend-increment=16M
innodb-buffer-pool-instances=min(8,nGB/1GB)
innodb-file-io-threads=max(4,nGB/4GB)
innodb_io_capacity=可供MySQL使用的IOPS(建議使用Oracle ORION進行測試)
innodb-file-per-table=true
innodb_rollback_on_timeout=true
innodb-old-blocks-time(混合型系統能夠調整爲60000或更高,具體請諮詢DBA)
innodb-print-all-deadlocks=true
innodb-sort-buffer-size=(此選項爲建立索引使用,不須要設置)
sort-buffer-size(DSS可語句級別動態調整,好比SET STATEMENT sort_buffer_size=100000 FOR SELECT name FROM name ORDER BY name;)
join-buffer-size=(DSS可語句級別動態調整)
open-files-limit=32767
innodb_open_files=32767
tmp-table-size(DSS可語句級別動態調整)
sql-mode=STRICT_TRANS_TABLES,STRICT_ALL_TABLES,PIPES_AS_CONCAT, ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO, ANSI_QUOTES,NO_UNSIGNED_SUBTRACTION,PAD_CHAR_TO_FULL_LENGTH, NO_ZERO_DATE,NO_ZERO_IN_DATE
log-output=FILE
slow-query-log=true
log-queries-not-using-indexes=true(對於mysql而言,該參數應該設置,具體看狀況,有可能不少小表很快會使得slow_query_log增加的很快)
log_slow_filter
log_slow_sp_statements
log_slow_verbosity
innodb_show_verbose_locks=1
innodb_print_lock_wait_timeout_info=ON
server-id=1
port=3306
read_rnd_buffer_size(DSS需語句級別動態調整)
thread_handling=pool-of-threads
thread_pool_max_threads=100
thread_pool_size=50
thread_cache_size=64
max-connections=3000
event_scheduler=ON
#GTID 5.6引入主要是爲了解決主從模式下主節點宕機後切換主節點時肯定當前的事務進度(由於不一樣的實例日誌點位不必定相同,而GTID的格式是日誌source_id+事務id,因此能夠保證全部節點的邏輯事務進度一致,這使得切換的難度大大下降)。
gtid-mode = ON  #(Group Replication要求必須開啓GTID,MariaDB沒有這個參數,設置後會報錯,不過默認就是啓用GTID,GTID和基於binlog的區別https://www.percona.com/sites/default/files/presentations/Failover_GTID_MySQL_56_Fosdem.pdf
https://pdfs.semanticscholar.org/presentation/3036/b68bcb8bd2f4fed590fd85607e37bf511858.pdf)
log_slave_updates=ON(GTID模式必須開始log_slave_updates,對性能有必定影響)
enforce-gtid-consistency = ON(MariaDB沒有這個參數,設置後會報錯,不過默認就是啓用GTID)
relay-log-info-repository=TABLE(MariaDB沒有這個參數,設置後會報錯,不過默認就是啓用GTID)
master-info-repository=TABLE(MariaDB沒有這個參數,設置後會報錯,不過默認就是啓用GTID)
slave_parallel_workers=4 --開啓基於庫的多線程複製默認0不開啓 (MariaDB沒有這個參數,設置後會報錯,不過默認就是啓用GTID)
innodb_lru_scan_depth(默認1024,這個參數控制page_cleaner線程掃描多少LRU列表中的髒頁,對於寫緊張的系統,下降該值,即便內存超大也同樣;若是IO容量足夠,增長該值;大型系統一般須要更改該參數)
innodb_use_global_flush_log_at_trx_commit=0
userstat=ON
thread_statistics=ON多線程

 windows下安裝可參考https://blog.csdn.net/ycxzuoxin/article/details/80908447app

相關文章
相關標籤/搜索