MySQL開啟SSL認證,以及簡單優化


1.1 MySQL開啟SSL認證

#生成一個 CA 私鑰
[root@db01 ssl]# openssl genrsa 2048 > ca-key.pem 
Generating RSA private key, 2048 bit long modulus
..........+++
.............................+++
e is 65537 (0x10001)
#通過 CA 私鑰生成數字證書
[root@db01 ssl]# openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem 
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:10.0.0.51
Email Address []:
#創建 MySQL 服務器 私鑰和請求證書
[root@db01 ssl]# openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem 
Generating a 2048 bit RSA private key
......................................................................................+++
...............+++
writing new private key to 'server-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:10.0.0.51
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#將生成的私鑰轉換為 RSA 私鑰文件格式
[root@db01 ssl]# openssl rsa -in server-key.pem -out server-key.pem 
writing RSA key
#用CA 證書來生成一個服務器端的數字證書
[root@db01 ssl]#  openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem 
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd/CN=10.0.0.51
Getting CA Private Key
#創建客戶端的 RSA 私鑰和數字證書
[root@db01 ssl]# openssl req -newkey rsa:2048 -days 3600  -nodes -keyout client-key.pem -out client-req.pem
Generating a 2048 bit RSA private key
...................+++
...................................................+++
writing new private key to 'client-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:10.0.0.51
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#將生成的私鑰轉換為 RSA 私鑰文件格式
[root@db01 ssl]# openssl rsa -in client-key.pem -out client-key.pem
writing RSA key
#用CA 證書來生成一個客戶端的數字證書
[root@db01 ssl]# openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
We need a private key to sign with
  •  修改配置文件
[root@db01 ssl]# chown -R mysql.mysql /data/ssl/
[root@db01 ssl]# cat /etc/my.cnf
[client]
socket = /data/mysql.sock
[mysqld]
ssl-ca=/data/ssl/ca.pem 
ssl-cert=/data/ssl/server-cert.pem 
ssl-key=/data/ssl/server-key.pem
[root@db01 ssl]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL....................... SUCCESS! 
[root@db01 ssl]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.34-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'have%ssl%'; 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
| have_ssl      | YES   |
+---------------+-------+
2 rows in set (0.10 sec)
  • 測試ssl登陸
mysql> grant all on *.* to 'ssl_test'@'%' identified by '123' require SSL; 
Query OK, 0 rows affected (0.03 sec)
#在db02上連接
[root@db02 ~]# mysql -h 10.0.0.51 -ussl_test -p'123' 
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'ssl_test'@'10.0.0.52' (using password: YES)
#必須指定ssl才可以連接
[root@db02 ~]# mysql -h 10.0.0.51 -ussl_test -p'123' --ssl-cert=client-cert.pem --ssl-key=client-key.pem 
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.6.34-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

SSL主從復制

  • 從庫也需要開啟ssl,把主庫生成的證書復制給從庫
#從庫需要連接指定ssl
mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.51', MASTER_USER='rep', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=336, MASTER_SSL=1, MASTER_SSL_CA = '/data/ssl/ca.pem', MASTER_SSL_CERT = '/data/ssl/server-cert.pem', MASTER_SSL_KEY = '/data/ssl/server-key.pem';
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.0.51
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 336
               Relay_Log_File: db02-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 336
              Relay_Log_Space: 455
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /data/ssl/ca.pem
           Master_SSL_CA_Path: 
              Master_SSL_Cert: /data/ssl/server-cert.pem
            Master_SSL_Cipher: 
               Master_SSL_Key: /data/ssl/server-key.pem
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: e3b3eaa7-586a-11e8-9e14-000c29605a1f
             Master_Info_File: /data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

 1.2 MySQL優化

back_log:back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。也就是說,如果MySql的連接數據達到max_connections時,新來的請求將會被存在堆棧中,以等待某一連接釋放資源,該堆棧的數量即back_log,如果等待連接的數量超過back_log,將不被授予連接資源。可以從默認的50升至500

wait_timeout:數據庫連接閑置時間,閑置連接會占用內存資源。可以從默認的8小時減到半小時。另外顯示timeout設置:show variables like “%timeout%”;

max_user_connection: 最大連接數,默認為0無上限,最好設一個合理上限

