root@msc3:~# which mysqld /usr/sbin/mysqld root@msc3:~# /usr/sbin/mysqld --verbose --help |grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 一個典型的配置文件包含多個部分,每個部分的開頭是一個方括號括起來的分段名稱。MySQL程序通常讀取跟它同名的分段部分,比如,許多客戶端程序讀取client部分。服務器通常讀取mysqld這一段,一定要確認配置項放在了文件正確的分段中,否則配置是不會生效的。
# 設置全局變量,GLOBAL和@@global作用是一樣的 set GLOBAL sort-buffer-size = <value> set @@global.sort-buffer-size := <value> # 設置會話級變量,下面6種方式作用是一樣的 # 即:沒有修飾符、SESSION、LOCAL等修飾符作用是一致的 set SESSION sort-buffer-size = <value> set @@session.sort-buffer-size := <value> set @@sort-buffer-size = <value> set LOCAL sort-buffer-size = <value> set @@ocal.sort-buffer-size := <value> set sort-buffer-size = <value> # set命令可以同時設置多個變量,但其中只要有一個變量設置失敗,所有的變量都未生效 SET GLOBAL sort-buffer-size = 100, SESSION sort-buffer-size = 1000; SET GLOBAL max-connections = 1000, sort-buffer-size = 1000000; 動態的設置變量,MySQL關閉時這些變量都會失效。如果在服務器運行時修改了變量的全局值,這個值對當前會話和其他任何已經存在的會話都不起效果,這是因為會話的變量值是在連接創建時從全局值初始化而來的。注意,在配置修改后,需要確認是否修改成功。
// @exp 表示用戶變量,上面的示例均是系統變量 // 錯誤 set @user = 123456; set @group = select GROUP from USER where User = @user; select * from USER where GROUP = @group; // 正確 SET @user := 123456; SELECT @group := `group` FROM user WHERE user = @user; SELECT * FROM user WHERE `group` = @group; 有一些配置使用了不同的單位,比如 table-cache變量指定表可以被緩存的數量,而不是表可以被緩存的字節數。而 key-buffer-size則是以字節為單位。
GENERAL 首先創建一個用戶mysql來運行mysqld進程,請確保這個用戶擁有操作數據目錄的權限。設置默認端口為3306,有時為了安全,可能會修改一下。默認選擇Innodb存儲引擎,在大多數情況下是最好的選擇。但如果默認是InnoDB,卻需要使用MyISAM存儲引擎,請顯式地進行配置。許多用戶認為其數據庫使用了某種存儲引擎但實際上卻使用的是另外一種,就是因為默認配置的問題。
MySQL-checkpoint技術 How InnoDB performs a checkpoint innodb-flush-log-at-trx-commit 前面討論了很多緩存,InnoDB日志也是有緩存的。當InnoDB變更任何數據時,會寫一條變更記錄到日志緩存區。在緩沖慢的時候、事務提交的時候,或者每一秒鐘,InnoDB都會將緩沖區的日志刷新到磁盤的日志文件。如果有大事務,增加日志緩沖區大小可以幫助減少I/O,變量 innodb-log-buffer-size可以控制日志緩沖區的大小。通常不需要把日志緩沖區設置的非常大,畢竟上述3個條件,任一條件先觸發都會把緩沖區的內容刷新到磁盤,所以緩沖區的數據肯定不會太多,出入你的數據中有很多相當大的BLOB記錄。通常來說,配置1M~8M即可。