查詢當前系統版本是否爲centos7 mysql
cat /etc/redhat-release
CentOS 7 版本將MySQL數據庫軟件從默認的程序列表中移除,用mariadb代替了。
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可。開發這個分支的緣由之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,所以社區採用分支的方式來避開這個風險。MariaDB的目的是徹底兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。 sql
yum install mariadb-server mariadb
mariadb數據庫的相關命令是:
systemctl start mariadb #啓動MariaDB
systemctl stop mariadb #中止MariaDB
systemctl restart mariadb #重啓MariaDB
systemctl enable mariadb #設置開機啓動 shell
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpmrpm -ivh mysql-community-release-el7-5.noarch.rpmyum install mysql-community-server
安裝完成後重啓mysql服務 數據庫
service mysqld restart
初次安裝mysql,root帳戶沒有密碼 設置密碼: windows
set password for 'root'@'localhost' =password('password');
mysql5.7 須要在配置中 my.ini/my.cnf裏面配置時區 不然就須要在url裏面加參數了centos
default-time-zone = '+8:00'
使用jdbc鏈接數據庫,批量插入時候preparedstatement 的addBatch 默認是不起做用的,須要在url後面加上參數 緩存
rewriteBatchedStatements=true安全
這樣批量插入才起做用服務器
mysql配置文件爲/etc/my.cnf
最後加上編碼配置 網絡
[mysql]default-character-set =utf8
把在全部數據庫的全部表的全部權限賦值給位於全部IP地址的root用戶。
grant all privileges on *.* to root@'%'identified by 'password';
可是,通常來説爲了安全,咱們會把username@後面跟上一個具體的ip
若是是新用戶而不是root,則要先新建用戶
create user 'username'@'%' identified by 'password';
適用於通常開發、測試迅速搭建mysql環境。
[mysqld] #myslqd服務運行時的端口號 port=3306 #socket文件是在Linux環境下特有的,用戶的客戶端軟件鏈接能夠不經過TCP/IP網絡而直接使用unix socket鏈接到Mysql。 socket=/tmp/mysql.sock #避免Mysql的外部鎖定,減小出錯概率,加強穩定性。 skip-external-locking #禁止MySql對外部鏈接進行DNS解析,使用這一選項能夠消除MySQL進行NDS解析的時間。但須要注意的是:若是開啓該選項,則全部遠程主機連 接受權都要使用IP地址方式了,不然MYSQL將沒法正常處理鏈接請求。 skip-name-resolve #back_log參數的值指出在MySQL暫時中止響應新請求以前,短期內的多少個請求能夠被存在對堆棧中,若是系統短期內有不少鏈接,則需>要增大該參數的值,該參數值指定到來的TCP/IP鏈接的監聽隊列的大小。不一樣的操做系統在這個隊列的大小有本身的限制,若是試圖將back_log設定得高於操做系統的限制將是無效的,其默認值爲50,對於LINUX系統而言,推薦設置爲小於512的整數。 back_log=384 #索引緩衝區大小,增長它可獲得更好的索引處理性能,對於內存在4GB左右的服務器,該參數可設置爲256M或384M。若是該參數值設置的過大>反而會使服務器的總體效率下降。 key_buffer_size=384M #設定在網絡傳輸中一次消息傳輸量的最大值,系統默認值爲1MB,最大值是1GB,必須設定爲1024的倍數,單位爲字節。 max_allowed_packet=4M #設置MySQL每一個線程的堆棧大小,默認值足夠大,可知足普通操做。可設置範圍爲128KB至4GB,默認192K。 thread_stack=256k #設定查詢排序時所能使用的緩衝區大小,系統默認大小爲2MB,從5.1.23版本開始,在除了WINDOWS 以外的64位平臺上能夠4GB的限制。該參數 對應的分配內在是每一個鏈接獨佔的,若是有100個鏈接,那麼實際分配的總排序緩衝區大小爲100*6=600MB,那麼對於內存4GB左右的服務器來>說,推薦將其設置爲6MB-8MB。 sort_buffer_size=6M #讀查詢操做所能使用的緩衝區大小,和sort_buffer_size同樣,該參數對應的分配內在也是每一個鏈接獨享。 read_buffer_size=4M #設置Thread Cache池中能夠緩存的鏈接池線程最大數量,可設置爲0-16384,默認爲0。1GB內存咱們配置爲8,2GB內存咱們配置爲16,4GB或4GB以上內在咱們配置爲64。 thread_cache_size=64 #指定Mysql查詢緩衝區的大小,能夠經過在Mysql控制檯觀察,若是Qcache_lowmem_prunes的值很是大,則代表常常出現緩衝不夠的狀況,若是 Qcache_hits的值很是大,則代表查詢緩衝使用的很是頻繁 query_cache_size=64M #設置內在臨時表最大值,若是超過該值,則會將臨時表寫入磁盤,其範圍爲1KB至4GB。 tmp_table_size=256M #指定MYSQL容許的最大鏈接進程數,若是在訪問程序時常常出現TOO MANY CONNECTIONS的錯誤提示,則須要增大該參數值。 max_connections=5000 #指定一個請求的最大鏈接時間,對於4GB左右內在的服務器來講,能夠將其設置爲5-10 wait_timeout=120 #該參數取值爲服務器邏輯CPU數量*2,好比,服務器有兩個物理CPU,每一個物理CPU支持HT超線程,因此實際取值4*2=8,這也是目前雙四核主流 服務器的配置。 thread_concurrency=8 #開啓該選項能夠完全關閉MYSQL的TCP/IP鏈接方式,若是WEB服務器是以遠程鏈接的方式訪問MYSQL的數據庫服務器,則不要開啓該選項,不然>將沒法正常鏈接。 skip-networking innodb_flush_log_at_trx_commit #抱怨Innodb比MyISAM慢 100倍?那麼你大概是忘了調整這個值。默認值1的意思是每一次事務提交或事務外的指令都須要把日誌寫入(flush) 硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設成2對於不少運用,特別是從MyISAM錶轉過來的是能夠的>,它的意思是不寫入硬盤而是寫入系統緩存。日誌仍然會每秒flush到硬 盤,因此你通常不會丟失超過1-2秒的更新。設成0會更快一點,但安>全方面比較差,即便MySQL掛了也可能會丟失事務的數據。而值2只會在整個操做系統 掛了時纔可能丟數據。 innodb_flush_log_at_trx_commit=2 #這是 InnoDB 存儲引擎的事務日誌所使用的緩衝區。相似於 Binlog Buffer,InnoDB 在寫事務日誌的時候,爲了提升性能,也是先將信息寫>入 Innofb Log Buffer 中,當知足 innodb_flush_log_trx_commit 參數所設置的相應條件(或者日誌緩衝區寫滿)以後,纔會將日誌寫到文>件(或者同步到磁盤)中。能夠經過 innodb_log_buffer_size 參數設置其可使用的最大內存空間。 innodb_log_buffer_size=2M #這個數字要根據實際的狀況來設定,但對於大多數的狀況,是一個比較合適的設置 innodb_thread_concurrency=8 #tmp_table_size 的默認大小是 32M。若是一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,若是你作不少 高級 GROUP BY 查詢,增長 tmp_table_size 值。 tmp_table_size=64M #隨機讀取數據緩衝區使用內存(read_rnd_buffer_size):和順序讀取相對應,當 MySQL 進行非順序讀取(隨機讀取)數據塊的時候,會利用>這個緩衝區暫存讀取的數據。如根據索引信息讀取表數據,根據排序後的結果集與表進行Join等等。總的來講,就是當數據塊的讀取須要知足>必定的順序的狀況下,MySQL 就須要產生隨機讀取,進而使用到 read_rnd_buffer_size 參數所設置的內存緩衝區。 read_rnd_buffer_size=16M #你最好在定義數據庫命名規則的時候就所有采用小寫字母加下劃線的組合,而不使用任何的大寫字母。 lower_case_table_names=1 #設置校驗模式 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #默認配置沒開查詢緩存哦親 explicit_defaults_for_timestamp
適用於通常DBA和架構師級別。
[client]port = 3306 # 客戶端端口號爲3306socket = /data/3306/mysql.sockdefault-character-set = utf8 # 客戶端字符集,(控制character_set_client、character_set_connection、character_set_results)[mysql]no-auto-rehash # 僅僅容許使用鍵值的updates和deletes[mysqld] # 組包括了mysqld服務啓動的參數,它涉及的方面不少,其中有MySQL的目錄和文件,通訊、網絡、信息安全,內存管理、優化、查詢緩存區,還有MySQL日誌設置等。user = mysql# mysql_safe腳本使用MySQL運行用戶(編譯時--user=mysql指定),推薦使用mysql用戶。port = 3306# MySQL服務運行時的端口號。建議更改默認端口,默認容易遭受攻擊。socket = /data/3306/mysql.sock # socket文件是在Linux/Unix環境下特有的,用戶在Linux/Unix環境下客戶端鏈接能夠不經過TCP/IP網絡而直接使用unix socket鏈接MySQL。basedir = /application/mysql # mysql程序所存放路徑,經常使用於存放mysql啓動、配置文件、日誌等datadir = /data/3306/data # MySQL數據存放文件(極其重要)character-set-server = utf8 # 數據庫和數據庫表的默認字符集。(推薦utf8,以避免致使亂碼)log-error=/data/3306/mysql.err# mysql錯誤日誌存放路徑及名稱(啓動出現錯誤必定要看錯誤日誌,百分之百都能經過錯誤日誌排插解決。)pid-file=/data/3306/mysql.pid # MySQL_pid文件記錄的是當前mysqld進程的pid,pid亦即ProcessID。skip-locking# 避免MySQL的外部鎖定,減小出錯概率,加強穩定性。skip-name-resolv# 禁止MySQL對外部鏈接進行DNS解析,使用這一選項能夠消除MySQL進行DNS解析的時候。可是須要注意的是,若是開啓該選項,則全部遠程主機鏈接受權都要使用IP地址方式了,不然MySQL將沒法正常處理鏈接請求!skip-networking # 開啓該選項能夠完全關閉MySQL的TCP/IP鏈接方式,若是Web服務器是以遠程鏈接的方式訪問MySQL數據庫服務器的,則不要開啓該選項,不然沒法正常鏈接!open_files_limit = 1024# MySQLd能打開文件的最大個數,若是出現too mant open files之類的就須要調整該值了。back_log = 384 # back_log參數是值指出在MySQL暫時中止響應新請求以前,短期內的多少個請求能夠被存在堆棧中。若是系統在短期內有不少鏈接,則須要增長該參數的值,該參數值指定到來的TCP/IP鏈接的監聽隊列的大小。不一樣的操做系統在這個隊列的大小上有本身的限制。若是試圖將back_log設置得高於操做系統的限制將是無效的,其默認值爲於Linux系統而言,推薦設置爲小於512的整數。max_connections = 800# 指定MySQL容許的最大鏈接進程數。若是在訪問博客時常常出現 Too Many Connections的錯誤提示,則須要增大該參數值。max_connect_errors = 6000 # 設置每一個主機的鏈接請求異常中斷的最大次數,當超過該次數,MySQL服務器將禁止host的鏈接請求,直到MySQL服務器重啓或經過flush hosts命令清空此host的相關信息。wait_timeout = 120 # 指定一個請求的最大鏈接時間,對於4GB左右內存的服務器來講,能夠將其設置爲5~10。table_cache = 614K # table_cache指示表高速緩衝區的大小。當MySQL訪問一個表時,若是在MySQL緩衝區還有空間,那麼這個表就被打開並放入表緩衝區,這樣作的好處是能夠更快速地訪問表中的內容。通常來講,能夠查看數據庫運行峯值時間的狀態值Open_tables和Open_tables,用以判斷是否須要增長table_cache的值,即若是Open_tables接近table_cache的時候,而且Opened_tables這個值在逐步增長,那就要考慮增長這個值的大小了。external-locking = FALSE # MySQL選項能夠避免外部鎖定。True爲開啓。max_allowed_packet =16M # 服務器一次能處理最大的查詢包的值,也是服務器程序可以處理的最大查詢sort_buffer_size = 1M # 設置查詢排序時所能使用的緩衝區大小,系統默認大小爲2MB。# 注意:該參數對應的分配內存是每一個鏈接獨佔的,若是有100個鏈接,那麼實際分配的總排序緩衝區大小爲100 x6=600MB。因此,對於內存在4GB左右的服務器來講,推薦將其設置爲6MB~8MBjoin_buffer_size = 8M# 聯合查詢操做所能使用的緩衝區大小,和sort_buffer_size同樣,該參數對應的分配內存也是每一個鏈接獨享。thread_cache_size = 64# 設置Thread Cache池中能夠緩存的鏈接線程最大數量,可設置爲0~16384,默認爲個值表示能夠從新利用保存在緩存中線程的數量,當斷開鏈接時若是緩存中還有空間,那麼客戶端的線程將被放到緩存中;若是線程從新被請求,那麼請求將從緩存中讀取,若是緩存中是空的或者是新的請求,那麼這個線程將被從新建立,若是有不少線程,增長這個值能夠改善系統性能。經過比較Connections和Threads_created狀態的變量,能夠看到這個變量的做用。咱們能夠根據物理內存設置規則以下:1GB內存咱們配置爲8,2GB內存咱們配置爲16,3GB咱們配置爲32,4GB或4GB以上咱們給此值爲64或更大的值。thread_concurrency = 8 # 該參數取值爲服務器邏輯CPU數量x 2,在本例中,服務器有兩個物理CPU,而每一個物理CPU又支持H.T超線程,因此實際取值爲4 x 2 = 8。這也是雙四核主流服務器的配置。query_cache_size = 64M# 指定MySQL查詢緩衝區的大小。能夠經過在MySQL控制檯觀察,若是Qcache_lowmem_prunes的值很是大,則代表常常出現緩衝不夠的狀況;若是Qcache_hits的值很是大,則代表查詢緩衝使用得很是頻繁。另外若是改值較小反而會影響效率,那麼能夠考慮不用查詢緩衝。對於Qcache_free_blocks,若是該值很是大,則代表緩衝區中碎片不少。query_cache_limit = 2M # 只有小於此設置值的結果纔會被緩存query_cache_min_res_unit = 2k # 設置查詢緩存分配內存的最小單位,要適當第設置此參數,能夠作到爲減小內存快的申請和分配次數,可是設置過大可能致使內存碎片數值上升。默認值爲4K,建議設置爲1K~16K。default_table_type = InnoDB # 默認表的類型爲InnoDBthread_stack = 256K # 設置MySQL每一個線程的堆棧大小,默認值足夠大,可知足普通操做。可設置範圍爲128KB至4GB,默認爲192KB#transaction_isolation = Level# 數據庫隔離級別 (READ UNCOMMITTED(讀取未提交內容) READ COMMITTED(讀取提交內容) REPEATABLEREAD(可重讀) SERIALIZABLE(可串行化))tmp_table_size = 64M # 設置內存臨時表最大值。若是超過該值,則會將臨時表寫入磁盤,其範圍1KB到4GB。max_heap_table_size = 64M # 獨立的內存表所容許的最大容量。table_cache = 614# 給常常訪問的表分配的內存,物理內存越大,設置就越大。調大這個值,通常狀況下能夠下降磁盤IO,但相應的會佔用更多的內存,這裏設置爲614。table_open_cache = 512 # 設置表高速緩存的數目。每一個鏈接進來,都會至少打開一個表緩存。所以, table_cache 的大小應與 max_connections 的設置有關。例如,對於 200 個並行運行的鏈接,應該讓表的緩存至少有 200 × N ,這裏 N 是應用能夠執行的查詢的一個聯接中表的最大數量。此外,還須要爲臨時表和文件保留一些額外的文件描述符。long_query_time = 1 # 慢查詢的執行用時上限,默認設置是10s,推薦(1s~2s)log_long_format # 沒有使用索引的查詢也會被記錄。(推薦,根據業務來調整)log-slow-queries = /data/3306/slow.log # 慢查詢日誌文件路徑(若是開啓慢查詢,建議打開此日誌)log-bin = /data/3306/mysql-bin # logbin數據庫的操做日誌,例如update、delete、create等都會存儲到binlog日誌,經過logbin能夠實現增量恢復relay-log = /data/3306/relay-bin# relay-log日誌記錄的是從服務器I/O線程將主服務器的二進制日誌讀取過來記錄到從服務器本地文件,而後SQL線程會讀取relay-log日誌的內容並應用到從服務器relay-log-info-file = /data/3306/relay-log.info # 從服務器用於記錄中繼日誌相關信息的文件,默認名爲數據目錄中的relay-log.info。binlog_cache_size = 4M # 在一個事務中binlog爲了記錄sql狀態所持有的cache大小,若是你常用大的,多聲明的事務,能夠增長此值來獲取更大的性能,全部從事務來的狀態都被緩衝在binlog緩衝中,而後再提交後一次性寫入到binlog中,若是事務比此值大,會使用磁盤上的臨時文件來替代,此緩衝在每一個連接的事務第一次更新狀態時被建立。max_binlog_cache_size = 8M # 最大的二進制Cache日誌緩衝尺寸。max_binlog_size = 1G # 二進制日誌文件的最大長度(默認設置1GB)一個二進制文件信息超過了這個最大長度以前,MySQL服務器會自動提供一個新的二進制日誌文件接續上。expire_logs_days = 7 # 超過7天的binlog,mysql程序自動刪除(若是數據重要,建議不要開啓該選項)key_buffer_size = 256M # 指定用於索引的緩衝區大小,增長它可獲得更好的索引處理性能。對於內存在4GB左右的服務器來講,該參數可設置爲256MB或384MB。# 注意:若是該參數值設置得過大反而會使服務器的總體效率下降!read_buffer_size = 4M # 讀查詢操做所能使用的緩衝區大小。和sort_buffer_size同樣,該參數對應的分配內存也是每一個鏈接獨享。read_rnd_buffer_size = 16M# 設置進行隨機讀的時候所使用的緩衝區。此參數和read_buffer_size所設置的Buffer相反,一個是順序讀的時候使用,一個是隨機讀的時候使用。可是二者都是針對與線程的設置,每一個線程均可以產生兩種Buffer中的任何一個。默認值256KB,最大值4GB。bulk_insert_buffer_size = 8M # 若是常常性的須要使用批量插入的特殊語句來插入數據,能夠適當調整參數至16MB~32MB,建議8MB。myisam_sort_buffer_size = 8M# 設置在REPAIR Table或用Create index建立索引或 Alter table的過程當中排序索引所分配的緩衝區大小,可設置範圍4Bytes至4GB,默認爲8MBlower_case_table_names = 1 # 實現MySQL不區分大小。(發開需求-建議開啓)slave-skip-errors = 1032,1062 # 從庫能夠跳過的錯誤數字值(mysql錯誤以數字代碼反饋,全的mysql錯誤代碼大全,之後會發布至博客)。replicate-ignore-db=mysql # 在作主從的狀況下,設置不須要同步的庫。server-id = 1 # 表示本機的序列號爲1,若是作主從,或者多實例,serverid必定不能相同。myisam_sort_buffer_size = 128M# 當須要對於執行REPAIR, OPTIMIZE, ALTER 語句重建索引時,MySQL會分配這個緩存,以及LOAD DATA INFILE會加載到一個新表,它會根據最大的配置認真的分配的每一個線程。myisam_max_sort_file_size = 10G# 當從新建索引(REPAIR,ALTER,TABLE,或者LOAD,DATA,TNFILE)時,MySQL被容許使用臨時文件的最大值。myisam_repair_threads = 1# 若是一個表擁有超過一個索引, MyISAM 能夠經過並行排序使用超過一個線程去修復他們.myisam_recover# 自動檢查和修復沒有適當關閉的 MyISAM 表.innodb_additional_mem_pool_size = 4M # 用來設置InnoDB存儲的數據目錄信息和其餘內部數據結構的內存池大小。應用程序裏的表越多,你須要在這裏面分配越多的內存。對於一個相對穩定的應用,這個參數的大小也是相對穩定的,也沒有必要預留很是大的值。若是InnoDB用廣了這個池內的內存,InnoDB開始從操做系統分配內存,而且往MySQL錯誤日誌寫警告信息。默認爲1MB,當發現錯誤日誌中已經有相關的警告信息時,就應該適當的增長該參數的大小。innodb_buffer_pool_size = 64M # InnoDB使用一個緩衝池來保存索引和原始數據,設置越大,在存取表裏面數據時所須要的磁盤I/O越少。強烈建議不要武斷地將InnoDB的Buffer Pool值配置爲物理內存的50%~80%,應根據具體環境而定。innodb_data_file_path = ibdata1:128M:autoextend # 設置配置一個可擴展大小的尺寸爲128MB的單獨文件,名爲ibdata有給出文件的位置,因此默認的是在MySQL的數據目錄內。innodb_file_io_threads = 4 # InnoDB中的文件I/O線程。一般設置爲4,若是是windows能夠設置更大的值以提升磁盤I/Oinnodb_thread_concurrency = 8 # 你的服務器有幾個CPU就設置爲幾,建議用默認設置,通常設爲8。innodb_flush_log_at_trx_commit = 1 # 設置爲0就等於innodb_log_buffer_size隊列滿後在統一存儲,默認爲1,也是最安全的設置。innodb_log_buffer_size = 2M # 默認爲1MB,一般設置爲8~16MB就足夠了。innodb_log_file_size = 32M # 肯定日誌文件的大小,更大的設置能夠提升性能,但也會增長恢復數據庫的時間。innodb_log_files_in_group = 3 # 爲提升性能,MySQL能夠以循環方式將日誌文件寫到多個文件。推薦設置爲3。innodb_max_dirty_pages_pct = 90 # InnoDB主線程刷新緩存池中的數據。innodb_lock_wait_timeout = 120 # InnoDB事務被回滾以前能夠等待一個鎖定的超時秒數。InnoDB在它本身的鎖定表中自動檢測事務死鎖而且回滾事務。InnoDB用locak tables 語句注意到鎖定設置。默認值是50秒。innodb_file_per_table = 0 # InnoDB爲獨立表空間模式,每一個數據庫的每一個表都會生成一個數據空間。0關閉,1開啓。# 獨立表空間優勢:# 一、每一個表都有本身獨立的表空間。# 2 、每一個表的數據和索引都會存在本身的表空間中。# 三、能夠實現單表在不一樣的數據庫中移動。# 四、空間能夠回收(除drop table操做處,表空不能本身回收。)[mysqldump]quick#quick 不緩衝查詢,直接導出至stdoutmax_allowed_packet = 2M # 設定在網絡傳輸中一次消息傳輸量的最大值。系統默認值爲1MB,最大值是1GB,必須設置爲1024的倍數。單位爲字節。
MySQL最重要的兩種存儲引擎InnoDB與Myisam,這是基礎,必定要知道
物理結構不一樣
MyISAM :每一個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。
.frm文件存儲表定義.
數據文件的擴展名爲.MYD (MYData)。
索引文件的擴展名是.MYI (MYIndex)
InnoDB:基於磁盤的資源是InnoDB表空間數據文件和它的日誌文件,InnoDB 表的大小隻受限於操做系統文件的大小,通常爲 2GB
anto_increment 機制不一樣
一張表,裏面有ID自增主鍵,當insert了17條記錄以後,刪除了第15,16,17條記錄,再把Mysql重啓,再insert一條記錄,這條記錄的ID是18仍是15 。
答案:
若是表的類型是MyISAM,那麼是18。
由於MyISAM表會把自增主鍵的最大ID記錄到數據文件裏,重啓MySQL自增主鍵的最大ID也不會丟失。
若是表的類型是InnoDB,那麼是15。
InnoDB表只是把自增主鍵的最大ID記錄到內存中,因此重啓數據庫或者是對錶進行OPTIMIZE操做,都會致使最大ID丟失。
查看是否已經啓用profile,默認是關閉的
select @@profiling;
啓用profiling(變量profiling是用戶變量每次都得從新啓用)
set profiling = 1;
使用profiling記錄用戶執行的SQL 查詢分析的語句
show profiles;
裏面有以前執行過的語句。根據id來具體查看io,cpu使用狀況
show profile block io, cpu for query 1;