thread_concurrency:並發線程數,設為CPU核數的兩倍

skip_name_resolve:禁止對外部連接進行DNS解析,消除DNS解析時間,但需要所有遠程主機用IP訪問

key_buffer_size:索引塊的緩存大小,增加會提升索引處理速度,對MyISAM表性能影響最大。對於內存4G左右,可設為256M或384M,通過查詢show status like 'key_read%',保證key_reads / key_read_requests在0.1%以下最好

innodb_buffer_pool_size:緩存數據塊和索引塊,對InnoDB表性能影響最大。通過查詢show status like 'Innodb_buffer_pool_read%',保證 (Innodb_buffer_pool_read_requests – Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests越高越好

innodb_additional_mem_pool_size:InnoDB存儲引擎用來存放數據字典信息以及一些內部數據結構的內存空間大小,當數據庫對象非常多的時候,適當調整該參數的大小以確保所有數據都能存放在內存中提高訪問效率,當過小的時候,MySQL會記錄Warning信息到數據庫的錯誤日志中,這時就需要該調整這個參數大小

innodb_log_buffer_size:InnoDB存儲引擎的事務日志所使用的緩沖區,一般來說不建議超過32MB

query_cache_size:緩存MySQL中的ResultSet,也就是一條SQL語句執行的結果集,所以僅僅只能針對select語句。當某個表的數據有任何任何變化,都會導致所有引用了該表的select語句在Query Cache中的緩存數據失效。所以,當我們的數據變化非常頻繁的情況下,使用Query Cache可能會得不償失。根據命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))進行調整,一般不建議太大,256MB可能已經差不多了,大型的配置型靜態數據可適當調大.
可以通過命令show status like 'Qcache_%'查看目前系統Query catch使用大小

read_buffer_size:MySql讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySql會為它分配一段內存緩沖區。如果對表的順序掃描請求非常頻繁,可以通過增加該變量值以及內存緩沖區大小提高其性能

sort_buffer_size:MySql執行排序使用的緩沖大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。如果不能,可以嘗試增加sort_buffer_size變量的大小

read_rnd_buffer_size:MySql的隨機讀緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySql會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySql會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大。

record_buffer:每個進行一個順序掃描的線程為其掃描的每張表分配這個大小的一個緩沖區。如果你做很多順序掃描,可能想要增加該值

thread_cache_size:保存當前沒有與連接關聯但是准備為后面新的連接服務的線程,可以快速響應連接的線程請求而無需創建新的

table_cache:類似於thread_cache_size,但用來緩存表文件,對InnoDB效果不大,主要用於MyISAM

  版本二:

# 以下選項會被MySQL客戶端應用讀取。  
# 注意只有MySQL附帶的客戶端應用程序保證可以讀取這段內容。  
# 如果你想你自己的MySQL應用程序獲取這些值。  
# 需要在MySQL客戶端庫初始化的時候指定這些選項。  
   
#  
[client]  
#password = [your_password]  
port = @MYSQL_TCP_PORT@  
socket = @MYSQL_UNIX_ADDR@  
   
# *** 應用定制選項 ***  
   
#  
# MySQL 服務端  
#  
[mysqld]  
   
# 一般配置選項  
port = @MYSQL_TCP_PORT@  
socket = @MYSQL_UNIX_ADDR@  
   
# back_log 是操作系統在監聽隊列中所能保持的連接數,  
# 隊列保存了在 MySQL 連接管理器線程處理之前的連接.  
# 如果你有非常高的連接率並且出現 “connection refused” 報錯,  
# 你就應該增加此處的值.  
# 檢查你的操作系統文檔來獲取這個變量的最大值.  
# 如果將back_log設定到比你操作系統限制更高的值,將會沒有效果  
back_log = 300  
   
# 不在 TCP/IP 端口上進行監聽.  
# 如果所有的進程都是在同一台服務器連接到本地的 mysqld,  
# 這樣設置將是增強安全的方法  
# 所有 mysqld 的連接都是通過 Unix Sockets 或者命名管道進行的.  
# 注意在 Windows下如果沒有打開命名管道選項而只是用此項  
# (通過 “enable-named-pipe” 選項) 將會導致 MySQL 服務沒有任何作用!  
#skip-networking  
   
# MySQL 服務所允許的同時會話數的上限  
# 其中一個連接將被 SUPER 權限保留作為管理員登錄.  
# 即便已經達到了連接數的上限.  
max_connections = 3000  
   
# 每個客戶端連接最大的錯誤允許數量,如果達到了此限制.  
# 這個客戶端將會被 MySQL 服務阻止直到執行了 “FLUSH HOSTS” 或者服務重啟  
# 非法的密碼以及其他在鏈接時的錯誤會增加此值.  
# 查看 “Aborted_connects” 狀態來獲取全局計數器.  
max_connect_errors = 50  
   
# 所有線程所打開表的數量.  
# 增加此值就增加了 mysqld 所需要的文件描述符的數量  
# 這樣你需要確認在 [mysqld_safe] 中 “open-files-limit” 變量設置打開文件數量允許至少等於 table_cache 的值  
table_open_cache = 4096  
   
# 允許外部文件級別的鎖. 打開文件鎖會對性能造成負面影響  
# 所以只有在你在同樣的文件上運行多個數據庫實例時才使用此選項(注意仍會有其他約束!)  
# 或者你在文件層面上使用了其他一些軟件依賴來鎖定 MyISAM 表  
#external-locking  
   
# 服務所能處理的請求包的最大大小以及服務所能處理的最大的請求大小(當與大的 BLOB 字段一起工作時相當必要)  
# 每個連接獨立的大小,大小動態增加  
max_allowed_packet = 32M  
   
# 在一個事務中 binlog 為了記錄 SQL 狀態所持有的 cache 大小  
# 如果你經常使用大的,多聲明的事務,你可以增加此值來獲取更大的性能.  
# 所有從事務來的狀態都將被緩沖在 binlog 緩沖中然后在提交后一次性寫入到 binlog 中  
# 如果事務比此值大, 會使用磁盤上的臨時文件來替代.  
# 此緩沖在每個連接的事務第一次更新狀態時被創建  
binlog_cache_size = 4M  
   
# 獨立的內存表所允許的最大容量.  
# 此選項為了防止意外創建一個超大的內存表導致永盡所有的內存資源.  
max_heap_table_size = 128M  
   
# 隨機讀取數據緩沖區使用內存(read_rnd_buffer_size):和順序讀取相對應,  
# 當 MySQL 進行非順序讀取(隨機讀取)數據塊的時候,會利用>這個緩沖區暫存讀取的數據  
# 如根據索引信息讀取表數據,根據排序后的結果集與表進行 Join 等等  
# 總的來說,就是當數據塊的讀取需要滿足>一定的順序的情況下,MySQL 就需要產生隨機讀取,進而使用到 read_rnd_buffer_size 參數所設置的內存緩沖區  
read_rnd_buffer_size = 16M  
   
# 排序緩沖被用來處理類似 ORDER BY 以及 GROUP BY 隊列所引起的排序  
# 如果排序后的數據無法放入排序緩沖,一個用來替代的基於磁盤的合並分類會被使用  
# 查看 “Sort_merge_passes” 狀態變量.  
# 在排序發生時由每個線程分配  
sort_buffer_size = 16M  
   
# 此緩沖被使用來優化全聯合(FULL JOINS 不帶索引的聯合).  
# 類似的聯合在極大多數情況下有非常糟糕的性能表現,但是將此值設大能夠減輕性能影響.  
# 通過 “Select_full_join” 狀態變量查看全聯合的數量  
# 當全聯合發生時,在每個線程中分配  
join_buffer_size = 16M  
   
# 我們在 cache 中保留多少線程用於重用  
# 當一個客戶端斷開連接后,如果 cache 中的線程還少於 thread_cache_size,則客戶端線程被放入cache 中.  
# 這可以在你需要大量新連接的時候極大的減少線程創建的開銷  
# (一般來說如果你有好的線程模型的話,這不會有明顯的性能提升.)  
thread_cache_size = 16  
   
# 此允許應用程序給予線程系統一個提示在同一時間給予渴望被運行的線程的數量.  
# 此值只對於支持 thread_concurrency() 函數的系統有意義( 例如Sun Solaris).  
# 你可可以嘗試使用 [CPU數量]*(2..4) 來作為 thread_concurrency 的值  
thread_concurrency = 8  
   
# 查詢緩沖常被用來緩沖 SELECT 的結果並且在下一次同樣查詢的時候不再執行直接返回結果.  
# 打開查詢緩沖可以極大的提高服務器速度, 如果你有大量的相同的查詢並且很少修改表.  
# 查看 “Qcache_lowmem_prunes” 狀態變量來檢查是否當前值對於你的負載來說是否足夠高.  
# 注意: 在你表經常變化的情況下或者如果你的查詢原文每次都不同,  
# 查詢緩沖也許引起性能下降而不是性能提升.  
query_cache_size = 128M  
   
# 只有小於此設定值的結果才會被緩沖  
# 此設置用來保護查詢緩沖,防止一個極大的結果集將其他所有的查詢結果都覆蓋.  
query_cache_limit = 4M  
   
# 被全文檢索索引的最小的字長.  
# 你也許希望減少它,如果你需要搜索更短字的時候.  
# 注意在你修改此值之后,你需要重建你的 FULLTEXT 索引  
ft_min_word_len = 8  
   
# 如果你的系統支持 memlock() 函數,你也許希望打開此選項用以讓運行中的 mysql 在在內存高度緊張的時候,數據在內存中保持鎖定並且防止可能被 swapping out  
# 此選項對於性能有益  
#memlock  
   
# 當創建新表時作為默認使用的表類型,  
# 如果在創建表示沒有特別執行表類型,將會使用此值  
default_table_type = InnoDB  
   
# 線程使用的堆大小. 此容量的內存在每次連接時被預留.  
# MySQL 本身常不會需要超過 64K 的內存  
# 如果你使用你自己的需要大量堆的 UDF 函數或者你的操作系統對於某些操作需要更多的堆,你也許需要將其設置的更高一點.  
thread_stack = 512K  
   
# 設定默認的事務隔離級別.可用的級別如下:  
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE  
transaction_isolation = REPEATABLE-READ  
   
# 內部(內存中)臨時表的最大大小  
# 如果一個表增長到比此值更大,將會自動轉換為基於磁盤的表.  
# 此限制是針對單個表的,而不是總和.  
tmp_table_size = 128M  
   
# 打開二進制日志功能.  
# 在復制(replication)配置中,作為 MASTER 主服務器必須打開此項  
# 如果你需要從你最后的備份中做基於時間點的恢復,你也同樣需要二進制日志.  
log-bin=mysql-bin  
   
# 如果你在使用鏈式從服務器結構的復制模式 (A->B->C),  
# 你需要在服務器B上打開此項.  
# 此選項打開在從線程上重做過的更新的日志, 並將其寫入從服務器的二進制日志.  
#log_slave_updates  
   
# 打開全查詢日志. 所有的由服務器接收到的查詢 (甚至對於一個錯誤語法的查詢)  
# 都會被記錄下來. 這對於調試非常有用, 在生產環境中常常關閉此項.  
#general_log=ON  
#general_log_file=/usr/local/mysql/log/mysql.log  
   
# 將警告打印輸出到錯誤 log 文件. 如果你對於 MySQL 有任何問題  
# 你應該打開警告 log 並且仔細審查錯誤日志,查出可能的原因.  
#log_warnings  
   
# 記錄慢速查詢. 慢速查詢是指消耗了比 “long_query_time” 定義的更多時間的查詢.  
# 如果 log_long_format 被打開,那些沒有使用索引的查詢也會被記錄.  
# 如果你經常增加新查詢到已有的系統內的話. 一般來說這是一個好主意,  
log_slow_queries  
   
# 所有的使用了比這個時間(以秒為單位)更多的查詢會被認為是慢速查詢.  
# 不要在這里使用“1″, 否則會導致所有的查詢,甚至非常快的查詢頁被記錄下來(由於 MySQL 目前時間的精確度只能達到秒的級別).  
long_query_time = 6  
   
# 在慢速日志中記錄更多的信息.  
# 一般此項最好打開.  
# 打開此項會記錄使得那些沒有使用索引的查詢也被作為到慢速查詢附加到慢速日志里  
log_long_format  
   
# 此目錄被MySQL用來保存臨時文件.例如,  
# 它被用來處理基於磁盤的大型排序,和內部排序一樣.  
# 以及簡單的臨時表.  
# 如果你不創建非常大的臨時文件,將其放置到 swapfs/tmpfs 文件系統上也許比較好  
# 另一種選擇是你也可以將其放置在獨立的磁盤上.  
# 你可以使用”;”來放置多個路徑  
# 他們會按照 roud-robin 方法被輪詢使用.  
#tmpdir = /tmp  
   
# *** 主從復制相關的設置  
   
# 唯一的服務辨識號,數值位於 1 到 2^32-1之間.  
# 此值在master和slave上都需要設置.  
# 如果 “master-host” 沒有被設置,則默認為1, 但是如果忽略此選項,MySQL不會作為master生效.  
server-id = 1  
   
# 復制的Slave (去掉master段的注釋來使其生效)  
#  
# 為了配置此主機作為復制的slave服務器,你可以選擇兩種方法:  
#  
# 1) 使用 CHANGE MASTER TO 命令 (在我們的手冊中有完整描述) -  
# 語法如下:  
#  
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,  
# MASTER_USER=, MASTER_PASSWORD= ;  
#  
# 你需要替換掉 , , 等被尖括號包圍的字段以及使用master的端口號替換 (默認3306).  
#  
# 例子:  
#  
# CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,  
# MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;  
#  
# 或者  
#  
# 2) 設置以下的變量. 不論如何, 在你選擇這種方法的情況下, 然后第一次啟動復制(甚至不成功的情況下,  
# 例如如果你輸入錯密碼在master-password字段並且slave無法連接),  
# slave會創建一個 master.info 文件,並且之后任何對於包含在此文件內的參數的變化都會被忽略  
# 並且由 master.info 文件內的內容覆蓋, 除非你關閉slave服務, 刪除 master.info 並且重啟slave 服務.  
# 由於這個原因,你也許不想碰一下的配置(注釋掉的) 並且使用 CHANGE MASTER TO (查看上面) 來代替  
#  
# 所需要的唯一id號位於 2 和 2^32 – 1之間  
# (並且和master不同)  
# 如果master-host被設置了.則默認值是2  
# 但是如果省略,則不會生效  
#server-id = 2  
#  
# 復制結構中的master – 必須  
#master-host =  
#  
# 當連接到master上時slave所用來認證的用戶名 – 必須  
#master-user =  
#  
# 當連接到master上時slave所用來認證的密碼 – 必須  
#master-password =  
#  
# master監聽的端口.  
# 可選 – 默認是3306  
#master-port =  
   
# 使得slave只讀.只有用戶擁有SUPER權限和在上面的slave線程能夠修改數據.  
# 你可以使用此項去保證沒有應用程序會意外的修改slave而不是master上的數據  
#read_only  
   
#*** MyISAM 相關選項  
   
# 關鍵詞緩沖的大小, 一般用來緩沖 MyISAM 表的索引塊.  
# 不要將其設置大於你可用內存的30%,  
# 因為一部分內存同樣被OS用來緩沖行數據  
# 甚至在你並不使用 MyISAM 表的情況下, 你也需要仍舊設置起 8-64M 內存由於它同樣會被內部臨時磁盤表使用.  
key_buffer_size = 128M  
   
# 用來做 MyISAM 表全表掃描的緩沖大小.  
# 當全表掃描需要時,在對應線程中分配.  
read_buffer_size = 8M  
   
# 當在排序之后,從一個已經排序好的序列中讀取行時,行數據將從這個緩沖中讀取來防止磁盤尋道.  
# 如果你增高此值,可以提高很多 ORDER BY 的性能.  
# 當需要時由每個線程分配  
read_rnd_buffer_size = 64M  
   
# MyISAM 使用特殊的類似樹的 cache 來使得突發插入  
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA INFILE) 更快.  
# 此變量限制每個進程中緩沖樹的字節數.  
# 設置為 0 會關閉此優化.  
# 為了最優化不要將此值設置大於 “key_buffer_size”.  
# 當突發插入被檢測到時此緩沖將被分配.  
bulk_insert_buffer_size = 256M  
   
# 此緩沖當 MySQL 需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引起重建索引時被分配.  
# 這在每個線程中被分配.所以在設置大值時需要小心.  
myisam_sort_buffer_size = 256M  
   
# MySQL 重建索引時所允許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).  
# 如果文件大小比此值更大,索引會通過鍵值緩沖創建(更慢)  
myisam_max_sort_file_size = 10G  
   
# 如果被用來更快的索引創建索引所使用臨時文件大於制定的值,那就使用鍵值緩沖方法.  
# 這主要用來強制在大表中長字串鍵去使用慢速的鍵值緩沖方法來創建索引.  
myisam_max_extra_sort_file_size = 10G  
   
# 如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個線程去修復他們.  
# 這對於擁有多個 CPU 以及大量內存情況的用戶,是一個很好的選擇.  
myisam_repair_threads = 1  
   
# 自動檢查和修復沒有適當關閉的 MyISAM 表.  
myisam_recover  
   
# 默認關閉 Federated  
skip-federated  
   
# *** BDB 相關選項 ***  
   
# 如果你運行的MySQL服務有BDB支持但是你不准備使用的時候使用此選項. 這會節省內存並且可能加速一些事.  
skip-bdb  
   
# *** INNODB 相關選項 ***  
   
# 如果你的 MySQL 服務包含 InnoDB 支持但是並不打算使用的話,  
# 使用此選項會節省內存以及磁盤空間,並且加速某些部分  
#skip-innodb  
   
# 附加的內存池被 InnoDB 用來保存 metadata 信息(5.6中不再推薦使用)  
# 如果 InnoDB 為此目的需要更多的內存,它會開始從 OS 這里申請內存.  
# 由於這個操作在大多數現代操作系統上已經足夠快, 你一般不需要修改此值.  
# SHOW INNODB STATUS 命令會顯示當先使用的數量.  
innodb_additional_mem_pool_size = 64M  
   
# InnoDB使用一個緩沖池來保存索引和原始數據, 不像 MyISAM.  
# 這里你設置越大,這能保證你在大多數的讀取操作時使用的是內存而不是硬盤,在存取表里面數據時所需要的磁盤 I/O 越少.  
# 在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的80%  
# 不要設置過大,否則,由於物理內存的競爭可能導致操作系統的換頁顛簸.  
# 注意在32位系統上你每個進程可能被限制在 2-3.5G 用戶層面內存限制,  
# 所以不要設置的太高.  
innodb_buffer_pool_size = 6G  
   
# InnoDB 將數據保存在一個或者多個數據文件中成為表空間.  
# 如果你只有單個邏輯驅動保存你的數據,一個單個的自增文件就足夠好了.  
# 其他情況下.每個設備一個文件一般都是個好的選擇.  
# 你也可以配置 InnoDB 來使用裸盤分區 – 請參考手冊來獲取更多相關內容  
innodb_data_file_path = ibdata1:10M:autoextend  
   
# 設置此選項如果你希望InnoDB表空間文件被保存在其他分區.  
# 默認保存在MySQL的datadir中.  
#innodb_data_home_dir =  
   
# 用來同步IO操作的IO線程的數量.  
# 此值在Unix下被硬編碼為8,但是在Windows磁盤I/O可能在一個大數值下表現的更好.  
innodb_file_io_threads = 8  
   
# 如果你發現 InnoDB 表空間損壞, 設置此值為一個非零值可能幫助你導出你的表.  
# 從1開始並且增加此值知道你能夠成功的導出表.  
#innodb_force_recovery=1  
   
# 在 InnoDb 核心內的允許線程數量.  
# 最優值依賴於應用程序,硬件以及操作系統的調度方式.  
# 過高的值可能導致線程的互斥顛簸.  
innodb_thread_concurrency = 16  
   
# 如果設置為1 ,InnoDB 會在每次提交后刷新(fsync)事務日志到磁盤上,  
# 這提供了完整的 ACID 行為.  
# 如果你願意對事務安全折衷, 並且你正在運行一個小的事物, 你可以設置此值到0或者2來減少由事務日志引起的磁盤I/O  
# 0代表日志只大約每秒寫入日志文件並且日志文件刷新到磁盤.  
# 2代表日志寫入日志文件在每次提交后,但是日志文件只有大約每秒才會刷新到磁盤上.  
innodb_flush_log_at_trx_commit = 2  
(說明:如果是游戲服務器,建議此值設置為2;如果是對數據安全要求極高的應用,建議設置為1;設置為0性能最高,但如果發生故障,數據可能會有丟失的危險!默認值1的意思是每一次事務提交或事務外的指令都需要把日志寫入(flush)硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設成2對於很多運用,特別是從MyISAM表轉過來的是可以的,它的意思是不寫入硬盤而是寫入系統緩存。日志仍然會每秒flush到硬盤,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的數據。而值2只會在整個操作系統掛了時才可能丟數據。)  
   
# 加速 InnoDB 的關閉. 這會阻止 InnoDB 在關閉時做全清除以及插入緩沖合並.  
# 這可能極大增加關機時間, 但是取而代之的是 InnoDB 可能在下次啟動時做這些操作.  
#innodb_fast_shutdown  
   
# 用來緩沖日志數據的緩沖區的大小.  
# 當此值快滿時, InnoDB 將必須刷新數據到磁盤上.  
# 由於基本上每秒都會刷新一次,所以沒有必要將此值設置的太大(甚至對於長事務而言)  
innodb_log_buffer_size = 16M  
   
# 在日志組中每個日志文件的大小.  
# 你應該設置日志文件總合大小到你緩沖池大小的25%~100%  
# 來避免在日志文件覆寫上不必要的緩沖池刷新行為.  
# 不論如何, 請注意一個大的日志文件大小會增加恢復進程所需要的時間.  
innodb_log_file_size = 512M  
   
# 在日志組中的文件總數.  
# 通常來說2~3是比較好的.  
innodb_log_files_in_group = 3  
   
# InnoDB 的日志文件所在位置. 默認是 MySQL 的 datadir.  
# 你可以將其指定到一個獨立的硬盤上或者一個RAID1卷上來提高其性能  
#innodb_log_group_home_dir  
   
# 在 InnoDB 緩沖池中最大允許的臟頁面的比例.  
# 如果達到限額, InnoDB 會開始刷新他們防止他們妨礙到干凈數據頁面.  
# 這是一個軟限制,不被保證絕對執行.  
innodb_max_dirty_pages_pct = 90  
   
# InnoDB 用來刷新日志的方法.  
# 表空間總是使用雙重寫入刷新方法  
# 默認值是 “fdatasync”, 另一個是 “O_DSYNC”.  
# 一般來說,如果你有硬件 RAID 控制器,並且其獨立緩存采用 write-back 機制,並有着電池斷電保護,那么應該設置配置為 O_DIRECT  
# 否則,大多數情況下應將其設為 fdatasync  
#innodb_flush_method=fdatasync  
   
# 在被回滾前,一個 InnoDB 的事務應該等待一個鎖被批准多久.  
# InnoDB 在其擁有的鎖表中自動檢測事務死鎖並且回滾事務.  
# 如果你使用 LOCK TABLES 指令, 或者在同樣事務中使用除了 InnoDB 以外的其他事務安全的存儲引擎  
# 那么一個死鎖可能發生而 InnoDB 無法注意到.  
# 這種情況下這個 timeout 值對於解決這種問題就非常有幫助.  
innodb_lock_wait_timeout = 120  
   
# 這項設置告知InnoDB是否需要將所有表的數據和索引存放在共享表空間里(innodb_file_per_table = OFF) 或者為每張表的數據單獨放在一個.ibd文件(innodb_file_per_table = ON)  
# 每張表一個文件允許你在drop、truncate或者rebuild表時回收磁盤空間  
# 這對於一些高級特性也是有必要的,比如數據壓縮,但是它不會帶來任何性能收益  
innodb_file_per_table = on  
   
[mysqldump]  
# 不要在將內存中的整個結果寫入磁盤之前緩存. 在導出非常巨大的表時需要此項  
quick  
   
max_allowed_packet = 32M  
   
[mysql]  
no-auto-rehash  
   
# 僅僅允許使用鍵值的 UPDATEs 和 DELETEs .  
#safe-updates  
   
[myisamchk]  
key_buffer = 16M  
sort_buffer_size = 16M  
read_buffer = 8M  
write_buffer = 8M  
   
[mysqlhotcopy]  
interactive-timeout  
   
[mysqld_safe]  
# 增加每個進程的可打開文件數量.  
# 警告: 確認你已經將全系統限制設定的足夠高!  
# 打開大量表需要將此值設大  
open-files-limit = 8192

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM